FFmpeg編譯ios平臺

做了一個解碼直播視屏的項目(監控類的RTSP流),項目結束了,記錄一下之前編譯FFmpeg的梗,網絡上很多說怎麼編譯FFmpeg的但是看着都像是一個人寫的,都是一樣,都在複製,但是解決問題的速度確實很慢,我在這總結一下,以供後來人少走彎路;

1.下載下面5個文件
gas-preprocessor 地址 https://github.com/applexiaohao/gas-preprocessor

yasm https://github.com/yasm/yasm

FFmpeg-iOS-build-script https://github.com/applexiaohao/FFmpeg-iOS-build-script

ffmpeg http://www.ffmpeg.org/releases/?C=M;O=D

kxmovie https://github.com/applexiaohao/kxmovie

1.下載完成後打開終端 進入gas-preprocessor文件夾

cd 將文件拖進來回車

2.將文件夾內的gas-preprocessor.pl文件拷貝到/usr/sbin/目錄下

sudo cp /Users/chenqiang/Downloads/gas-preprocessor-master/gas-preprocessor.pl /usr/local/bin

注意上面的sudo cp(這個地方是gas-preprocessor文件下gas-preprocessor.pl的地址,只需要將gas-preprocessor.pl文件拖進來就行了) /usr/local/bin 回車

3.修改/usr/sbin/gas-preprocessor.pl的文件權限爲可執行權限
如果1.命令如果不行就使用2.命令

1.
 chmod 777 /usr/sbin/gas-preprocessor.pl
 2.
 chmod +x gas-preprocessor.pl

4.此時爲了編譯時有問題我們現在進入下載後的yasm文件夾,通過編譯安裝命令yasm

cd 將文件拖進來回車
 ./configure && make -j 4 && sudo make install

如果上一步不行使用Homebrew包管理器,進行安裝
首先檢查Homebrew包管理器是否安裝

終端命令輸入 brew

如果沒有安裝 Homebrew包管理器

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

執行完之後輸入下面的命令安裝yasm

  brew install yasm

接下來
執行FFmpeg-iOS-build-script-master文件夾內的build-ffmpeg.sh

cd 將文件FFmpeg-iOS-build-script-master拖進來回車

編譯所有的版本arm64、armv7、x86_64的靜態庫

./build-ffmpeg.sh

如果編譯支持arm64架構的靜態庫

./build-ffmpeg.sh arm64

如果編譯適用於armv7和x86_64(64-bit simulator)的靜態庫

./build-ffmpeg.sh armv7 x86_64

或者編譯合併的版本

./build-ffmpeg.sh lipo

接下來就是等終端自己編譯不用再管,大概要十幾分鍾

編譯完成後導入到工程中將kxMovie這個文件也導入到工程中
添加下面的依賴庫

加入依賴庫libz.lib

加入依賴庫libbz2.lib

加入依賴庫libiconv.lib

這時運行可能會報錯 #include “libavformat/avformat.h”這個頭文件找不到
下面是解決辦法
進入工程target settings 這裏寫圖片描述

搜索 library search paths 這裏寫圖片描述
改爲後綴是.lib的
然後複製這個lib的的這一條
在setting 的搜索框中搜索header search paths
這裏寫圖片描述
添加剛纔複製的改爲.include的後綴
運行發現工程不會報錯了這樣FFmpeg就算導入成功了
接下

在工程中引入#import "KxMovieViewController.h"
在創建解碼的地方

 NSString *path = @"http://www.qeebu.com/newe/Public/Attachment/99/52958fdb45565.mp4";
    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
    if ([path.pathExtension isEqualToString:@"wmv"])
        parameters[KxMovieParameterMinBufferedDuration] = @(5.0);

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        parameters[KxMovieParameterDisableDeinterlacing] = @(YES);
    KxMovieViewController *vc = [KxMovieViewController movieViewControllerWithContentPath:path parameters:parameters];
    [self presentViewController:vc animated:YES completion:nil];

這樣就可以看到播放的畫面了

注意不要在程序進入到根視圖就去解碼,我發現這樣不可以,要viewdidload以後纔可以,希望可以幫助到你

發佈了54 篇原創文章 · 獲贊 13 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章