FFmpeg,作为全世界音视频开发者都要掌握的神器,移动端学习音视频开发,FFmpeg可以说是必学的框架,FFmpeg在linux平台下开发,但它同样也可以在其他操作系统环境中编译运行,包括Windows、Mac OS X等。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,它包括了目前领先的音/视频编码库libavcodec。
FFmpeg强大的能力
FFmpeg有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。
安装方式
可以通过如下两种方式安装FFmpeg
- 1.下载iOS版本FFmpeg静态库: 即不用手动编译,我们只需要下载得到头文件及.a库文件.
- 2.手动编译: 下载源码, 可以在更改一些flag或源码后再编译脚本,较为灵活.
如果仅仅是想简单直接使用FFmpeg可以下载一个稳定版本的静态库, 建议用第一种方式,如果需要在iOS项目中自定义使用FFmpeg,以及修改一些FFmpeg中的源码以适应项目,使用第二种方式。
必备知识
- 基本终端命令行
- FFmpeg基础
ffmpeg的常用库
Left Aligned Center Aligned
ffmpeg 一个命令行工具,用来对视频文件转换格式,也支持对电视卡即时编码
ffserver 一个HTTP多媒体即时广播流服务器,支持时光平移
ffplay 一个简单的播放器,基于SDL与FFmpeg库
libavcodec 包含全部FFmpeg音频/视频编解码库
libavformat 包含demuxers和muxer库
libavutil 包含一些工具库
libpostproc 对于视频做前处理的库
libavutil 包含一些工具库
libswscale 对于视频作缩放的库
编译FFmpeg
- 下载FFmpeg-iOS编译脚本,目前已经更新支持到FFmpeg4.1
- 下载FFmpeg
注意: 在这里可以仅下载FFmpeg-iOS编译脚本,不用下载源码,执行脚本会自动下载源码,如果不想每次自动下载,可以手动下载源码,稍微修改下FFmpeg编译脚本即可.这里不做过多说明.
- 编译说明
上文编译脚本的仓库中,明确要求编译脚本需要的安装项:
yasm 1.2.0
gas-preprocessor
你可以自己安装,也可以完全不管,在编译脚本里面有对yasm和gas-preprocessor的支持判断,没有该环境会自动下载并配置。
使用方法:
Use build-ffmpeg-tvos.sh for tvOS.
To build everything:
./build-ffmpeg.sh
To build arm64 libraries:
./build-ffmpeg.sh arm64
To build fat libraries for armv7 and x86_64 (64-bit simulator):
./build-ffmpeg.sh armv7 x86_64
To build fat libraries from separately built thin libraries:
./build-ffmpeg.sh lipo
也强调了在集成FFmpeg时额外需要的依赖库:
- libz.tdb
- libbz2.tdb
- libiconv.tdb
编译
按照实际需要修改配置。支持的版本越多,项目的安装包将越大。
Tips:
FFmpeg 提供有自己的编解码库,封装了codec层,但是有一些codec是具备自己的License,FFmpeg不会默认集成,例如libx264、FDK_AAC、LAME等,但是FFmpeg就像一个平台,可以将其他的第三方codec以插件的形式添加进来,然后为开发者提供统一的接口。
如有需要集成libx264的同学单独Q我,就没传到git上。
iOS项目集成FFmpeg
- 编译功后,会生成FFmpeg-iOS文件,将该文件直接拖到项目中。
- 配置头文件搜索路径,在工程文件->Bulid Setting->Search Paths->Header Search Paths添加
$(SRCROOT)/$(PRODUCT_NAME)/FFmpeg-iOS/include,(请根据自己实际路径更改)
-
添加依赖库
libz.tdb、libbz2.tdb、libiconv.tdb
以及FFmpeg 使用到的CoreMedia.framework、AVFoundation.framework、VideoToolbox.framework、AudioToolbox.framework库
参考:
使用FFmpeg
正如开篇就提到的,强大的FFmpeg提供了视频采集功能、视频格式转换、视频抓图、给视频加水印等。同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。
下一章,我将从FFmpeg的使用开始讲起,包括API调用和Tool调用。
如果喜欢,请帮忙点赞。支持转载,转载请附原文链接。