iOS: FFMpeg编译和使用问题总结
iOS: FFmpeg编译和使用问题总结c++
折磨了我近一周多时间的FFmpeg库编译问题终于解决了,必须得把这一段时间来遇到过的坑全写出来。若是急着解决问题,编译最新版本的FFmpeg库请直接看第二部分,编译较老版本(0.7)的FFmpeg库请直接跳至第七部分,那里有你想要的编译脚本,但别忘了抽空看看全文。git
1、背景github
网上有不少FFmpeg编译配置的资料,大部分都是关于FFmpeg最新的版本(2.0)的,我一开始也想着编写一个2.0版本的,能够放到接手的那个项目中,发现各类问题(没法快进,没有声音),再看一下代码一堆警告,缘由很简单,使用的FFMpeg库太新了,不少接口变更了。因为手上没有多少信息,不知道那个项目使用的是哪一个版本的FFmpeg库,一点点找,终于知道原来使用的是0.7.x的。找到目标版本的FFmpeg本觉得万事大吉了,后来才发现原来这才是坑的开始,有历经一系列磨难,最后终于把编译问题解决了。windows
2、FFmpeg最新版本的库编译xcode
FFmpeg最新版本的应该是2.1的,历史版本详见http://www.ffmpeg.org/releases/,在这个网站上咱们能够下到全部历史版本的库。FFmpeg是一个跨平台的用C语言写成的库,包含了编码,解码,色彩空间转换等库。编译须要用到命令行,对于咱们这些没搞事后台或者linux开发的脚本知识欠缺的人来讲的确算是一个挑战。庆幸的是如今网络这么方便,不会作问Google,很快就找到了一个在xcode5下一键编译FFmpeg库的脚本。这个脚本是个老外写的,真心强大,从下载到编译到构建最后的Fat库一鼓作气。bash
脚本地址: https://gist.github.com/m1entus/6983547服务器
运行这个脚本须要依赖一个库Perl写的脚本,搜了一下网上目前编译FFmpeg库的帖子基本都会提到这个脚本,脚本地址以下: https://github.com/mansr/gas-preprocessor。
下载完这两个脚本后,编译FFmpeg库的准备工做就基本完成了,接着依次执行下面几步:
一、拷贝gas-preprocessor.pl文件到 /usr/bin目录下。
二、修改gas-preprocessor.pl文件的权限
注:须要有读,写和执行的权限。具体操做为,首先在命令行下进入/usr/bin目录,而后执行chmod命令,以下图所示:
三、切换build-ffmpeg.sh脚本的目录下,使用命令
sh build-ffmpeg.sh 运行该脚本便可。
注: 1) build-ffmpeg.sh脚本的父目录的名字不能包括空格,不然可能致使构建失败。
2) build-ffmpeg.sh脚本中能够配置编译的FFMpeg版本,以及使用iOS SDK的版本,以下图所示:
该脚本中默认采用的FFmpeg是2.0版本,使用iOS 7.0的SDK编译,c语言编译器采用clang,应用中能够根据实际项目须要选中不一样的FFmpeg和iOS SDK版本。
根据上面的步骤看来,编译工做也没有什么复杂的,为何我会说踩了不少坑呢?这个问题我会一点点儿解释。
3、编译较早期版本的FFmpeg本库
第二部分中咱们介绍了一个牛逼的脚本,一键编译,这给咱们形成了一种错觉,FFmpeg编译不过如此吗!若是咱们尝试一下把脚本中的VERSION变成0.7试试,运行脚本,发现编译报错。以下图所示:
提示位置选项--disable-iconv,根据提示咱们输入./configure查看全部可用选项。命令行下切换到实际的FFmpeg源码目录下,查看帮助以下图:
咱们能够看到不少选项,英语不难,就是有些选项描述的太简洁了,因此实际使用时若是不肯定的话,咱们能够去问问google。
好了回过头来看看这个configure文件到底有什么做用呢?
一、裁剪
咱们知道FFmpeg库是一个很是庞大的库,包括编码,解码以及流媒体的支持等,若是不作裁剪所有编译进来的话,最后生成的静态库会很大。实际使用中咱们可能只想用到解码(例如播放器),所以咱们可使用相关选项指定编译时禁用编码部分。固然咱们还能够作进一步的裁剪,例如只打开部分经常使用格式的解码,禁用掉其余的解码,这样编译出来的静态库将会更小。
要想裁剪,咱们的先知道有哪些部分,使用下面的命令能够查看FFMpeg库支持的组件列表。
1
2
3
4
5
6
7
8
9
10
11
|
--list-decoders show all available decoders
--list-encoders show all available encoders
--list-hwaccels show all available hardware accelerators
--list-muxers show all available muxers
--list-demuxers show all available demuxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
|
咱们能够根据实际须要把不用的部分都禁用掉,这样编译快,包也会比较小,经常使用的裁剪选项以下:
1
2
3
4
5
6
7
8
9
10
11
12
|
--disable-doc
do
not build documentation
--disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build
--disable-ffserver disable ffserver build
--disable-network disable network support [no]
--disable-encoder=NAME disable encoder NAME
--enable-encoder=NAME enable encoder NAME
--disable-encoders disable all encoders
--disable-decoder=NAME disable decoder NAME
--enable-decoder=NAME enable decoder NAME
--disable-decoders disable all decoders
--disable-hwaccel=NAME disable hwaccel
|
举个例子,若是咱们须要作一款本地视频播放器,那么咱们可使用以下配置:
固然你还能够根据帮助列表进行更细粒度的裁剪,例如只支持哪几种格式的解码等等。
二、指定编译环境
FFMpeg做为一个跨平台的库,不一样的平台,不一样的人的计算机上编译器的路径均可能不尽相同,因此咱们须要为编译脚本指定编译器的路径。同事咱们还能够指定其余编译选项,如是否交叉编译,目标平台系统,CPU架构,须要依赖的其余库的路径已经指定是否禁用汇编优化等。
1
2
3
4
5
6
7
8
9
10
11
|
--enable-cross-compile assume a cross-compiler is used
--sysroot=PATH root of cross-build tree
--sysinclude=PATH location of cross-build system headers
--target-os=OS compiler targets OS []
--cc=CC use C compiler CC [gcc]
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS []
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS []
--arch=ARCH select architecture []
--cpu=CPU select the minimum required CPU (affects
instruction selection, may crash on older CPUs)
--disable-asm disable all assembler optimizations
|
sysroot即iOS SDK的路径,注意编译真机版本的库时须要使用iPhoneOS.platform中SDK的路径,编译模拟器版本的库使用iPhoneSimulator.platform中SDK的路径。target-os填写darwin(苹果系统的内核),arch能够根据具体的状况添加i386(模拟器),armv6,armv7等。cpu根据具体类型可填写cortex-a8,cortox-a9,i386等。
三、指定静态库的安装路径
指定执行make install命令时编译好的静态库和相关头文件拷贝到的位置,即FFmpeg库编译后输出的路径。一般咱们只须要设置“--prefix=PREFIX”选项便可。例如咱们须要将最后生成静态库的路径指向“build/armv7”下,则设置--prefix="build/armv7";
4、FFmpeg0.7版本库一键编译脚本
经过第三部分的介绍,相信咱们应该对FFmpeg的配置都有了一个初步的认识,咱们再回到第三部分开始时咱们运行build-ffmpeg.sh的碰到的问题,通过查看configure的帮助,咱们发现0.7这个版本的FFmpeg库倒是没有"--disable-iconv"选项。这个牛逼的脚本是针对当前较新的FFmpeg库写的,在低版本中没有一些配置选项也是正常。
下面给出通过修改后的脚本,脚本中对原先的脚本进行了精简,去掉了下载部分的代码。

