iOS FFmpeg環(huán)境搭建

一、背景

??移動端學習音視頻開發(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

四、參考文章

借鑒小東邪的文章https://juejin.cn/post/6844903857097539591

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容