ffmpegmac编译
❶ 如何让FFmpeg在iOS上完美编译
编译mac上基于ffmepg的软件需要先下载两个程序:iFrameExractor和ffmpeg编译步骤:1、在终端下:cd/iFrameExtractor/ffmpeg建议开始就执行sudo-s(获取权限命令)2、在终端下输入./configure--prefix=/iFrameExtractor/ffmpeg--libdir=iFrameExtractor/ffmpeg/lib--enable-gpl--enable-static--disable-shared--enable-swscale--enable-zlib--enable-bzlib--disable-ffmpeg--disable-ffplay--disable-ffserver--enable-pthreads3、执行make这里会有一堆的编译情况。注:最好先升级CommandLineTools,避免编译错误4、执行makeinstall。(执行完后到iFrameExtractor/ffmpeg/lib文件上去看看)出现个.a文件5、用xcode打开iFrameExractor工程,确认HeaderSearchPaths里有:"$(SRCROOT)/ffmpeg"路径。$(SRCROOT)表示工程路径。同时可以看到iFrameExractor工程下ffmpeg文件下的.a文件都不是红色的了。6、真机上编译(模拟器上i386,真机上是arm的,真机还分arm6和arm7以下是针对arm7的/configure--disable-doc--disable-ffmpeg--disable-ffplay--disable-ffserver--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='-archarmv7'--extra-ldflags='-archarmv7-isysroot/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk'--enable-pic7、执行make和makeinstall就有上面的几个.a文件,至此编译结束。
❷ 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版本了。
❸ 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回车后(这个不搞错了),按任意键退出即可。
2)安装MinGW
❹ 如何在MAC下编译出32位的ffmpeg库
你的系统应该是64位的,但是如果你的XCode也是64位的就有可能出错,XCode3.2以后的版本都是64位的,想编译成32位的,试试用XCode3.0
❺ 为什么ffmpeg只有windows和macox下的库没有linux的库
那只有那个和下侧库没有那个的酷,我觉得这个没有可能,还是因为厂家的问题吧,厂家没有给你完就都放就没有呗,你可以全的用不了那只有那个和下侧库没有那个的酷,我觉得这个没有可能,还是因为厂家的问题吧,厂家没有给你完就都放就没有呗,你可以全的用
❻ ios 怎么配置编译ffmpeg
IOS上编译ffmpeg需要先下载两个程序:iFrameExractor和ffmpeg
编译步骤:
1、在终端下: cd /iFrameExtractor/ffmpeg 建议开始就执行 sudo -s (获取权限命令)
2、在终端下输入 ./configure --prefix=/iFrameExtractor/ffmpeg --libdir=iFrameExtractor/ffmpeg/lib --enable-gpl --enable-static --disable-shared --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-pthreads
3、执行make 这里会有一堆的编译情况。
注:最好先升级Command Line Tools,避免编译错误
4、执行make install。 (执行完后 到iFrameExtractor/ffmpeg/lib文件上去看看)
出现 libavcodec libavdevice libavformat libavutil libswscale5个.a文件
5、用xcode 打开iFrameExractor工程,确认Header Search Paths里有:"$(SRCROOT)/ffmpeg"路径。 $(SRCROOT)表示工程路径。同时可以看到iFrameExractor工程下ffmpeg文件下的.a文件都不是红色的了。
6、真机上编译(模拟器上i386,真机上是arm的,真机还分arm6 和arm7 )
以下是针对arm7的
/configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --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
7、执行 make 和make install 就有上面的几个.a文件,至此编译结束。
❼ Mac OS X 64位 编译本地库失败,不知是否有兄弟有成功编译好的
首先在FFmpeg官网下载一个版本,在“FFmpeg Releases”一栏下选择一个版本:
http://ffmpeg.org/download.html
然后,直接进行解压。打开OS X的Terminal,使用cd命令进入该项目目录。
如果你的OS X使用了最新的XCode 4.3.x或更新版本,那么所有编译工具均以沙盒状态呈现,即没有注册到系统环境,因此不能直接通过命令行进行编译。此时需要进入
https://developer.apple.com/devcenter/mac/index.action
即Mac开发者主页。使用开发者帐号登陆(即便没有支付过99$成为iDP或mDP都没有关系),然后找到“Additional Downloads”一览,点击“View all downloads”。最后选择最新版本的“Command Line Tools for XCode”进行下载。
下载完后直接安装即可。
然后可以使用命令行进行编译。由于Apple现在已经弃用老陈的GCC而使用更为先进的LLVM CLang,因此我们可以直接使用CLang进行编译。我们可以先用命令——clang --version
来查看clang编译器的版本信息,并确定其有效性。
随后,我们输入命令——./configure --cc=clang --disable-asm
这里使用--cc选项来选择编译器使用clang;而--disable-asm用来禁止所有牵涉到汇编文件的汇编,因为Apple的LLVM自带的汇编器可能与GCC的默认风格有些不同。
成功后,我们再输入命令——make
最后再输入命令——sudo make install
输入登机密码即可。
最后会生成一个ffmpeg可执行文件在当前工程目录中。
❽ 如何在MAC上编译FFMpeg-CSDN论坛
你的系统应该是64位的,但是如果你的XCode也是64位的就有可能出错,XCode3.2以后的版本都是64位的,想编译成32位的,试试用XCode3.0
❾ 为什么ffmpeg只有windows和macox下的库没有linux的库
linux下可以使用包管理工具或者编译安装
比如apt yum等
编译安装使用源码
❿ MAC/iOS利用FFmpeg解析音视频数据流
利用FFmpeg解析音视频流,音视频流可以来自一个标准的RTMP的URL或者是一个文件. 通过解析得到音视频流,进一步就可以解码, 然后视频渲染在屏幕上,音频通过扬声器输出.
利用FFmpeg框架中libavformat模块可以通过函数 av_read_frame 解析出音视频流的音视频数据,如果直接使用FFmpeg硬解,仅需要解析到AVPacket即可传给解码模块使用,如果使用VideoToolbox中的硬解, 对于视频数据,还需要获取其NALU Header中的(vps)sps, pps以便后续使用.
使用流程
FFmpeg parse流程
下面的链接中包含搭建iOS需要的FFmpeg环境的详细步骤,需要的可以提前阅读.
iOS手动编译并搭建FFmpeg
导入FFmpeg框架后,首先需要将用到FFmpeg的文件改名为.mm, 因为涉及C,C++混编,所以需要更改文件名
然后在头文件中导入FFmpeg头文件.
注意: FFmpeg是一个广为流传的框架,其结构复杂,一般导入都按照如上格式,以文件夹名为根目录进行导入,具体设置,请参考上文链接.
2.1. 注册FFmpeg
一般在程序中的main函数或是主程序启动的代理方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中初始化FFmpeg,执行一次即可.
2.2. 利用视频文件生成格式上下文对象
C++音视频开发学习资料 :点击领取 音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
2.3. 获取Audio / Video流的索引值.
通过遍历format context对象可以从 nb_streams 数组中找到音频或视频流索引,以便后续使用
2.4. 是否支持音视频流
目前视频仅支持H264, H265编码的格式.实际过程中,解码得到视频的旋转角度可能是不同的,以及不同机型可以支持的解码文件格式也是不同的,所以可以用这个方法手动过滤一些不支持的情况.具体请下载代码观看,这里仅列出实战中测试出支持的列表.
音频本例中仅支持AAC格式.其他格式可根据需求自行更改.
使用AVPacket这个结构体来存储压缩数据.对于视频而言, 它通常包含一个压缩帧,对音频而言,可能包含多个压缩帧,该结构体类型通过 av_malloc() 函数分配内存,通过 av_packet_ref() 函数拷贝,通过 av_packet_unref(). 函数释放内存.
解析数据
int av_read_frame(AVFormatContext *s, AVPacket *pkt); : 此函数返回存储在文件中的内容,并且不验证解码器的有效帧是什么。它会将存储在文件中的内容分成帧,并为每次调用返回一个。它不会在有效帧之间省略无效数据,以便为解码器提供解码时可能的最大信息。
获取sps, pps等NALU Header信息
通过调用av_bitstream_filter_filter可以从码流中过滤得到sps, pps等NALU Header信息.
av_bitstream_filter_init: 通过给定的比特流过滤器名词创建并初始化一个比特流过滤器上下文.
av_bitstream_filter_filter: 此函数通过过滤buf参数中的数据,将过滤后的数据放在poutbuf参数中.输出的buffer必须被调用者释放.
此函数使用buf_size大小过滤缓冲区buf,并将过滤后的缓冲区放在poutbuf指向的缓冲区中。
注意: 下面使用new_packet是为了解决av_bitstream_filter_filter会产生内存泄漏的问题.每次使用完后将用new_packet释放即可.
可以根据自己的需求自定义时间戳生成规则.这里使用当前系统时间戳加上数据包中的自带的pts/dts生成了时间戳.
本例将获取到的数据放在自定义的结构体中,然后通过block回调传给方法的调用者,调用者可以在回调函数中处理parse到的视频数据.
获取parse到的音频数据
因为我们已经将packet中的关键数据拷贝到自定义的结构体中,所以使用完后需要释放packet.
parse完成后释放相关资源
C++音视频开发学习资料 :点击领取 音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
注意: 如果使用FFmpeg硬解,则仅仅需要获取到AVPacket数据结构即可.不需要再将数据封装到自定义的结构体中