1. 程式人生 > >[iOS]FFmpeg框架在iOS平臺上的編譯和使用

[iOS]FFmpeg框架在iOS平臺上的編譯和使用

_id hex ips selector 文件 str content pat tps

使用環境

  • Mac OS Yosemite 10.10.5

開發工具

  • Xcode 7.0

  • Terminal

需要的文件鏈接

  • gas-preprocessor
  • yasm
  • FFmpeg-iOS-build-script
  • ffmpeg-2.8
  • kxmovie

編譯適用於iOS平臺的FFmpeg靜態庫

  • 打開終端Terminal進入下載後的gas-preprocessor文件夾

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

    • 修改/usr/sbin/gas-preprocessor.pl的文件權限為可執行權限

        chmod 777 /usr/sbin/gas-preprocessor.pl
  • 執行FFmpeg-iOS-build-script-master文件夾內的build-ffmpeg.sh

    • 編譯所有的版本arm64armv7x86_64的靜態庫

      ./build-ffmpeg.sh
    • 編譯支持arm64架構的靜態庫

      ./build-ffmpeg.sh arm64
    • 編譯適用於armv7x86_64(64-bit simulator)的靜態庫

      ./build-ffmpeg.sh armv7 x86_64
    • 編譯合並的版本

      ./build-ffmpeg.sh lipo

編譯靜態庫遇到的問題

  • yasm沒有安裝的情況

    • 解決方案1

      • 進入下載後的yasm

        文件夾,通過編譯安裝命令yasm

          ./configure && make -j 4 && sudo make install
    • 解決方案2

      • 使用Homebrew包管理器,進行安裝

          brew install yasm
    • 測試是否安裝成功

        yasm --verision
  • c test failed的情況

    • xcode環境安裝過多,使用xcode-select選擇默認的工具路徑/Applications/Xcode-beta.app

        sudo xcode-select -s /Applications/Xcode-beta.app

使用編譯完成的FFmpeg靜態庫

  • 編譯成功後,即可將FFmpeg-iOS文件夾(包含include和lib)引入到Xcode內

  • 加入依賴庫libz.lib

  • 加入依賴庫libbz2.lib

  • 加入依賴庫libiconv.lib

  • 如有編譯錯誤,鏈接文件不存在

      修改Build Setting 
      Header Search Paths = $(SRCROOT)/LOFFmpegSample/FFmpeg-iOS/include

使用框架kxmovie播放視頻

    NSString *path = @"";
    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];

    // increase buffering for .wmv, it solves problem with delaying audio frames
    if ([path.pathExtension isEqualToString:@"wmv"])
        parameters[KxMovieParameterMinBufferedDuration] = @(5.0);

    // disable deinterlacing for iPhone, because it‘s complex operation can cause stuttering
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        parameters[KxMovieParameterDisableDeinterlacing] = @(YES);

    KxMovieViewController *vc = [KxMovieViewController movieViewControllerWithContentPath:path
                                                                               parameters:parameters];
    [self presentViewController:vc animated:YES completion:nil];

實例工程:
LOFFmpeg

[iOS]FFmpeg框架在iOS平臺上的編譯和使用