音视频入门(学习ffmpeg tutorial之iOS 环境搭建)

目前做的事情就是按照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播放器的开发(个人愚见)。

没有更多推荐了,返回首页