ffmpeg播放器開發H.264解碼+OpenGL渲染工具的封裝(完整版可以解碼視頻或者h264文件然后openGL渲染播放解碼后的yuv)
一。首先說下,把ffmpeg庫拉到工程里出現的一系列問題,
也可以參考我的另外一篇文章:Xcode編譯Undefined symbols for architecture xxx 錯誤總結(FFmpeg篇)
由于是別人編譯好的lib文件里面都是.a文件
1.選擇iphone 6s模擬器運行出現:
Undefined symbols for architecture x86_64:(模擬器64位處理器測試(iphone5以上的模擬器))
后來通過終端查看.a文件支持的架構:
得知,別人的.a庫只支持arm7,arm7s ,i386,沒有iphone 6s的x86_64架構,
解決辦法(1).
然后就改用支持x86_64的庫,
通過終端查看.a文件支持的架構:
這下就有了armv7 i386 x86_64 arm64架構的庫了
當再此編譯時又出現:Undefined symbols for architecture x86_64
此時那是個腦細胞死亡一大堆,
解決辦法(2).
添加必須依賴的系統庫
我的工程添加的庫:
終于解決了Undefined symbols for architecture x86_64的問題,順利編譯運行通過。
題外話:這里我在macOS下創建的工程時添加的framework內容:(一開始警告我說:ffmpeg的.a庫是iOS下的,不建議在macOS下使用,同時也出現了Undefined symbols for architecture x86_64:我就在原來的基礎上添加了下面的庫:QuartzCore.framework Foundation.framework ?CoreGraphics.framework就好了,也不知道是怎么鬼,當作經驗積累吧)
二。介紹下工程內容和效果
1.FFmpeg解碼
輸入一個沙河內的視頻文件(比如:flv格式,內存小)解碼為一幀一幀的圖片集合(像素格式,內存大)yuv
2.openGL渲染圖片yuv數據
這里先渲染的是一張yuv圖片,若屏幕出現綠色或打印說參數錯誤,一般是視頻/圖片的寬高不對引起的,請仔細查看資源寬高屬性,
3.openGL渲染-H264解碼
調用h264解碼的類H264DecodeTool 進行mtv.h264或者mtv.mp4格式視頻解碼,解碼為yuv,然后通過openGLES渲染顯示解碼后yuv。
4.播放器搭建:
就是之前編譯的ffmpeg的庫導入GitHub上的kxmovie:https://github.com/kolyvan/kxmovie
參見:我的文章:KxMovieViewController
在此感謝大神的資源共享:
http://www.cocoachina.com/bbs/read.php?tid=100908
http://www.cocoachina.com/bbs/u.php?action=post&uid=128606
https://pan.baidu.com/s/1dDvpECh
https://pan.baidu.com/share/home?uk=1698453400#category/type=0
這篇文章是對上一篇文章(ffmpeg播放器開發H.264解碼+OpenGL渲染工具的封裝)bug漏洞的修復和完善(openGL順利渲染解碼后的視頻文件)
demo下載地址:https://github.com/mrzhao12/FFmpegDecodeH264_OpenGLESRenderYUV
更多資源歡迎進入學習交流平臺:QQ群:224110749
有問題也可以聯系我QQ:1107214478(一個做iOS開發的小生,但是我并不覺的我是在做iOS)