当前位置:首页 » 编程软件 » iosffmpeg编译

iosffmpeg编译

发布时间: 2022-06-07 20:50:54

1. ios 怎么配置编译ffmpeg

一、系统环境

MAC OS X Mountain Lion 10.8.3、 XCode 5.1

二、编译FFMpeg

1、下载ffmpeg2.2.5版本代码,并解压

2、下载并解压gas-preprocessor.pl (附件中有,zip格式,因网易博客不能上传zip后缀的文件,故加了个.rar)

在终端中使用cp命令将它复制到 /usr/sbin/目录,并赋予可执行权限。

sudo cp -f gas-preprocessor/gas-preprocessor.pl /usr/sbin/chmod +x /usr/sbin/gas-preprocessor.pl

3、在ffmpeg目录下创建一个config.sh脚本

#!/bin/bash
SDKVERSION="7.1"

ARCHS="armv7 armv7s i386"

DEVELOPER=`xcode-select -print-path`

cd "`dirname "$0"`"
REPOROOT=$(pwd)

# where we will store intermediary builds
INTERDIR="${REPOROOT}/built"
mkdir -p $INTERDIR

########################################
# Exit the script if an error happens

for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ];
then
PLATFORM="iPhoneSimulator"
EXTRA_CONFIG="--arch=i386 --disable-asm --enable-cross-compile --target-os=darwin --cpu=i386"
EXTRA_CFLAGS="-arch i386"
EXTRA_LDFLAGS="-I${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk/usr/lib"
else
PLATFORM="iPhoneOS"
EXTRA_CONFIG="--arch=arm --target-os=darwin --enable-cross-compile --cpu=cortex-a9 --disable-armv5te"
EXTRA_CFLAGS="-w -arch ${ARCH}"
fi

mkdir -p "${INTERDIR}/${ARCH}"

./configure --prefix="${INTERDIR}/${ARCH}"
--disable-neon
--disable-armv6
--disable-armv6t2
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--disable-iconv
--disable-bzlib
--enable-avresample
--sysroot="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"
--cc="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
--as='/usr/local/bin/gas-preprocessor.pl'
--extra-cflags="${EXTRA_CFLAGS} -miphoneos-version-min=${SDKVERSION}"
--extra-ldflags="-arch ${ARCH} ${EXTRA_LDFLAGS} -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk -miphoneos-version-min=${SDKVERSION}" ${EXTRA_CONFIG}
--enable-pic
--extra-cxxflags="$CPPFLAGS -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"

make && make install && make clean

done

mkdir -p "${INTERDIR}/universal/lib"

cd "${INTERDIR}/armv7/lib"
for file in *.a
do

cd ${INTERDIR}
xcrun -sdk iphoneos lipo -output universal/lib/$file -create -arch armv7 armv7/lib/$file -arch armv7s armv7s/lib/$file -arch i386 i386/lib/$file
echo "Universal $file created."

done
cp -r ${INTERDIR}/armv7/include ${INTERDIR}/universal/

echo "Done."

SDKVERSION 是XCode的版本,通过`xcode-select -print-path`来获取XCode的安装路径,ARCHS是编译的三种模式,接下来在终端中cd到ffmpeg目录,./config.sh执行就可以编译了。等到编译完成后,在ffmpeg目录下会多出一个built目录,里面分别是armv7 armv7s i386及三个合并的universal版本了。

2. 如何编译ffmpeg以支持dshow设备

fmpeg已经能支持dshow设备了!
但编译时会遇到一些麻烦.在此把我的编译历程总结一下,以使后来者的心灵免遭蹂躏.
先说一下我的编译环境:
mingw+msys,ffmpeg用最新版.
在configure ffmpeg工程时,如果不特别指定,默认fdshow设备是被支持的,但编译后却没有.可以查看configure的日志文件,会发现找不到一些依赖的头文件.所以最终编译出来的ffmpeg.exe,
用ffmpeg -formats来看,在indev一项中,一般只有vfwcap,而没有dshow.

3. ffmpeg 如何指定编译哪些库

FFmpeg在Windows系统下的编译过程,分四步:
如下:
1. 配置编译环境
2. 下载FFMPEG的代码
3. 编译,获取FFMPEG库(头文件,lib,和DLL)
4. 在VC下配置,测试
1. 配置编译环境
1)安装MSys
下载文件:
bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
msysCORE-1.0.11-20080826.tar.gz
解压msysCORE-1.0.11-20080826.tar.gz,比如解压到X:\msys(以下内容都使用该路径描述,X为你安装的盘符)。
解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,产生一个名为bash-3.1的目录,在该目录下有一个子目录名为bin,其他的目录不需要关心。复制bin目录中的所有文件到D:\msys\bin,提示是否要覆盖sh.exe的时候,选择是。
到“D:\msys\postinstall”目录下执行pi.bat,在出现的提示中输入n回车后(这个不搞错了),按任意键退出即可。

4. ios编译ffmpeg时如何添加x264的库

