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)