cocos2dx 在Windows上并没有实现视频播放
可选方案
lib | 协议 | 大小 | 备注 |
FFMpeg | GPL/LGPL | github download | |
OpenCV | BSD | 5-6M | 任意使用,只能显示图形,不能显示声音 |
x264 | github | ||
vlc | 优点:支持win、mac、Android,支持http等流媒体 缺点:Android包体16M,Windows 2M 教程 |
||
ljkPlayer | bilibili基于ffmpeg开发,只支持Android,ios | ||
ExoPlayer | Google提供的Android视频播放器 优点:包小,只有1.1M 缺点:Android5.0之后Codec架构调整,ExoPlayer没有做过多的兼容,只适合简单的视频播放场景,只支持Android |
||
CRI Sofdec | 成熟的商业视频中间件,首个平台授权11w,追加平台6w | ||
theoraplayer | 基于ffmpeg搞的一个demo | ||
libvpx | BSD | ||
Theora | 播放特定的格式 | 因为是BSD协议,和H264是竞争关系,虽然现在不维护了,不过这也直接导致H264开源 |
FFMpeg GitHub Builds
5.1 | avcodec-59.dll | avformat-59.dll |
lgpl | 50M | 12.2M |
gpl | 74M | 12.4M |
4.4.3 | avcodec-58.dll | avformat-58.dll |
lgpl | 46M | 12.2M |
gpl | 71M | 12.26M |
以上的FFMpeg对应的dll都非常大,但是我在我的电脑上发现钉钉的软件也有使用FFMpeg,但是他们的avcodec.dll只有10M+。
经过后来自己的编译发现,如果在configure的配置中增加一些优化选项,的确是10M+,所以GitHub上的builds,大概率都是没有增加任何的优化选项,仓库编译的逻辑我也懒得看了。
编译文件大小
ffmpeg-file | win(lib/dll) | android armv8-a (a/so) |
avcodec | 58k/8.2M | 12.3M/7.42M |
avfilter | 19k/2.03M | 3.74M/2.04M |
avformat | 41k/1.64M | 3.87M/1.68M |
avutil | 118k/473k | 490k/282K |
swresample | 7k/165k | 114k/65K |
swscal | 9k/456k | 478K/265K |
总计 | 249k/12.9M | 21M/11.7M |
结果
我最终使用的FFMpeg v4.2.2,在GitHub上也找到了这种方案的开源代码,简单review了下代码,其原理是通过FFMpeg解析出视频每一帧的纹理数据,并存储在一个cache中,在使用的时候,通过update驱动frame的前进,然后不停的从cache中获取对应frame的纹理,然后渲染出来,其中decode的过程,作者使用了多线程。
音频作者并没有处理,需要后续自己补充上,具体效果后续同步下结果。