找到问题了编译的时候首先要连接libx264 ,le-libx264 --enable-gpl --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib 然后要打开这个编码器--enable-encoder=libx264,我就是这一步搞错了一直找不到,我在编译的时候禁掉了所有的编码器,终于可以继续走下去了 到DEVDIV.COM网站查看回答详情>>

5. ios ffmepg 解码mp3成功之后怎么处理

IOS平台下的ffmpeg编译简介,写在经历了n翻折腾之后。首先感谢Cocoachina中众多的资源
IOS下基于H264的音视频网传前后走通花了差不多1个多月时间。
先说下总的流程如下:
a)从网络接收H264视频数据 adpcm音频数据
b)网络数据输入到ffmpeg解码库 音频数据输入到音频解码库(音频解码库为自己所写)
c)ffmpeg解码出YUV420P视频数据 音频解码出PCM数据
d)将YUV420P数据转换为RGB24图像 用UIImageview输出 用OPENGL ES输出也可以(两种方法均验证过可行)
e)将音频PCM数据输入OPEN AL中输出
f)以上为整个流程,d1在iphone4上可以达到16桢 左右的效率

下面来说说FFMPEG部分。刚开始接触ffmpeg的时候遇到的第一个问题就是编译问题。
1 下载FFMPEG代码,该步比较简单可在ffmpeg官方网站上下载(我下的是0.6.5的,下了0.10的没编译过部分arm指令)
2 用gcc进行编译,写配置信息。该步骤浪费了太多的精力和时间,主要是没有在ios平台下的经验导致。
1)编译的时候不明白版本问题,编译后才发现每次编译需要制定不同的处理器模式为3种:armv6 armv7 i386版本
2)configure配置信息,前期犯了各种错误。还是对于ffmpeg的configure配置参数步了解导致。另外用gcc编译的经验也步丰富。
最终领悟出:配置信息主要为配置gcc的位置和汇编的编译器位置。
configure命令如下(该段配置信息为iFrameExtractor中。该demo也让我学习到很多知识,需要的可以在网上搜索下载):
./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-avfilter --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk' --enable-pic

配置成功后 make即可编译出armv7版本的lib*。a文件。
到此既可以生成ios下需要的ffmpeg静态库文件,需要用的时候拖入到项目中即可。
另外还需要添加libbz 、libz的framework
补充:在iOS6中编译出的。a的库在armv7s下编译目前有问题,可以修改target的Valid Architectures只支持Armv7去掉Armv7s

6. ios ijkplayer怎么加入自己编译的ffmpeg

找到问题了编译的时候首先要连接libx264 ,le-libx264 --enable-gpl --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib 然后要打开这个编码器--enable-encoder=libx264,我就是这一步搞错了一直找不到,我在编译的时候禁掉...

7. ios下 怎么在代码中调用ffmpeg的命令

ffmpeg是一个多平台多媒体处理工具,处理视频和音频的功能非常强大。目前在网上搜到的iOS上使用FFMPEG的资料都比较陈旧,而FFMPEG更新迭代比较快; 且网上的讲解不够详细,对于初次接触FFMPEG的新手(例如我)来说确实不太好使用。为了防止忘记,这里对iOS下使用FFMPEG做一个总结。

1. FFMPEG层次结构的简单理解
要使用FFMPEG,首先需要理解FFMPEG的代码结构。根据志哥的提示,ffmpeg的代码是包括两部分的,一部分是library,一部分是tool。api都是在library里面,如果直接调api来操作视频的话,就需要写c或者c++了。另一部分是tool,使用的是命令行,则不需要自己去编码来实现视频操作的流程。实际上tool只不过把命令行转换为api的操作而已。

2. 预热-在mac os下使用ffmpeg
在mac os下使用ffmpeg比较简单,可以直接使用命令行来操作。首先安装ffmpeg,这里默认系统已经安装好brew,只需要在终端上输入:
brew install ffmpeg
等待安装结束即可。
安装结束后,尝试以下命令:
ffmpeg -i input.mp4 output.avi
如果能顺利转换,表明安装成功

3. 编译能在iOS下使用的FFMPEG library库
这一步是编译1所说的library,编译好之后可以调用FFMPEG的api。网上有一些方法,但都要自己手动编译,稍显复杂而且比较陈旧。按照app store的需求,编译出来的包还必须支持arm64。我在万能的github中找到一个能够"一键编译"的脚本,地址如下:
https://github.com/kewlbear/FFmpeg-iOS-build-script
而且写这个脚本的歪果仁挺好人,更新很及时,已经更新到了最新的2.5.3版本。下载下来,只有一个build-ffmpeg.sh脚本文件。在终端中转至脚本的目录,执行命令:
./build-ffmpeg.sh
脚本则会自动从github中把ffmpeg源码下到本地并开始编译。
编译结束后,文件目录如下:

其中,ffmpeg-2.5.3是源码,FFmpeg-iOS是编译出来的库,里面有我们需要的.a静态库,一共有7个。
执行命令:
lipo -info libavcodec.a
查看.a包支持的架构,这几个包都支持了armv7 armv7s i386 x86_64 arm64这几个架构,这个脚本果真是业界良心啊~~~

