楼主遇到一个新需求,要实现播放本地视频,经过讨论,决定使用ffmpeg来进行视频解码 。使用到FFmpeg的知名软件有Mplayer,射手播放器 ,暴风影音 ,KMPlayer, ffdshow,lav filters,格式工厂。总之这个是个无敌的软件
(注:如果播放的是MP4格式的视频使用苹果自带的AVPlayer就ok,实现方法要比使用ffpeg方便得多)
首先下载FFmpeg iOS build script
下载完成后打开终端 cd 到你下载的文件夹
ps:有一个比较快捷的方式就是终端里输入cd 然后直接把你下载的文件夹拖入到终端里然后点击回车就进入到下载的文件夹里了
运行命令
sh build-ffmpeg.sh
如果你想指定编译器那就输入
sh build-ffmpeg.sh arm64
接着就是漫长的等待了,下载并编译需要很长时间,楼主大约用了半个小时的样子
编译完成后你会看到文件里多了一些东西,其中FFmpeg-iOS是我们需要的
直接把它拖入到项目中,其中的路径问题需要注意,楼主工程里的结构是这个样子的
然后在build setting里搜索search path
把FFmpeg-iOS下的include文件直接拖入到Header Search Paths
把lib文件直接拖入到Library Search Paths
此时点击编译,你会发现不能运行,显示缺少文件,这个时候直接去刚才的下载的文件夹里搜对应的文件名拖入到项目中就好
还要拖入对应的依赖,VideoToolBox.framework、libs.tbd、libbz2.tbd、libiconv.tbd
当你解决完了所有的文件缺失之后,再次点击编译,会出现include文件里的代码报错,直接注释掉,楼主之前在集成ffmpeg时查找了很多资料,资料里各种坑(切换c编译器、更改attributes中的 arm64 armv7。。。)
这种做法的结果就是会出现非常多的蜜汁错误,楼主花了很久才把配置文件改回来!!!
此时进行编译发现没有错误,我们下载kxmovie
这是一个基于ffmpeg的播放器,但是github上却少了ffmpeg的代码,下载完kxmovie之后打开文件夹,直接把kxmovie文件夹拖入到我们的工程里来,然后点击运行,显示kxmovie里的代码报错,直接按照xcode提示的错误点击fix之后完美运行
在这里我只是把自己测试集成ffmpeg时候的demo代码写了出来
其中KXMovies是用OC编写的楼主使用的是swift,所以需要在桥接文件中写入
#include"KxMovieViewController.h"
最后是测试代码
let path = Bundle.main.path(forResource: "[倒霉熊].Backkom.D01.DVDRip.x264.AC3-CMCT", ofType: "mkv")
let vc = KxMovieViewController.movieViewController(withContentPath: path, parameters: nil)
楼主还写了一个自己的播放器,但是代码不知道扔到哪里了,找到之后更新