这几天一直在做引擎的视频播放问题
1.3版本的引擎采用的是vlc视频处理库
使用vlc库其实还可以 就是外挂的插件太多了对我这样的懒人来说又不大愿意动手去编译本来
引擎的视频本来是打算采用,ffmpeg
最后考虑引擎当前是基于opengl的那就采用ffmpeg吧(最少这个也可以跨平台达到引擎设计的一贯要求)
视频播放我感觉还是有点难度的
这涉及图形,音频多线程问题
所加的线程无非就是音频线程解码线程系统处理线程
需要说明的就是
手头有3个ffmpeg版本(比较╮(╯_╰)╭)
a.包含了老版本的image_convert,avcodec_decode_audio
b.有 avcodec_decode_audio2,avcodec_decode_audio3,
c.是最新的sdk;FFmpeg-full-SDK-3.2
简单描述下:
image_convert 大致上相当于:sws_scale
而avcodec_decode_audio2基本等于avcodec_decode_audio(注意是基本而不是绝对等于)
不过还有一个比较新的avcodec_decode_audio3
如果采用的是ffplay那种方式的话不会涉及到多线程渲染
对于盖莫引擎来说 当前基于opengl,那么在这里使用opengl多线程是十分必要的
因为要在主线程渲染,在视频解码线程build图片
另外对于avpicture_get_size,avpicture_fill这些函数需要选择合适的PIX_FMT_RGB
要不然会出现图形错乱
此外视频和音频同步也是很重要的,引擎这里采用的是同步到视频的方法
至于音频的处理问题当然是盖莫音频引擎了现成的啊.
最后说下涉及到得ffmpeg版本问题
关于avcodec_decode_audio2
如果旧的视频代码采用的是avcodec_decode_audio工作正常的话
如果替换为较新版本的avcodec_decode_audio2话 这里可能会出现内存错误的问题
我的解决方案就是使用最新的ffmpeg解决它