视频播放器-FFMPEG官方库,包含lib,include,bin x64和x86平台的所有文件,提取码4v2c
视频播放器-LQVideo实现视频解码C++源代码,提取码br9u
视频播放器-SoundTouch实现声音变速的C++源代码,提取码6htk
根据项目需求,视频播放器需要满足如下要求:
- 视频可以设置时间点,时间点触发事件,所以视频必须保证能准确切换到某一个时间点
- 多个视频同时播放
- 视频保证预加载,两个视频之间可以无缝衔接
- 视频播放完可以停留在第一帧,也可以停留在最后一帧
- 视频和音频支持倍速播放,音频倍速变速不变调(可选)
针对上面的需求,第一版设计使用的当然是Unity3d自带的视频播放器,但是使用官方自带的播放器出现了几个问题
- 音频倍速效果不太好,甚至有的视频正常倍速播放声音也不太好
- 切换视频时间点通常不准确,比如我切换视频到10秒,可能切完后还停留在第5秒,我猜测可能是切换到了视频最近的关键帧导致的
- 视频播放过程中或者播放完成返回第一帧这个太难了,通常很难定位到第一帧,我设置视频时间为0后,基本很难定位到0,后来我甚至用了循环定位,但是存在视频可能10秒后都没定位到第一帧,我也试过定位前五帧的任何一帧,效果也不太好,最主要的是这种对视频需要进行操作的需求,出现问题很难解决,因为视频播放器的源码是没有的。
所以,经过反复考虑,决定放弃使用官方自带的Unity3d,因为开发时间有限,第二版采用的是应用商店中提供的插件AVProVideo,这个插件是跨平台的视频播放插件,但是价格也不菲,我使用的免费版调研的,结果大部分功能都没有问题,但是出现了一个无法避免的大问题,音画不同步,具体怎么操作的我忘记了,但是经过很多次测试确实有问题。
前期的开发和调用否认了两版Unity3d插件,因为我们的游戏首要是steam平台,所以经过反复考量,决定自己单独开发一版插件,别的先不说,至少是可控的,有问题是可以转换方案修改的。
而开发视频播放器,首当其冲的问题就是视频的解码,参考市面上主流播放器,我们决定采用FFMPEG库,在本文的最后,要感谢一位已故的大神-雷神(雷霄骅),后面我们还会提到他的文章,我是做游戏引擎开发的,音视频方面基本是拿来主义,这次上手开发视频播放器,真的要也别感谢很多博友的文章。下一章介绍FFMPEG音视频解码