iOS FFmpeg编译及kxmovie、iFrameExtractor调试详解(无障碍阅读,绝对是你想要的)
2015-02-28 16:13
381 查看
特此声明:本文是通过网上收集整理加上自己亲自实验得来的。感谢所有网上分享的辛勤劳动者,本文仅供iOS学习使用。在学习的过程中,如果有问题或者不清楚的地方,欢迎留言,我们共同探讨互相学习。欢迎批评指正。
如果转载,请注明出处:/article/11552972.html
开发环境:最新 ffmpeg-2.5.4/iOS SDK8.1/Xcode6.1/OS X Yosemite版本10.10.2
开发环境:ffmpeg-2.5.4/Xcode6.1
1、下载ffmpeg源码:
请点击此链接http://ffmpeg.org/download.html
注:我的ffmpeg-2.5.4是解压放至Desktop的
2、调试编译ffmpeg源码
在终端输入:sudo curl
方法二:
1、Download yasm sourcecode from:
http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
2、Unpack tar xvzfyasm-1.2.0.tar.gz
3、cd yasm-1.2.0
4、Configure and build:
./configure && make -j 4 &&sudo make install
(一)、拷贝gas-preprocessor.pl文件到 /usr/bin 目录下。
如果找不到/usr/bin目录,直接使用”Finder—>前往—> 前往文件夹—>/usr/bin”或者使用快捷键“shift+command+G”前往文件夹,到指定目录下粘贴gas-preprocessor.pl文件。
(1)To build everything:
./build-ffmpeg.sh
(2)To build arm64 libraries:
./build-ffmpeg.sh arm64
(3)To build fat libraries for armv7 and x86_64 (64-bit simulator):
./build-ffmpeg.sh armv7 x86_64
(4)To build fat libraries from separately built thin libraries:
./build-ffmpeg.sh lipo
注:我的build-shell.sh是解压放至Desktop的,以上四种shell脚本的使用方式来自 https://github.com/kewlbear/FFmpeg-iOS-build-script,后面几种方式大家可以自己去尝试。
(4)、脚本执行完成之后,会在桌面上生成三个文件夹:“FFmpeg-iOS”“scratch”和”thin”文件夹
把FFmpeg编译出来的.a文件添加到工程中。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/a45afed5929c070e37facb982db5ea40)
在使用的时候得注意添加下面的动态链接库文件:
libz.dylib
libbz2.dylib
libiconv.dylib
运行工程
以下是在编译运行工程中可能会报的错误:
注意:如果在FFmpeg编译的时候出现“ffmpeg yasm not found,use --disable for a crippled build”,原因是 yasm是汇编编译器,因为FFmpeg中为了提高效率用到了汇编指令,解决这个问题有两种方法,一是下载一个yasm.exe安装在mingw/bin下面;二是不使用汇编指令,在配置上加上 即 ./configure --disable-yash 。(这就是为什么前面提到了要安装yasm)
成功通过编译(这里是指FFmpeg编译成静态库文件)
通过后会生成一个compiled(FFmpeg-iOS)的文件夹,里面有include和lib两个文件夹,这两个文件夹都要拷贝至工程目录下面。include是静态链接库要用到的头文件,lib是存放静态链接库的文件,然后把这些文件存放在项目里面即可,一定要把文件也copy进去,然后在项目的build settings中的header search paths字段加入include文件的路径 如:“$(SRCROOT)/ffmpeg/include”
前面的复选框选不选都可以;再在library search paths字段中加入a文件的路径 如:“$(SRCROOT)/ffmpeg/lib” 。否则可能会出现libavformat/avformat.h file not found 的错误。(出现这个错误是指编译kxmovie工程找不到相应的头文件)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/bc01416a4d48a0c6d257e2cfa0a0db25)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/7b7f08ba27a14cfb1303edc922a5903b)
上面图示:在工程目录下有个“FFmpeg”的文件夹,分别把编译FFmpeg完成后产生的“ FFmpeg-iOS ”文件夹中的“include”和”lib”文件夹拷贝至”FFmpeg”文件夹中,include文件夹中存放的是头文件,lib文件夹中存放的是.a静态库文件。最后就是在工程目录下的FFmpeg文件夹包含“include”和”lib”两个文件夹。设置Header
Search Paths和Library Search Paths时直接include和lib两个文件夹拖上去,自动显示路径。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/329ac0f817f460170223d4416c5108cd)
如果还出现找不到 avformat_open_input 的错误(我的没有出现过这个错误),说明你的ffmpeg还是太新了,之前的那个方法名已经改成了这个名字,把avformat_open_input改成av_open_input_file
就可以了。其他错误请自行谷歌或者留言,我们共同探讨。
上面报错总结文章来自:http://www.dnetzj.com/Content/267.html
最后一步,别忘了安装kxmovie.xcworkspace的cocoapods
pod install --verbose --no-repo-update
否则会报链接错误
以上kxmovie工程编译调试完毕,模拟器真机都通过测试。目前没有进一步的去研究这个工程,发现播放的视频质量有点粗糙。有时间再做进一步的研究。
(1)运行iFrameExtractor-master工程,与上面kxmovie工程操作一样,把FFmpeg文件夹拷贝至工程目录下:
iFrameExtractor-master下载地址:https://github.com/lajos/iFrameExtractor
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/1e4923f40901b2fec4d02e4d54eefb9c)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/5a795f4b79f1151fb826bc6db22bbfa4)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/92540df98e39d21ff03ccdd4e9aed160)
"_iconv", referenced from:
_avcodec_decode_subtitle2 in libavcodec.a(utils.o)
"_iconv_close", referenced from:
_avcodec_open2 in libavcodec.a(utils.o)
_avcodec_decode_subtitle2 in libavcodec.a(utils.o)
"_iconv_open", referenced from:
_avcodec_open2 in libavcodec.a(utils.o)
_avcodec_decode_subtitle2 in libavcodec.a(utils.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/e7600615c0e292e458a0c0ad5f9ac07d)
解决办法:"TARGETS"
- > "BuildSettings" - > "Other Linker Flags" 添加other Linker Flags 项:-liconv
![](https://oscdn.geek-share.com/Uploads/Images/Content/201502/28/adfe92596db8415767b4eb89583e221f)
此报错问题出自:http://stackoverflow.com/questions/21211215/ffmpeg-wont-build-in-my-project-works-fine-in-example-app/28777851#28777851
至此完成iFrameExtractor-master工程编译和运行
本文参考文章资料:
http://blog.csdn.net/oqqQuZi1234567/article/details/43152689
http://www.th7.cn/Program/Ruby/201502/385491.shtml
欢迎共同学习进步,本着分享的精神,只是为了让你学习起来更加轻松。如需转载,请注明出处:/article/11552972.html
如果转载,请注明出处:/article/11552972.html
开发环境:最新 ffmpeg-2.5.4/iOS SDK8.1/Xcode6.1/OS X Yosemite版本10.10.2
一、编译ffmpeg库:
编译调试ffmpeg库的步骤:开发环境:ffmpeg-2.5.4/Xcode6.1
1、下载ffmpeg源码:
请点击此链接http://ffmpeg.org/download.html
注:我的ffmpeg-2.5.4是解压放至Desktop的
2、调试编译ffmpeg源码
(1)、安装yasm:
方法一:
在终端输入:sudo curl
http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz >yasm.tar.gz
方法二:1、Download yasm sourcecode from:
http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
2、Unpack tar xvzfyasm-1.2.0.tar.gz
3、cd yasm-1.2.0
4、Configure and build:
./configure && make -j 4 &&sudo make install
(2)、下载pearl脚本文件:gas-preprocessor.pl:
下载地址: https://github.com/libav/gas-preprocessor(一)、拷贝gas-preprocessor.pl文件到 /usr/bin 目录下。
如果找不到/usr/bin目录,直接使用”Finder—>前往—> 前往文件夹—>/usr/bin”或者使用快捷键“shift+command+G”前往文件夹,到指定目录下粘贴gas-preprocessor.pl文件。
(二)、修改gas-preprocessor.pl文件的读写权限,使用 chmod a+rwxgas-preprocessor.pl
用终端命令cd定位到 gas-preprocessor.pl文件夹下执行:chmod a+rwxgas-preprocessor.pl命令(3)、下载build-shell.sh脚本文件:
下载地址:https://github.com/kewlbear/FFmpeg-iOS-build-script(一)下载解压build-shell.sh文件
(二)定位至build-shell.sh文件夹执行build-shell.sh脚本文件
使用方式有4种,我们可以根据特定的使用环境来执行对应的脚本,一般我们就直接执行:./build-ffmpeg.sh(1)To build everything:
./build-ffmpeg.sh
(2)To build arm64 libraries:
./build-ffmpeg.sh arm64
(3)To build fat libraries for armv7 and x86_64 (64-bit simulator):
./build-ffmpeg.sh armv7 x86_64
(4)To build fat libraries from separately built thin libraries:
./build-ffmpeg.sh lipo
注:我的build-shell.sh是解压放至Desktop的,以上四种shell脚本的使用方式来自 https://github.com/kewlbear/FFmpeg-iOS-build-script,后面几种方式大家可以自己去尝试。
(4)、脚本执行完成之后,会在桌面上生成三个文件夹:“FFmpeg-iOS”“scratch”和”thin”文件夹
scratch文件夹里面是单独编译的库,FFmpeg-iOS文件夹里面是合并编译的库。在使用的过程中,我们主要会用到FFmpeg-iOS 文件夹下的“include”文件夹和"lib"文件夹中的文件。
二、在工程中使用FFmpeg,网上成熟的有kxmovie。
1、下载kxmovie工程进行测试:
下载地址: https://github.com/kolyvan/kxmovie把FFmpeg编译出来的.a文件添加到工程中。
在使用的时候得注意添加下面的动态链接库文件:
libz.dylib
libbz2.dylib
libiconv.dylib
运行工程
以下是在编译运行工程中可能会报的错误:
注意:如果在FFmpeg编译的时候出现“ffmpeg yasm not found,use --disable for a crippled build”,原因是 yasm是汇编编译器,因为FFmpeg中为了提高效率用到了汇编指令,解决这个问题有两种方法,一是下载一个yasm.exe安装在mingw/bin下面;二是不使用汇编指令,在配置上加上 即 ./configure --disable-yash 。(这就是为什么前面提到了要安装yasm)
成功通过编译(这里是指FFmpeg编译成静态库文件)
通过后会生成一个compiled(FFmpeg-iOS)的文件夹,里面有include和lib两个文件夹,这两个文件夹都要拷贝至工程目录下面。include是静态链接库要用到的头文件,lib是存放静态链接库的文件,然后把这些文件存放在项目里面即可,一定要把文件也copy进去,然后在项目的build settings中的header search paths字段加入include文件的路径 如:“$(SRCROOT)/ffmpeg/include”
前面的复选框选不选都可以;再在library search paths字段中加入a文件的路径 如:“$(SRCROOT)/ffmpeg/lib” 。否则可能会出现libavformat/avformat.h file not found 的错误。(出现这个错误是指编译kxmovie工程找不到相应的头文件)
上面图示:在工程目录下有个“FFmpeg”的文件夹,分别把编译FFmpeg完成后产生的“ FFmpeg-iOS ”文件夹中的“include”和”lib”文件夹拷贝至”FFmpeg”文件夹中,include文件夹中存放的是头文件,lib文件夹中存放的是.a静态库文件。最后就是在工程目录下的FFmpeg文件夹包含“include”和”lib”两个文件夹。设置Header
Search Paths和Library Search Paths时直接include和lib两个文件夹拖上去,自动显示路径。
如果还出现找不到 avformat_open_input 的错误(我的没有出现过这个错误),说明你的ffmpeg还是太新了,之前的那个方法名已经改成了这个名字,把avformat_open_input改成av_open_input_file
就可以了。其他错误请自行谷歌或者留言,我们共同探讨。
上面报错总结文章来自:http://www.dnetzj.com/Content/267.html
最后一步,别忘了安装kxmovie.xcworkspace的cocoapods
pod install --verbose --no-repo-update
否则会报链接错误
以上kxmovie工程编译调试完毕,模拟器真机都通过测试。目前没有进一步的去研究这个工程,发现播放的视频质量有点粗糙。有时间再做进一步的研究。
三、iFrameExtractor-master(iFrameExtractor)工程编译和运行
(1)运行iFrameExtractor-master工程,与上面kxmovie工程操作一样,把FFmpeg文件夹拷贝至工程目录下:
(工程目录下本来是没有FFmpeg文件夹的)
iFrameExtractor-master下载地址:https://github.com/lajos/iFrameExtractor(2)设置好Header Search Paths和Library Search Paths
(3)最后还是会报链接错误:
Undefined symbols for architecture i386:"_iconv", referenced from:
_avcodec_decode_subtitle2 in libavcodec.a(utils.o)
"_iconv_close", referenced from:
_avcodec_open2 in libavcodec.a(utils.o)
_avcodec_decode_subtitle2 in libavcodec.a(utils.o)
"_iconv_open", referenced from:
_avcodec_open2 in libavcodec.a(utils.o)
_avcodec_decode_subtitle2 in libavcodec.a(utils.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决办法:"TARGETS"
- > "BuildSettings" - > "Other Linker Flags" 添加other Linker Flags 项:-liconv
此报错问题出自:http://stackoverflow.com/questions/21211215/ffmpeg-wont-build-in-my-project-works-fine-in-example-app/28777851#28777851
至此完成iFrameExtractor-master工程编译和运行
本文参考文章资料:
http://blog.csdn.net/oqqQuZi1234567/article/details/43152689
http://www.th7.cn/Program/Ruby/201502/385491.shtml
欢迎共同学习进步,本着分享的精神,只是为了让你学习起来更加轻松。如需转载,请注明出处:/article/11552972.html
相关文章推荐
- 编译ffmpeg for iOS,并调试iFrameExtractor demo
- iOS ffmpeg kxmovie 编译 调试 /最新 ffmpeg2.5.3/iOS SDK8.1/XCODE6.1/
- IOS,FFMPEG库编译以及iFrameExtractor DEMO总结
- iOS编译FFmpeg、kxmovie实现视频播放 (转载)
- 编译ffmpeg for iOS,并调试iFrameExtractor demo
- ios: ffmpeg-0.9.2 xcode4.3.2 IOS5.1 真机调试编译过程以及Mac OSX10.7.3安装 gcc和make
- iOS 编译可调试的FFmpeg
- iOS编译FFmpeg、kxmovie实现视频播放
- 编译ffmpeg for iOS,并调试iFrameExtractor demo
- ffmpeg的编译及kxmovie的调试
- iOS编译FFmpeg、kxmovie实现视频播放
- iOS编译FFmpeg、kxmovie实现视频播放
- iOS编译好的FFMPEG-iOS以及kxmovie播放视频的小demo
- [iOS]iOS编译FFmpeg、kxmovie实现视频播放
- iOS--kxmovie之FFmpeg编译和使用
- iOS编译ffmpeg1.2.1,使用kxmovie播放视频文件
- 编译ffmpeg for iOS,并调试iFrameExtractor demo
- [绍棠] iOS编译FFmpeg、kxmovie实现视频播放
- 如何用vc6编译ffmpeg, 并单步调试
- 关于ios中编译ffmpeg0.9.2库