美文网首页iOS视频开发键盘上的鼓手IOS
[iOS]FFmpeg框架在iOS平台上的编译和使用

[iOS]FFmpeg框架在iOS平台上的编译和使用

作者: 肖浩呗 | 来源:发表于2015-09-19 17:53 被阅读22171次

    最近有同学来询问FFmpeg框架的使用方法
    以下过程中如有问题,请简信我.

    使用环境

    • Mac OS Yosemite 10.10.5

    开发工具

    • Xcode 7.0

    • Terminal

    需要的文件链接

    编译适用于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

    相关文章

      网友评论

      • Smile_Later:帅哥 问一下,ffmpeg-2.8下载2.8的版本吗
      • feng_dev:请教下,微信小视频上传的时候只有2m不到。清晰度却很好,是录制的时候是高清,之后压缩吗?求思路
      • 61cb51a42b88:我不可以直接拖你项目的ffmpeg使用吗?现在拖的话直接找不到头文件,不知道是不是一定要按步骤去编译这个库???
      • STF_ZHANG:你们都没报错?xcrun -sdk iphoneos clang is unable to create an executable file.
        C compiler test failed. 求解答
      • Mr_Chen_df25:肖老师你好,请问下我在执行./build-ffmpeg.sh的时候,总是报错这个错误,怎么处理呀:FFmpeg source not found. Trying to download...
        % Total % Received % Xferd Average Speed Time Time Time Current
        Dload Upload Total Spent Left Speed
        0 0 0 0 0 0 0 0 --:--:-- 0:01:14 --:--:-- 0curl: (7) Failed to connect to www.ffmpeg.org port 80: Operation timed out
        building arm64...
        ./build-ffmpeg.sh: line 130: /Users/****/Desktop/测试/FFmpeg-iOS-build-script-master/ffmpeg-3.3/configure: No such file or directory
        Mr_Chen_df25:是不是不能直接执行./build-ffmpeg.sh,要分别执行./build-ffmpeg.sh arm64和./build-ffmpeg.sh armv7 x86_64然后再合并呢?
      • 爱吃米饭的陈大鹰:您好 我想问一下ffmpeg是不是不支持.mid格式和.mp3格式的互转
      • ttdiOS:测试是否安装成功
        是yasm --version
        不是 yasm --verision
      • toplee:这个库都支持播放什么类型的文件啊.mp4 .mp3 .avi..........????
      • Roader:如果用cocoaPods集成FFmpeg框架,我记得cocoaPods会把依赖全部下载安装好的,其他的操作是不是都不用做了?
      • Roader:看不太懂啊,要在终端敲的指令都是框框里面那些吗?比如第二步“执行FFmpeg-iOS-build-script-master文件夹内的build-ffmpeg.sh”,咋执行,我一点击那文件就用xcode打开了,并没有执行啊?希望老师写得通俗一点,比如“在终端写入如下指令以执行build-ffmpeg.sh”,照顾一下没有基础的同学。
        oldDevil:终端cd到FFmpeg-iOS-build-script-master文件夹,执行./build-ffmpeg.sh
        然后是漫长的等待
      • c1e0f39af20a:请问下,如何编译支持h265的静态库呢,能指教下吗
      • 29595b5b2ab9:编译静态库时出现以下问题:
        xcrun -sdk iphoneos clang is unable to create an executable file.
        C compiler test failed.
      • 矫炎圻:为什么一定要在sbin目录下执行gas脚本?
      • 换个名字再说:可以问一下怎么加那几个依赖库么
        H_Liuju:@颜值担当的程序汪 Targets → build phases →link binary ...
      • 2ede4a8a7da0:老师 你好 ios 端 要怎么实现 两段音频 混音 并且这2段音频的音量都可以设置 然后混合成功导出一段新的音频呢 ? 并且输出格式 指定是MP3的
      • 204c1ee15198:包大小的问题
        首先感谢楼主的分享。但是我在实际遇到一个问题,希望楼主指点一下,我需要在iOS下支持win下的rmvb,avi,asf等格式,因此我编译出来的包有385M,而我看到一款app,也能播放同样的win下的格式,
        而它的大小才11M,iOS原生库是不支持的。请问楼主,他是用啥技术实现的?
      • 9a55019317f7:hello,问下我在用库集成监控摄像头播放rtsp://格式视频时,同时监控3个摄像头, iPhone 还算流畅, iPad的延迟很严重啊,大概有10s左右的延迟.不知道楼主有没遇到这个奇葩的情况
      • 王鸿业:/usr/sbin 拷贝权限不够啊 怎么办呢?
        若非长得丑怎会做逗比:@王鸿业 终端拷贝 加 sudo
      • 29d98446ba25:肖老师,我在导入后编译报ld: warning: directory not found for option '-L/Users/jialei/Desktop/kxmovie-master/libs/FFmpeg'
        Undefined symbols for architecture x86_64:
        "_AVMediaTypeAudio", referenced from:
        _avf_read_header in libavdevice.a(avfoundation.o)
        "_AVMediaTypeVideo", referenced from:
        _avf_read_header in libavdevice.a(avfoundation.o)
        "_CMAudioFormatDescriptionGetStreamBasicDescription", referenced from:
        _avf_read_header in libavdevice.a(avfoundation.o)
        "_CMBlockBufferCopyDataBytes", referenced from:
        _avf_read_packet in libavdevice.a(avfoundation.o)
        "_CMBlockBufferGetDataLength", referenced from:
        _avf_read_header in libavdevice.a(avfoundation.o)
        _avf_read_packet in libavdevice.a(avfoundation.o)
        "_CMSampleBufferGetDataBuffer", referenced from:
        _avf_read_header in libavdevice.a(avfoundation.o)
        _avf_read_packet in libavdevice.a(avfoundation.o)
        "_CMSampleBufferGetFormatDescription", referenced from:
        _avf_read_header in libavdevice.a(avfoundation.o)
        "_CMSampleBufferGetImageBuffer", referenced from:
        _avf_read_header in libavdevice.a(avfoundation.o)
        _avf_read_packet in libavdevice.a(avfoundation.o)
        "_CMSampleBufferGetOutputSampleTimingInfoArray", referenced from:
        _avf_read_packet in libavdevice.a(avfoundation.o)
        "_CMVideoFormatDescriptionGetDimensions", referenced from:
        _avf_read_header in libavdevice.a(avfoundation.o)
        "_OBJC_CLASS_$_AVCaptureAudioDataOutput", referenced from:
        objc-class-ref in libavdevice.a(avfoundation.o)
        "_OBJC_CLASS_$_AVCaptureDevice", referenced from:
        objc-class-ref in libavdevice.a(avfoundation.o)
        "_OBJC_CLASS_$_AVCaptureDeviceInput", referenced from:
        objc-class-ref in libavdevice.a(avfoundation.o)
        "_OBJC_CLASS_$_AVCaptureSession", referenced from:
        objc-class-ref in libavdevice.a(avfoundation.o)
        "_OBJC_CLASS_$_AVCaptureVideoDataOutput", referenced from:
        silasjs:Undefined symbols这个问题最后解决了么
        silasjs:@喜蛋蛋 这个问题怎么解决的?
        張無忌:@喜蛋蛋 解决了额吗?我也是这个问题
      • 阳光的大男孩儿:还有现在 报了好多错误,包括“use of undeclared identifier 'image' && Expected a type && Use of undeclared identifier 'PIX_FMT_RGB24',did you mean ' AV_PIX_FMT_RGB24'?”
      • 阳光的大男孩儿:肖老师,您好,问一下文件路径是按照你的那种格式修改的,为什么还是不对呢?还是报文件路径错误呢(找不到文件路径)?
      • d3ab1afdf373:你好,我在./build-ffmpeg.sh armv7 时总是提示GNU assembler not found, install/update gas-preprocessor 然而编译 arm64和x86_64都没问题,请问这种情况是什么问题呢
      • puppySweet:视频参数:MP4(H264) 600x600 500kb/s 25fps
        音频参数: aac 44100HZ 24kb/s

        如何设置
      • puppySweet:答复我
      • puppySweet:视频压缩怎么搞啊啊
        北冥风尘:你好,视频压缩的你怎么处理呢、
      • Sanchain:老师,播放不了这个视频url哦,贴上:https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4, 您可以试一下吗
      • Sanchain:肖老师,不能拷贝到/usr/sbin/目录,这是为什么?
        王鸿业:/usr/local/bin 是个具体的文件啊 不是个文件夹老师。 咋办?
        Sanchain:@Sanchain 嗯嗯好的谢谢老师
        Aazad:@Sanchain 拷贝到 /usr/local/bin
      • 63a72c1c8c4c:请教下,播放广播时候中间会出现破音,不知道啥问题
      • 闭家锁:非常感谢,困扰了我一礼拜,还在折腾,直到看到你的文章!!!!!大赞!!!
      • smilebigdog:看到你的文章,解决了我三天的困扰,很谢谢你的分享,谢谢
      • JackYao: :heart_eyes: 木嘛~ 太爱你了
      • ismilesky:肖老师,怎样使用FFmpeg将照片合成一段视频,有相关学习资料或demo吗?希望给推荐一下!3Q
        Abson在简书:@ismilesky 这个能用 IOS 本地的框架做呀

      本文标题:[iOS]FFmpeg框架在iOS平台上的编译和使用

      本文链接:https://www.haomeiwen.com/subject/gqobcttx.html