ffmpeg-iOS命令行工具制作方法

FFmpeg-iOS


ffmpeg-iOS制作

  • ++腳本地址git地址++
  • 在build-ffmpeg.sh 文件內(nèi)修改ffmpeg版本號
  • 保證build-ffmpeg-iOS-framework.sh 文件內(nèi)的 ++FFMPEG_VERSION++ 小于等于 build-ffmpeg.sh 文件內(nèi)的版本號,否則制作失敗
  • 運行腳本,開始制作ffmpeg-iOS

    ./build-ffmpeg.sh


檢測制作的ffmepg-iOS是否可用

  1. 新建project,將上面制作好的FFmpeg-iOS添加到新project中

  2. 隨便一個文件中添加一個頭文件引用

    include "avformat.h"

  3. 在同一文件下,添加一段測試代碼

    av_register_all();

  4. 將project下任一.m 文件改成 .mm 結(jié)尾,(開啟c++自動混編模式)

  5. 編譯project,看能否通過


制作可以命令行調(diào)用的靜態(tài)庫

  1. XCode創(chuàng)建靜態(tài)庫project
  2. 導(dǎo)入以下文件

cmdutils_common_opts.h
cmdutils.c
cmdutils.h
config.h
ffmpeg_filter.c
ffmpeg_opt.c
ffmpeg_videotoolbox.c
ffmpeg.c
ffmpeg.h
ffprobe.c

其中config.h 文件為scratch目錄下arm64/armv7/i386/x86_64任一文件夾下的config.h文件

  1. project中 Build Settings --> Header Search Paths 下添加 在生成的ffmpeg-iOS庫中 ../FFmpeg-iOS/include 的完整路徑以及 ../ffmpeg-4.0.3 的完整路徑
  2. 修改 Build Setting --> Build Active Architechure Only 為NO (關(guān)閉只生成 支持一個架構(gòu)的靜態(tài)庫)
  3. 修改ffmpeg.c的main函數(shù),因為一個程序不能有倆個main函數(shù)
//     int main(int argc, char **argv)               
    int ffmpeg_main(int argc, char **argv)
  1. cmdutils.c修改函數(shù)exit_program,cmdutils.h文件同時修改頭文件
int exit_program(int ret)
{
//    if (program_exit)
//        program_exit(ret);
//
//    exit(ret);
    return ret;
}
  1. ffmpeg.c文件中,計數(shù)器置零, 在 term_exit(); 前面將5個參數(shù)置零(修復(fù)多次調(diào)用可能引起crash)
    nb_filtergraphs=0;
    nb_output_files=0;
    nb_output_streams=0;
    nb_input_files=0;
    nb_input_streams=0;
    
    term_exit();
    ffmpeg_exited = 1;
  1. 分別選擇模擬器和真機運行,并分別取出靜態(tài)庫進行合并

    lipo -create **.a **.a -output **.a

  2. 檢查生成的靜態(tài)庫是否支持4中架構(gòu)

    $ lipo -info libPPFFmpeg.a
    Architectures in the fat file: libPPFFmpeg.a are: armv7 i386 x86_64 arm64 // 返回結(jié)果包含四個架構(gòu)


將靜態(tài)庫導(dǎo)入實際需要使用的項目中使用

  • 將生成的靜態(tài)庫放入到FFmpeg-iOS/lib/路徑下,并將FFmpeg-iOS導(dǎo)入項目中
  • Build Settings --> Header Search Paths 下添加FFmpeg-iOS/include路徑
  • 添加系統(tǒng)庫文件

AudioToolbox.framework
CoreMedia.framework
VideoToolbox.framework
libiconv.tdb
libbz2.tdb
libz.tdb

  • 在使用ffmpeg命令行文件中添加聲明 extern int ffmpeg_main(int argc, char * argv[]);
NSString *totalTsPath = [NSString stringWithFormat:@"../input.ts"];
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSString *filePath = [NSString stringWithFormat:@"../out.mp4"];
        char *movie = (char *)[totalTsPath UTF8String];
        char *outPic = (char *)[filePath UTF8String];

        char* a[] = {
            "ffmpeg",
            "-i",
            movie,
            "-acodec",
            "copy",
            "-vcodec",
            "copy",
            outPic
        };

        ffmpeg_main(sizeof(a)/sizeof(*a), a);
        NSLog(@"ts轉(zhuǎn)mp4完成 = %@", filePath);
    });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,171評論 4 61
  • 概述 網(wǎng)上充斥著大量的 iOS FFmpeg 編譯的教程,有的時間比較早了,有的很多都沒有說詳細,或者有個別坑作者...
    ForestSen閱讀 27,395評論 27 187
  • 讀到“在交談途中我們啞然以對,無可奈何地微笑。我們的人,相互都不會交談?!毕仁浅泽@了一下,又回過神來,好像不用吃驚...
    沒沒沒沒有人閱讀 218評論 0 0
  • 淅瀝瀝的雨帶著冬雪冷傲 飄飄灑灑 泛黃的小草悄悄伸出淺綠 訴說季節(jié)的輪回 奔騰的小溪 歡快地告訴我 春天已經(jīng)來了!...
    食之樂閱讀 572評論 42 57
  • 她陷進去出不來了。她和CC,她是新簽部門的大抗,她帶的團隊在四個新簽部門做的最好業(yè)績最高。CC是續(xù)費部門的兩個團隊...
    艷敏姐閱讀 168評論 1 0

友情鏈接更多精彩內(nèi)容