做了一個解碼直播視屏的項目(監控類的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];
這樣就可以看到播放的畫面了