美文网首页iOS进阶iOS视频开发iOS开发技术分享
ffmpeg播放器开发H.264解码+OpenGL渲染工具的封装

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

作者: ttdiOS | 来源:发表于2017-06-05 11:48 被阅读677次

    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)

    相关文章

      网友评论

      • 899e2d74bdeb:请问, 我在iPhone上用ffmpeg+x264录制摄像头数据时,并保存为mp4时,用AVCaptureSessionPreset640x480这个分辨率获取的视频播放出来是正常的,但是改为分辨率较大的AVCaptureSessionPreset1920x1080这个,视频播放的速度就快了很多倍。请问这大概是什么原因引起的。
        899e2d74bdeb:@ttdiOS 谢谢答复,播放使用vlc播放的,播放时的分辨率是对的,就是速度不对。
        ttdiOS:原始数据的分辨率要和播放时的分辨率一一对应,你试试

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

      本文链接:https://www.haomeiwen.com/subject/qtdifxtx.html