目前做的事情就是按照ffmpeg
tutorial上的内容学习写一个简单的播放器,这本教程虽然已经过时了,但是针对ffplayer(ffplayer是ffmpeg官方给出的示例播放器,ijkplayer就是根据ffplayer改造的播放器)中的编解码流程描述依然是正确的,所以在学习此教程的时候有很多老的API需要修改,尤其是针对SDL的api。目前我用的SDK版本是ffmpeg4.0.2以及sdl2.0.8。SDL库的作用是将解码后的数据展示到界面上,跟ffmpeg本身是没有关系的。

<>获取libSDL2.a文件


很遗憾,我没有探索出直接在ffmpeg的configure选项中enable-sdl然后还能交叉编译正确的操作,所以退而求其次,我直接按照sdl库的编译教程,位于docs/README-ios.md,打开位于Xcode/SDL/SDL.xcodeproj,然后点击build(用模拟器编拿到的就是x64的包,用真机编就是arm64的包),最后在product里面拿到libSDL2.a就可以了。

<>xcode编译环境搭建

* 按照正常的建立项目的方式新建一个工程。
* 引入SDL文件中include文件中所有的头文件,接着引入刚才得到的libSDL2.a文件
* 引入前两篇博客中生成的libfdk-aac.a,libx264.a文件以及头文件
* 引入前篇博客ffmpeg configure选项中最终生成的libavcodec.a libavdevice.a libavfilter.a
libavformat.a libavresample.a libavutil.a libpostproc.a lib swresample.a
libswscale.a以及对应的头文件,头文件最好直接按照libavcodec libavdevice这样的文件夹引入方便查看。


* 进入project的buildSetting修改header search paths 和 Library Search
paths设置为前面的步骤中存放头文件以及库文件的路径
*
引入依赖的iOS库文件,我目前引入了Metal.framework,QuartzCore.framework,CoreGraphics.framework,UIKit.framework,OpenGLES.framework,GameController.framework,CoreVideo.framework,VideoToolbox.framework,AudioToolbox.framework,CoreAudio.framework,AVFoundation.framework,CoreMotion.framework。
* 删除main.m中的样本代码
,这一步这么做主要是因为SDL使用的限制,否则导致视频无法完整播放。我也不知道为什么。然后改名为main.mm支持objective-C++混编。
* 加入以下代码用来测试ffmpeg是否work。能跑通就可以了 extern "C" { #include "libavcodec/avcodec.h"
#include "libavformat/avformat.h" #include "libavutil/avutil.h" //#include
"libavutil/opt.h" //#include "libswscale/swscale.h" } int main(int argc, char
*argv[]) { cout<<"FFmpeg Test!"<<endl; av_register_all(); return 0; }

到此基本的环境搭建过程就结束了,接下来就只需要按照tutorial上的内容写代码。最后提一句,一般播放器和SDL相关(解决视频音频的播放)的部分,都是用其他方式解决的,所以这里学习的重点要放在ffmpeg编解码而不是SDL的api。SDL这种操作方式也不太适合iOS播放器的开发(个人愚见)。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信