這幾天一直在做引擎的視頻播放問題
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解決它