4.在xcode中引入FFMPEG library库
新建工程,把上面编译好的FFmpeg-iOS拖到xcode工程中,添加一个头文件引用

#include "avformat.h"
添加一个api语句:

av_register_all();
添加一个空的类,把执行文件.m后缀改为.mm,开启混编模式。
添加相应的framework,包括avfoundation和coremedia。
运行工程,如果没有报错,则表明编译成功。

5.在xcode项目中使用命令行
执行到第4步,已经可以使用library库了。但是如果要对视频进行操作,还是需要手动写很多代码去调用api,工作量较大,自然不如直接写命令行方便。为了命令行能够在xcode工程中使用,还需要做以下工作:
(1)添加源码中的tools,具体文件包括:


(2)添加Header Search Paths
在target--build setting中搜索Header Search Paths,并在Header Search Paths下面添加源码ffmpeg-2.5.3和scratch的路径。
(3)修改ffmpeg.h和ffmpeg.c源码

如果此时run这个工程,则会报错,原因是工程里面有2个main函数,此时处理方法为:
在ffmpeg.h中添加一个函数声明:
int ffmpeg_main(int argc, char **argv);
在ffmpeg.c中找到main函数,把main函数改为ffmpeg_main。
(4)调用命令行范例
添加头文件:#import "ffmpeg.h"
调用命令行
int numberOfArgs = 16;
char** arguments = calloc(numberOfArgs, sizeof(char*));

arguments[0] = "ffmpeg";
arguments[1] = "-i";
arguments[2] = inputPath;
arguments[3] = "-ss";
arguments[4] = "0";
arguments[5] = "-t";
arguments[6] = rationChar;
arguments[7] = "-vcodec";
arguments[8] = "";
arguments[9] = "-acodec";
arguments[10] = "aac";
arguments[11] = "-strict";
arguments[12] = "-2";
arguments[13] = "-b:a";
arguments[14] = "32k";
arguments[15] = outputPath;

int result = ffmpeg_main(numberOfArgs, arguments);
其中inputpath和outputpath是文件路径。经测试,这两个路径不支持asset-library://协议和file:// 协议,所以如果是要用相册的文件,我目前的解决办法是把它拷贝到沙盒里面。

6. 改关闭进程为关闭线程
如果顺利进行到了第5步,在app中是能够用命令行处理视频了,但会出现一个问题,app会退出。经肖大神提醒,发现了命令行执行完毕之后会退出进程。而iOS下只能启动一个进程,因此必须改关闭进程为关闭线程,或者直接把关闭进程的方法给注掉。

在ffmpeg.c中可以看到,执行退出进程的方法是exit_program,定位到了cmtils.c中执行了c语言的exit方法。这里我将它改为了pthread_exit(需要添加#include 头文件)。在xcode项目中使用时,则可以用NSThread来新开一个线程,执行完毕之后,把线程关闭了即可。再使用NSThreadWillExitNotification通知,即可监听线程退出的情况。

7. 修复ffmpeg.c里面的一个bug
在实际项目中,可能需要多次调用命令行,但在多次调用命令行的过程中,发现ffmpeg.c的代码中会访问空属性导致程序崩溃。逐步debug后发现,很多指针已经置空了,但它们的计数却没有置零,不知道是不是ffmpeg.c的一个bug。修复方法如下:在ffmpeg_cleanup方法下,将各个计数器置零,包括:
nb_filtergraphs
nb_output_files
nb_output_streams
nb_input_files
nb_input_streams
置零之后,重复使用ffmpeg_main方法一切正常。

8. 如何让FFmpeg在iOS上完美编译

找到问题了编译的时候首先要连接libx264 ,le-libx264 --enable-gpl --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib 然后要打开这个编码器--enable-encoder=libx264,我就是这一步搞错了一直找不到,我在编译的时候禁掉了所有的编码器,终于可以继续走下去了 查看原帖>>

9. 如何编译出在iOS设备上运行的ffmpeg静态库

分什么支持库。 如果你要h264编码。那你必须下载x264.然后 configure时候 指定一下。 否则不会出错。 直接configure make make install good luck to you.

热点内容
如何设置强缓存的失效时间 发布:2025-05-19 15:21:28 浏览:695
winxp无法访问 发布:2025-05-19 15:19:48 浏览:947
文件预编译 发布:2025-05-19 15:14:04 浏览:643
怎么在服务器上挂公网 发布:2025-05-19 15:14:02 浏览:272
济南平安e通如何找回密码 发布:2025-05-19 14:56:58 浏览:176
安卓手机如何找到iccid码 发布:2025-05-19 14:46:51 浏览:227
编译的内核为什么那么大 发布:2025-05-19 14:45:21 浏览:179
什么控制压缩 发布:2025-05-19 14:28:13 浏览:931
网络服务器忙指什么 发布:2025-05-19 14:28:10 浏览:189
服务器有外网ip 发布:2025-05-19 14:02:02 浏览:833