已经做了一段时间的直播间软件的开发,由于目前直播技术基本都已经很成熟,在很多核心方面已经有了成熟的解决方案,比如FFMpeg,LF、OBS等,直播软件的技术都可以从这些地方获取到,所以目前的直播软件的开发,主要都是针对于各种业务,比如玩法、活动等,但是毕竟是属于直播行业,对于直播的核心技术还是要尽可能地了解、学习,最好能够掌握一些经典的技术,所以我开始学习一些比较优秀的库----FFmpeg。
首先是环境搭建,现在FFmpeg的应用已经覆盖到了各个端,所以编译是一件很简单的事情,在此,基于iOS的编译方法,介绍我所接触到的两种,
1.很普遍的FFmpeg-iOS-build-script脚本,很简单,可以参考一下链接:
2.第二种则是借鉴另外一个大神的版本,大神取名叫花式编译FFmpeg,包含了各个端的编译,在此介绍一个用法,先贴github地址:花式编译FFmpeg(avbuild.sh),简介一下使用方法吧(针对iOS),毕竟项目里面也有介绍:
a.从github上拉取FFmpeg分支,然后在另个地方,拉取这个编译的分支;
b.设置FFmpg的目录,export FFSRC="你自己的FFmpeg的目录",如果你已经有过这个目录,并且做过其他方式的编译,在使用这个编译方式时,最好在FFmpeg里面使用git clean -dfx去掉一些可能影响的文件;
c.然后进入到这个编译项目的目录,使用命令./avbuild.sh "platform" "arch" 即可,编译生成文件将在该目录下sdk-platform-arch的路径下面,例如,我的平台是iOS,结构是arm64,所以应该是./avbuild.sh ios arm64,然后生成的结果在sdk-ios-arm64的路径下。
编译部分到此结束,其实在编译过程中,编译脚本本身也是很有意思的一部分,所以在以后,这一块的知识也得学些。
然后在我的iOS demo中使用FFmpeg的时候,一直编译不过,提示是以下内容
这个问题我查了好久,一度以为是我的FFmpeg的库编译有问题,所以我尝试前面的提到的两种方法,并且使用lipo查看静态库文件,也是arm64的,所以库的问题排除了,然后又尝试设置了编译器的c/c++选项,也不对,在网上查看也都不行,直到我看到一篇博客,是使用gcc编译cpp文件,出现了类似的问题,所以才想起来,我将iOS的.m文件改成了.mm文件一遍使用c++,然后在引入头文件的时候,C语言的extern:
然后编译的时候,以上错误便不存在了,可能因为OC是对C语言的封装,所以在使用C++的时候没需要这个操作吧,具体的原因我再查看一下。
到此,iOS的FFmpeg环境基本OK了,后面我会继续学习使用FFmpeg,然后分享一些心得体会。
如果有什么错误和问题,也希望大神们指正!