一、背景
??移動端學習音視頻開發(fā),F(xiàn)Fmpeg是必學的框架之一。FFmpeg有非常強大的功能,包括視頻采集功能、視頻格式轉換、視頻抓圖、給視頻加水印等。同時還支持以RTP方式將視頻流傳送給支持RTSP的流媒體服務器,支持直播應用。
??需求經常是多變的,單純使用別人已編譯好的靜態(tài)庫,正常是不能滿足需求的,需要對FFmpeg源碼做一些修改,才能滿足項目需要。因此要學會FFmpeg的編譯和使用
二、編譯
相關資源下載鏈接:
https://pan.baidu.com/s/1IIuCfyAxNwpJC_MNBzgaZA 密碼:sn3u
1、下載 gas-preprocessor
此文件是編譯FFmpeg必備的腳本文件,使用如下命令將其拷貝進bin下
cp -f /xxx/gas-preprocessor.pl /usr/local/bin/
2、安裝yasm
yasm是一個完全重寫的NASM匯編并支持x86和AMD64指令
brew install yasm
3、安裝nasm
brew install nasm
4、下載[x264-iOS編譯腳本]
(https://github.com/kewlbear/x264-ios)及源碼
-
下載x264編譯腳本解壓后如下
image.png -
下載最新版源碼解壓后如下
image.png -
將源碼文件夾改為
x264并放至編譯腳本文件夾x264-ios-master下
image.png 編譯
1、編譯所有架構 ./build-x264.sh
2、編譯指定架構 ./build-x264.sh [arm64/x86_64/armv7/armv7s]
3、x264-iOS文件夾包含所有架構的包
編譯錯誤解決方案
1、
image.png
安裝nasm
brew install nasm
2、編譯i386的時候提示No working C compiler found錯誤,這是由于腳本里支持的ios版本過低導致,修改最低支持版本即可
image.png
5、 下載FFmpeg-iOS編譯腳本及源碼
注意:在這里可以僅下載FFmpeg-iOS編譯腳本,不用下載源碼,執(zhí)行腳本會自動下載源碼,如果不想每次自動下載,可以手動下載源碼,稍微修改下FFmpeg編譯腳本即可。
-
修改腳本(
build-ffmpeg.sh文件)的內容
image.png -
將x264編譯好的文件夾(x264-iOS)重命名為fat-x264,并放在FFmpeg-iOS-build-script-master這個文件夾中
image.png -
如果項目是不支持bitcode選項的話,需要修改
build-ffmepg.sh
image.png 如果要使用avutil.h相關功能,需要更改腳本
注意: FFmpeg框架中的一個結構體命名為"AVMediaType"與蘋果自帶框架產生沖突,所以,我們必須修改編譯腳本,使用"FFmpegAVMediaType"帶替換"AVMediaType".這里需要在腳本文件中添加如下命令行,即將AVMediaType替換為FFmpegAVMediaType. 注意:
$SOURCE為ffmpeg的根目錄.
grep -rl -w AVMediaType ./$SOURCE | xargs sed -i .bak s@AVMediaType@FFmpegAVMediaType@g
三、使用
1、新建iOS工程
因為FFmpeg中涉及C,C++混編,需要將用到ffmpeg庫的文件后綴名改為.mm,本文是將ViewController.m重命名為ViewController.mm
2、添加FFmpeg庫
-
將FFmpeg-iOS和fat-x264拖入項目中
image.png -
添加系統(tǒng)依賴庫
image.png -
bitcode設置為NO
image.png -
在Build Setting中設置頭文件與庫的位置
image.png