1 #!/bin/sh 2 3 ######################################################################## 4 ##################### copyright by smileEvday ########################## 5 ##################### smileEvday.cnblogs.com ########################### 6 ######################################################################## 7 8 # FFMpeg,SDK版本号 9 VERSION="0.7.4" 10 SDKVERSION="6.1" 11 12 #最低支持的SDK版本号 13 MINSDKVERSION="5.0" 14 15 # 源文件路径 16 SRCDIR=$(pwd) 17 BUILDDIR="${SRCDIR}/build" 18 mkdir -p $BUILDDIR 19 20 # 获取xcode开发环境安装路径 21 DEVELOPER=`xcode-select -print-path` 22 23 # 要编译的架构列表 24 ARCHS="armv7 armv7s i386" 25 for ARCH in ${ARCHS} 26 do 27 if [ "${ARCH}" == "i386" ]; 28 then 29 PLATFORM="iPhoneSimulator" 30 EXTRA_CFLAGS="-arch i386" 31 EXTRA_LDFLAGS="-arch i386 -mfpu=neon" 32 EXTRA_CONFIG="--arch=i386 --cpu=i386" 33 else 34 PLATFORM="iPhoneOS" 35 EXTRA_CFLAGS="-arch ${ARCH} -mfloat-abi=softfp" 36 EXTRA_LDFLAGS="-arch ${ARCH} -mfpu=neon -mfloat-abi=softfp" 37 EXTRA_CONFIG="--arch=arm --cpu=cortex-a9 --disable-armv5te" 38 fi 39 40 make clean 41 42 # you can do any clip here 43 ./configure --prefix="${BUILDDIR}/${ARCH}" \ 44 --disable-doc \ 45 --disable-ffmpeg \ 46 --disable-ffplay \ 47 --disable-ffserver \ 48 --enable-cross-compile \ 49 --enable-pic \ 50 --disable-asm \ 51 --target-os=darwin \ 52 ${EXTRA_CONFIG} \ 53 --cc="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/usr/bin/gcc" \ 54 --as="/usr/bin/gas-preprocessor.pl" \ 55 --sysroot="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk" \ 56 --extra-cflags="-miphoneos-version-min=${MINSDKVERSION} ${EXTRA_CFLAGS}" \ 57 --extra-ldflags="-miphoneos-version-min=${MINSDKVERSION} ${EXTRA_LDFLAGS} -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk" 58 59 make && make install && make clean 60 61 done 62 63 ######################################################################################################################## 64 ##################################################### 生成fat库 ######################################################### 65 ######################################################################################################################## 66 mkdir -p ${BUILDDIR}/universal/lib 67 cd ${BUILDDIR}/armv7/lib 68 69 for file in *.a 70 do 71 72 cd ${SRCDIR}/build 73 xcrun -sdk iphoneos lipo -output universal/lib/$file -create -arch armv7 armv7/lib/$file -arch armv7s armv7s/lib/$file -arch i386 i386/lib/$file 74 echo "Universal $file created." 75 76 done 77 cp -r ${BUILDDIR}/armv7/include ${BUILDDIR}/universal/ 78 79 echo "Done." 80 81 build-ffmpeg0.7
注:因为FFmpeg库比较陈旧,该脚本使用xcode4.6下,编译器为GCC,采用6.1的SDK进行编译。若是你的机器上装的同事安装了xcode4.x和xcode5的话,能够在命令行下使用以下命令切换当前的默认编译环境为xcode4.6便可:
设置好xcode的编译环境之后,只须要将该脚本拷贝到FFMpeg源文件路径下运行便可一键生成armv7,armv7s,i386以及合成后的全平台库。
5、如何使用以及编译连接中可能遇到的问题
第四部分中咱们对build-ffmpeg.sh的脚本进行了修改和精简后获得了build-ffmpeg0.7.sh,咱们只须要运行该脚本就能够一键完成FFmpeg 0.7版本库的编译工做了。编译后咱们获得的是lib目录(包含全部生成的静态库)以及include目录(包含相应的头文件),使用时咱们只须要将这些文件添加到工程中便可。
问题到这里彷佛就所有解决了,若是顺利的话,恭喜你,你能够直接使用了。
若是你跟我同样的"不幸"的话,可能还会遇到一些其余问题。下面是我遇到的问题及解决办法:
一、time.h重复问题
咱们知道通常静态库都是搭配头文件使用的,要在项目里面使用FFmpeg库,咱们出了须要在xcode的build phases中添加静态库之外,还须要导入该库对应的头文件。FFmpeg库对应的头文件有不少,一般会采用设置header search path的方式来导入头文件,这样作有两个好处: 第一能够避免对咱们的工程结构形成干扰。第二能够在必定程序上下降头文件冲突。
time.h冲突的问题就是属于头文件冲突,系统的标准库中有time.h文件,FFmpeg应该是在1.1以后也加入了一个time.h文件,路径为libavutil/time.h。因此若是你使用的是FFmpeg1.1以后的版本,那么在使用中就可能会碰到头文件冲突的问题。解决这个问题,网上流传一个方法是修改FFmpeg库中time.h文件的名字,我以为这太麻烦了,并且也容易出错。后来查看FFmpeg源码的时候偶然发现它自身内部引用这个time.h的时候都有带一层父目录,如#include "libavutil/time.h"。所以想是否是经过指定头文件搜索路径就能够解决这个问题。
打开工程设置页面,搜索header search path以下图所示:
若是你的FFmpeg库正好是放在当前的路径下,且为了偷懒设置了递归包含头文件的话,那么你极可能就会遇到time.h冲突的问题。由于xcode工程默认的设置是优先查找用户路径,编译时FFmpeg中libavutil下的time.h就会优先被连接,从而致使不会再连接系统time.h文件,最终致使编译失败。
解决这个问题有两个办法:
a、取消掉Header Search Paths中的递归引用。
b、设置Always Search User Paths为NO。
二、gcc c compiletest error问题
xcode5下面编译FFmpeg都采用clang,一样也会遇到相似问题。这个问题一般出如今配置文件错误的状况下,通常都是gcc路径错误,固然也多是其余编译参数错误问题。
出现这个问题咱们应该首先检查gcc的路径是否正确,若是确认了指定路径上存在gcc程序,可是仍是报错的,咱们再去检查当前要编译的平台和指定的gcc路径是否一致,若是你使用iPhoneOS.platform下面的gcc去编译i386平台的库那确定是不会测试经过的。
三、C compiler test failed问题
编译i386版本的FFmpeg库和armv版本库可能用到的参数不尽相同,例如我遇到这个问题,个人编译选项中有一项以下:
--extra-cflags='-arch i386 -mfloat-abi=softfp -miphoneos-version-min=5.0'
在我确认其余参数(如cpu,arch)都正确的状况下,依然提示咱们“C compiler test failed.” 后面紧跟着一句查看config.log你能够获得更详细的信息,因而打开该文件,你能够在最开始的地方看到你的配置语句,若是是用脚本,这块儿会显示最终解释后(替换参数为真实值)的配置语句。而后紧跟着一堆具体的配置,一般哭啼的错误信息会在该文件的最末尾。我遇到的问题的信息以下:
看到标红的这个区域了没有,提示“-mfloat-abi=softfp”选项不支持,删掉该选项后,在运行时配置就经过了。其余配置问题,均可以经过查看config.log来获取更详细的错误信息。
四、因为未导入libbz动态库的问题
若是导入FFmpeg库了,而且配置了头文件搜索路径,遇到"Undefined symbols for architecture armv7s: _BZ2_bzDecompressInit",以下图所示:
这个问题是因为没有导入“libbz2.dylib”库的缘由,导入库便可解决该问题。
五、libavcodec/audioconvert.h头文件缺失问题
不知道为何执行make install的时候libavcodec中的audioconvert.h怎么没有拷贝到include目录下的libavcodec中去,查看发现原来libavutil目录下已经有一个audioconvert.h了。解决这个问题只须要从FFmpeg库的libavcodec中拷贝audioconvert.h头文件到include的libavcodec目录中便可解决。
6、杂谈
感谢我所遭遇的"不幸",若是当时接受的项目使用的最新版本的FFmpeg库,我可能就直接运行一下那个牛逼的脚本,而后一切就能够顺顺利利。若是真是那样的话,我可能也就不会花时间去学习基本的脚本知识,去了解FFmpeg库的相关配置,这样的结果就是下次当我中奖遇到FFmpeg库编译连接等问题时,只能一筹莫展。
说了这么多,当咱们使用一个技术的时候,不该该仅仅停留在会用的层次,花点儿时间了解一下背后的原理会更让你对该技术有个更深的理解,多学,多看,多思考,最终会有有所收获的。
7、编译脚本及参考资料
一、编译脚本
gas-preprocessor脚本地址: https://github.com/mansr/gas-preprocessor
FFmpeg 2.x一键化编译脚本: https://gist.github.com/m1entus/6983547
FFmpeg0.7一键化编译脚本: https://gist.github.com/smileEvday/7565260
二、参考资料
模拟器与真机下ffmpeg的编译方法(总结版)
http://www.cocoachina.com/iphonedev/toolthain/2011/1020/3395.html
编译在ios4.3中使用的ffmpeg库(转)
http://www.cocoachina.com/bbs/simple/?t70887.html
Installing ffmpeg ios libraries armv7, armv7s, i386 and universal on Mac with 10.8
评论
#1楼 2013-11-21 11:47 dreamhappy
#2楼[楼主] 2013-11-21 14:57 一片-枫叶
windows上的还没搞过,这个问题还真无法回答你
#3楼 2013-12-11 14:39 三毛大哥80
macmatoMac-Pro:Downloads mac$ sh build-ffmpeg.sh
: command not foundne 2:
: command not foundne 15:
: command not foundne 19:
: command not foundne 21:
: No such file or directoryd: .
: command not foundne 24:
: command not foundne 30:
: command not foundne 31:
: command not foundne 34:
: command not foundne 41:
: command not foundne 43:
: command not foundne 45:
: invalid option line 47: set: -
set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
#4楼 2013-12-11 14:52 三毛大哥80
#5楼[楼主] 2013-12-11 19:48 一片-枫叶
#6楼 2013-12-12 10:26 三毛大哥80
#7楼[楼主] 2013-12-13 15:12 一片-枫叶
这个脚本我试了,没有问题的,你看看是否是有非法字符在里面,下载下来有编辑过吗?
#8楼 2014-01-02 23:51 龙象般若
#9楼[楼主] 2014-01-07 09:33 一片-枫叶
具体一点,报什么错?
#10楼 2014-01-07 15:40 吴春艺
--list-muxers show all available muxers
--list-demuxers show all available demuxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
这几个都是干什么用的啊?
#11楼 2014-01-07 15:41 吴春艺
#12楼 2014-01-07 16:20 飘荡的云
Downloading ffmpeg-2.0.2.tar.bz2
我是将脚本放到我下载的最新版本的ffmpeg中了 但为何仍是去下载呢,为何不下载最新版本的2.1呢,谢谢了
#13楼 2014-01-07 16:29 飘荡的云
#14楼 2014-01-07 16:50 飘荡的云
#15楼[楼主] 2014-01-07 19:43 一片-枫叶
arm64能够兼容的,向下兼容而已,就像ios 7的系统能够跑6的sdk编写的程序同样。
能够修改脚本去掉模拟器支持,库是会小一点儿。不过根据实际经验在你编译成最终ipa上传的时候通常都会只支持真机,这个库也会根据须要连接的,不会影响最终ipa的大小
#16楼[楼主] 2014-01-07 19:45 一片-枫叶
#17楼 2014-01-08 09:51 飘荡的云
ld: warning: ld: warning: ignoring file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavfilter.a, missing required architecture arm64 in file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavfilter.a (3 slices)ignoring file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libswresample.a, missing required architecture arm64 in file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libswresample.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavformat.a, missing required architecture arm64 in file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavformat.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavdevice.a, missing required architecture arm64 in file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavdevice.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavresample.a, missing required architecture arm64 in file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavresample.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavutil.a, missing required architecture arm64 in file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavutil.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavcodec.a, missing required architecture arm64 in file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libavcodec.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libswscale.a, missing required architecture arm64 in file /Users/user/Desktop/公司资料/code/高清摄像头/PlayerUseImage/PlayerUseImage/libs/libswscale.a (3 slices)
Undefined symbols for architecture arm64:
"_av_init_packet", referenced from:
-[VideoDecoder decodeWithData:] in VideoDecoder.o
"_avcodec_alloc_frame", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_sws_scale", referenced from:
-[VideoDecoder decodeWithData:] in VideoDecoder.o
"_avcodec_alloc_context3", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_av_free_packet", referenced from:
-[VideoDecoder decodeWithData:] in VideoDecoder.o
"_avcodec_open2", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_avpicture_alloc", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_av_register_all", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_avcodec_find_decoder", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_avpicture_free", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_sws_freeContext", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_avcodec_decode_video2", referenced from:
-[VideoDecoder decodeWithData:] in VideoDecoder.o
"_avcodec_register_all", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_sws_getContext", referenced from:
-[VideoDecoder init] in VideoDecoder.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
若是我把arm64位去掉的话,错误和警告就没了,可是我以为这不是长久之计,因此我以为仍是如今解决一下比较好,我在网上找到了一个编译ffmpeg arm64的,不是很懂,楼主能否将这两个综合一下呢,将arm64的编译挪到你如今的脚本中,网址以下: https://github.com/kewlbear/FFmpeg-iOS-build-script
谢谢了
#18楼[楼主] 2014-01-08 13:00 一片-枫叶
你编译的是0.7版本的仍是2.0?
#19楼 2014-01-08 13:09 飘荡的云
您好,楼主,是2.1的,我以前用的1.2也是这个问题,因此我换成2.1的试试,也是同样的问题哈
#20楼 2014-01-08 13:17 飘荡的云
2.1有问题,不如以前的1.2版本问题,以前的1.2若是我穿进去的数据不是一帧的话,不会崩溃的,2.1的会崩溃,以前每秒10帧,一点问题没有,用了2.1的话,也会崩溃,提示
[h264 @ 0x1d98ec00] corrupted macroblock 24 4 (total_coeff=-1)
[h264 @ 0x1d98ec00] error while decoding MB 24 4
[h264 @ 0x1d98ec00] concealing 3305 DC, 3305 AC, 3305 MV errors in I frame
[h264 @ 0x1d98ec00] no frame!
这种错误,貌似由于我传进的速度,大于他的解码速度了,致使出现这个问题的,不知道为什么们2.1的解码速度这么慢呢 楼主能加我qq吗(532917100)谢谢了
#21楼[楼主] 2014-01-08 14:18 一片-枫叶
具体的解码我也不懂,要支持arm64的话,直接在脚本最开始的地方armv7,armv7s 后面加上arm64应该就能够了
#22楼 2014-01-08 14:25 飘荡的云
这个我试了哈 楼主 把i386改为arm64位了,可是最后没有生成啊 看来仍是须要改一些东西的啊
#23楼[楼主] 2014-01-09 08:59 一片-枫叶
我今天抽空看看,改好了qq通知你
#24楼 2014-01-09 09:06 飘荡的云
恩恩,谢谢你,楼主
#25楼 2014-02-13 10:42 码农张三丰
Building without ccache
./configure: line 2870: /Users/zhangyu/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang: No such file or directory
./configure: line 2870: /Users/zhangyu/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang: No such file or directory
/Users/zhangyu/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang is unable to create an executable file.
C compiler test failed.
#26楼[楼主] 2014-02-13 15:40 一片-枫叶
路径错误
/Users/zhangyu/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
找不到Clang,你看看这个路径下有吗?
#27楼 2014-02-13 15:44 码农张三丰
#28楼[楼主] 2014-02-14 12:35 一片-枫叶
#29楼 2014-03-24 09:03 vale_1988
Using ffmpeg-2.1.4.tar.bz2
Building without ccache
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang is unable to create an executable file.
C compiler test failed.
请问是啥问题引发的?个人环境是 Mac OX 10.9,Xcode5.1
------------------------------------------------------------
把脚本里的路径一个个打印下来,发现原来是Xcode5.1中装的是iOS7.1的SDK,而不是iOS7.0的SDK。谢谢。
-------------------------------------------------------
仍是有问题 后加入 " --disable-armv6 \
--disable-armv6t2 \" 这两个参数就行了。
再次感谢。
#30楼 2014-04-21 18:23 lzh01
armv7s
i386
universal
博主,这是我生成的文件,我是否是须要合成一个啊?我怎么合成?
#31楼 2014-04-21 19:27 lzh01
[swscaler @ 0xd0fb600] No accelerated colorspace conversion found from yuv420p to rgb24.
不知道你们有没有遇到这样的问题!
我使用编译后的库是universal
#32楼[楼主] 2014-04-22 11:12 一片-枫叶
universal里面的就是合成好的库
#33楼 2014-04-24 14:43 lzh01
谢谢博主!
还有一个问题,按照 http://www.cnblogs.com/ikodota/archive/2012/09/12/compile_ffmpeg_for_iOS.html
的教程,编译总报
Configure options: --disable-asm --enable-cross-compile --enable-gpl --enable-postproc --enable-swscale --enable-avfilter
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc is unable to create an executable file.
C compiler test failed.
错误!不知博主是否也遇到过!
#34楼[楼主] 2014-04-24 18:31 一片-枫叶
参数不对,或者版本不对应,以前我遇到过只有画面没有声音的问题
#35楼 2014-04-25 16:53 lzh01
我发现我编译都没经过!错误都是
Configure options: --disable-asm --enable-cross-compile --enable-gpl --enable-postproc --enable-swscale --enable-avfilter
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc is unable to create an executable file.
C compiler test failed.
#36楼 2014-05-07 11:55 骑驴追火箭
出现这个问题是什么缘由啊
liangyingjundeMacBook-Pro:ffmpeg-2.0.2 Onery$ xcode -s /Applications/Xcode5.1.app/Contents/Developer
-bash: xcode: command not found
#37楼 2014-09-11 17:58 遇则安
看完这篇博客后深受启发,但按照文中步骤编译时老是有问题。iOS sdk:7.1,ffmpeg:2.3.3,Xcode 5.1.1,每次都是gas-preprocessor报错,刚开始说找不到这个文件,而后将build-ffmpeg.sh脚本中的gas-preprocessor路径改成/usr/bin/gas-preprocessor,而后显示gas-preprocessor的第88行报错。对应的文件都是在博文中的连接下载的,报错信息在ffmpeg/config.log中看的。而后看到一些博客中说Xcode5以上不在须要gas-preprocessor文件了,因而把build-ffmpeg.sh脚本中关于gas-preprocessor的“--as='/usr/local/bin/gas-preprocessor.pl'”删掉后,终于编译成功了。不知道在使用过程当中还会遇到什么问题。
#38楼 2014-11-21 15:25 广州-小a
我如今将ffmpeg编译好以后,想将本身编写的sdk.c等其余c源文件(调用到了ffmpeg里面的方法)进一步编译成一个库,最后供后续调用,那么如今想进一步编译库,应该怎么作?
#39楼 2014-11-27 09:41 他三叔走啊
#40楼[楼主] 2014-11-28 09:23 一片-枫叶
#41楼[楼主] 2014-11-28 09:23 一片-枫叶
具体点,为何不能用呢?
#42楼 2014-11-28 09:34 他三叔走啊
能够用 是我不会用 我要作的功能是 多张图片合成视频 能指点一下么? 我QQ490849131 谢谢了
#43楼 2014-12-02 16:17 他三叔走啊
#44楼 2014-12-02 16:24 paschal