iOS进阶iOS视频开发iOS开发技术分享

ffmpeg播放器开发H.264解码+OpenGL渲染工具的封装

2017-06-05  本文已影响677人  ttdiOS

ffmpeg播放器开发H.264解码+OpenGL渲染工具的封装(完整版可以解码视频或者h264文件然后openGL渲染播放解码后的yuv)

一。首先说下,把ffmpeg库拉到工程里出现的一系列问题,

也可以参考我的另外一篇文章:Xcode编译Undefined symbols for architecture xxx 错误总结(FFmpeg篇)

由于是别人编译好的lib文件里面都是.a文件

ffmpeg-lib

1.选择iphone 6s模拟器运行出现:

Undefined symbols for architecture x86_64:(模拟器64位处理器测试(iphone5以上的模拟器))

后来通过终端查看.a文件支持的架构:

lipo -info input libavcodec.a

得知,别人的.a库只支持arm7,arm7s ,i386,没有iphone 6s的x86_64架构,

解决办法(1).

然后就改用支持x86_64的库,

通过终端查看.a文件支持的架构:

lipo -info input libavcodec.a

这下就有了armv7 i386 x86_64 arm64架构的库了

当再此编译时又出现:Undefined symbols for architecture x86_64

此时那是个脑细胞死亡一大堆,

解决办法(2).

添加必须依赖的系统库

导入CoreMedia.framework

我的工程添加的库:

iOS下

终于解决了Undefined symbols for architecture x86_64的问题,顺利编译运行通过。

题外话:这里我在macOS下创建的工程时添加的framework内容:(一开始警告我说:ffmpeg的.a库是iOS下的,不建议在macOS下使用,同时也出现了Undefined symbols for architecture x86_64:我就在原来的基础上添加了下面的库:QuartzCore.framework Foundation.framework  CoreGraphics.framework就好了,也不知道是怎么鬼,当作经验积累吧)

macOS下添加QuartzCore.framework Foundation.framework  CoreGraphics.framework

二。介绍下工程内容和效果

1.FFmpeg解码

FFmpeg解码

输入一个沙河内的视频文件(比如:flv格式,内存小)解码为一帧一帧的图片集合(像素格式,内存大)yuv

2.openGL渲染图片yuv数据

openGL渲染图片yuv数据

这里先渲染的是一张yuv图片,若屏幕出现绿色或打印说参数错误,一般是视频/图片的宽高不对引起的,请仔细查看资源宽高属性,

3.openGL渲染-H264解码

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)

上一篇下一篇

猜你喜欢

热点阅读