原创 ffmpeg 配置与编译

2009-12-2 16:49 6310 3 4 分类: MCU/ 嵌入式

本文标签(Tag)




ffmpeg 配置 编译

1 ffmpeg介绍
  
ffmpeg是音视频的分离,转换,编码解码及流媒体的完全解决方案,其中最重要的就是libavcodec库。它被mplayer或者xine使用作为
解码器。还有,国内比较流行的播放器影音风暴或MyMPC的后端ffdshow也是使用ffmpeg的解码库的。
 
    ffmpeg软件包经编译过后将生成三个可执行文件,ffmpeg,ffserver,ffplay。其中ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。
 
   
ffmpeg
中有五个库文件,libavcodec,libavformat,libavutil,libswscale,libpostproc,其中库
libavcodec,libavformat用于对媒体文件进行处理,如格式的转换;libavutil是一个通用的小型函数库,该库中实现了CRC校
验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能;libswscale,libpostproc
暂时不知道何用。
 
2 ffmpeg下载
    最新的ffmpeg可以通过svn下载,SVN辅助的软件有:
    SubVersion,从 http://subversion.tigris.org/ 下载,支持linux。
    TortoiseSVN,从 http://tortoisesvn.tigris.org/ 下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便。
 
    subversion安装,记住最好之前装过apr和apr-util,在apache.org网站能下到
    wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
    tar zvxf subversion-1.3.2.tar.gz
    cd subversion-1.3.2
    ./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/
    make
    make install
    如果安装了FC6,它已经带了svn,不用装了。
 
    ffmpeg的下载:我们就可以通过svn命令获取最新的ffmpeg,命令如下:
    svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
 
3 ffmpeg支持库的安装
* xvid
    xvid的获取地址如下: http://www.xvid.org/
    wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz
    配置编译
    for x86
 #./configure --prefix=/usr/local
 #make
 #make install
    for arm
 #CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/arm-linux --build=i686-pc-linux --host=arm-linux --target=arm-linux
 #make
 #make install
 
* x264
    x264的获取地址如下: svn co svn://svn.videolan.org/x264/trunk x264
    配置编译
    for x86
 #./configure --enable-shared --prefix=/usr/local
 #make
 #make install
    for arm
 #CC=arm-linux-gcc ./configure --enable-pthread --enable-shared --host=arm-linux --prefix=/usr/local/arm/arm-linux
 #make
 #make install
 
* 支持mp3
    lame的获取地址如下: http://lame.sourceforge.net/index.php
    配置编译
    for x86
 ./configure --enable-shared --prefix=/usr/local
 
* 支持Ogg Vorbis:
 
* AC3和dts编码的支持
    libdts编译参数
./configure --prefix=/usr
make
make install
 
* mpg4 aac格式支持,
    如果ffserver服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行,下载请到http://www.audiocoding.com/modules/mydownloads/http://prdownloads.sourceforge.net/faac
    FAAD2的编译
cd faad2
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
    faac的编译
cd faac
chmod +x bootstrap
./bootstrap
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
    在编译ffmpeg,在configure时加上--enable-amr_nb --enable-faad --enable-faac参数。
 
* 支持3gp格式,
    这也是现在好多手机支持的格式,所以也得支持编译, 编译的时候加上--enable-amr_nb --enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一些编译3gp所需得文件。
源码网址:http://www.3gpp.org/ftp/Specs
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
解压以后把里面的文件都拷贝到libavcodec/amrwb_float
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr_float
 
* ffmpeg支持VC1格式
   
微软ASF格式的三个版本,WMV1,WMV2,WMV3分别对应MediaPlayer的版本7,8和9,所以很多时候会称VC1为WMV3或
WMV9,都是它了,有时候在代码里,也能看到称呼它为VC9的。因为微软还没有正式公开这种格式,所以当前对VC1的支持还很不完善。本文基本是根据
Multimedia Mike 的一篇博客翻译和完善而来。
    (1) 首先要下载 SMPTE VC-1 reference decoder,这个组织是要收费的,可以从这里下载免费的。
    (2) 在ffmpeg目录下的libavcodec目录下面,建立目录libvc1。
    (3) 将VC1_reference_decoder_release6/decoder/目录中的*.c和*.h文件全部copy到libvc1目录下。
    (4) 将VC1_reference_decoder_release6/shared/目录中的*.c和*.h文件全部copy到libvc1目录下。
    (5) 将 libvc1-makefile.txt放到libvc1下的Makefile文件。
    (6) 将smpte-vc1.c文件放到libavcodec目录下。
    (7) 修改libavcodec目录下的vc9.c,将文件最后的wmv3_decoder这个AVCodec的structure,用#if 0和#endif包含起来,也就是使它失效了。
    (8) 修改libavcodec目录下的allcodecs.c,将register_avcodec(&wmv3_decoder)上下的注释去掉,使它发挥作用。
    (9) 修改libavcodec目录下的Makefile,把OBJS的列表中加入smpte-vc1.o。
    (10)修改ffmpeg主目录下的Makefile文件,把-L./libavcodec/libvc1 -lvc1$(BUILDSUF)加入到FFLIBS后面。
    (11) 进入ffmpeg/libavcodec/libav1,执行make
    (12) 到ffmpeg主目录下,执行config;make;make install。config时根据实际情况带参数。
 
* 采用ffmpeg转码制作FLV文件的方法
   
采用ffmpeg转码制作FLV文件,和转码成其它媒体类型的重要差别是一定要有lame库支持,因为FLV的声音编码采用mp3格式,非lame这个东
东不行。编译ffmpeg中加入lame库真是一场灾难,特别在windows下,很多参数都不能发挥作用,最后直接手工copy和改一些文件,记录如
下:
    (1) 如果在Windows下编译,第一步当然是下载MinGW和MSYS来装上了。到http://mingw.sourceforge.net/去下载最新版的MinGW-5.0.2.exe和MSYS-1.0.11-2004.04.30-1.exe。
    (2) 先安装MinGW,直接运行MinGW-5.0.2.exe安装,选择目录,譬如选择D:\MinGW为安装目录。安装时需要选择gcc和make模块,安装文件本身很小,会从网上下载模块来安装。
   
(3) 然后安装MSYS,也是直接运行MSYS-1.0.11-2004.04.30-1.exe安装。安装目录一般选择D:\MinGW\bin
\1.0。,安装过程会询问刚才安装MinGW的目录,输入D:\MinGW,其它都回答'Y'就搞定了。如果不清楚,可以看这个图片效果。
    (4) 运行MSYS,桌面上有个图标,双击就运行了,运行结果是一个模拟unix的命令窗口,后面的编译都在这种状态下进行。前面4步在linux不需要。
    (5) 到http://lame.sourceforge.net/去下载最新版的lame-3.97b2.tar.gz,copy到你认为合适的地方,解压后进入lame解压出来的目录中。执行
        ./configure --prefix=PREFIX
        make
        make install
   
(6)
就把编译出来的include下的lame目录copy到/usr/include目录下,把lib下的几个库文件都copy到/usr/lib目录下。
这里注意有个变化,如果只copy lib目录下的静态库到/usr/lib下,就是只copy
libmp3lame.a文件,编译出来的ffmpeg最终就不会对libmp3lame的动态库有依赖关系,这是因为编译首先找动态库,动态库没有才找
静态库。如果不做这个copy,后面编译ffmpeg时无论如何指定参数,都会报错LAME not found,不知道是哪里的bug。
    (7) 从http://ffmpeg.mplayerhq.hu/取得最新的ffmpeg,现在自由软件都大量采用SVN了,要先装一个SVN,可以去http://tortoisesvn.tigris.org/下载windows版的SVN,去http://subversion.tigris.org/下载linux版的SVN。SVN如何编译安装这里就省略了。
    (8) 如果在windows下,打开解压后的ffmpeg目录下的Makefile文件,在FFLIBS的那一行后面加上-lmp3lame$(BUILDSUF)。这个也不知道是哪个bug引起的,搞了好长时间才搞出来,郁闷。Linux下不用这样。
 
4 ffmpeg的编译
 
    配置编译
    for x86
#./configure
--prefix=/usr --enable-gpl --enable-shared --enable-mp3lame
--enable-amr_nb --enable-amr_wb --enable-amr_if2 --enable-libogg
--enable-vorbis --enable-xvid --enable-a52 --enable-a52bin
--enable-faadbin --enable-dts --enable-pp --enable-faad --enable-faac
--enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay
make
make install
 
补充1:
关于3gp的编译,如果大家要编译--enable-amr_nb-fixed,那就不能跟--enable-amr_nb同时编译,我不大清楚这两者到底有什么区别,似乎fixed是修正版,管他呢,编译的方法:
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr目录下
 
修改libavcodec/amr/makefile 找到CFLAGS = -Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) 换成CFLAGS = -Wall -I.
 
$(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO
 
整体编译参数就是
#./configure
--prefix=/usr --enable-gpl --enable-shared --enable-mp3lame
--enable-amr_nb-fixed --enable-amr_wb --enable-amr_if2 --enable-libogg
--enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-dts
--enable-pp --enable-faad --enable-faadbin --enable-faac --enable-x264
--enable-pthreads --disable-ffserver --disable-ffplay
make
make install
 
 for x86的简易配置
#./configure --prefix=./install --disable-shared --enable-pthreads --enable-libx264 --enable-libxvid --arch=i686 --enable-gpl
#make
#make install
 
    for arm
    配置编译
#./configure
--prefix=/home/zht/redhatzht/sources/image-colletct/ffmpeg/install
--enable-static --disable-shared --enable-libx264 --enable-libxvid
--cross-compile --cc=arm-linux-gcc --arch=arm --enable-gpl
--disable-strip --disable-network --disable-ipv6 --disable-vhook
--disable-audio-beos --disable-audio-oss --disable-mpegaudio-hp 
--enable-pthreads --enable-small --disable-parsers --disable-debug
#make
#make install
 
注意:
 
(1)“/home/zht/redhatzht/sources/image-colletct/ffmpeg”为ffmpeg源码所在目录。
(2)“/usr/local/arm”为arm-linux-gcc交叉编译器所在目录。
(3) 如果库文件安装在/usr/local/lib目录中导致配置失败,可以在/etc/ld.so.conf文件中添加/usr/local/lib目录,然后执行#ldconfig。
    x86上的ldconfig不能在arm上运行,arm上的ldconfig工具是在建立交叉编译器时,编译glibc是产生的,可以拷贝到arm-linux中。
(4) 本文大部分内容来自网络,其中xvid,x264的库,我亲手安装过,ffmpeg的配置编译for x86的简易配置,for arm,我亲手配置编译过,并在x86,arm上可用,编译配置都是采用静态库。

文章评论1条评论)

登录后参与讨论

用户190932 2010-3-3 15:45

我有的是ubuntu9.10,arm是2440, 编译x264时执行configure时出错了,提示找不到汇编工具, 请问怎样解决?
相关推荐阅读
用户461645 2010-05-04 18:22
TI的davinci和omap资源--转帖,也是为了方便自己
TI网站资源,建议大家注册一个my.ti.com,方便下载一些软件开发工具和资料 TI中文主页: http://focus.ti.com.cn/cn/tihome/docs/homepage.tsp ...
用户461645 2010-03-06 16:49
把控制台(console)交给LCD
这两天一直想让我的开发板挣脱PC机的控制,把控制台移到LCD上去,然后用USB键盘作为输入,在LCD上构成一个终端。此刻有了一点点进展,于是把她记录下来,虽然我的开发板现在还不能用USB键盘作为输入设...
用户461645 2010-03-01 10:52
内核(2.6.14) + 根文件系统 + Qt4 移植 for S3C2410
TARGET<?XML:NAMESPACE PREFIX = O />CPU:   S<?XML:NAMESPACE PREFIX = ST1 />3C2410XSDRAM: ...
用户461645 2010-02-26 16:56
windows xp平台安装Qt4.5开发环境
测试环境debian squeeze系统上virtualbox3.0.8中的windows xp sp3Qt的官方站点现在是http://qt.nokia.com/下载sdk在官方站点选择LGPL/F...
用户461645 2010-02-24 11:58
承接linux开机logo制作
针对freescale 的I.mx27项目,要去掉屏幕的光标,可以直接在make menuconfig中去掉drivers---->Graphis support----->console...
用户461645 2010-02-23 17:09
不用启动盘的安装方法
不用制作软盘。空出一个大于3g的空间,格式为fat32,最好是最后一个分区。确保md5正确后,把iso文件放到c盘下,不要放到任何文件夹中,直接放到根目录下。把dosutils解到根目录下,再把vml...
我要评论
1
3
关闭 站长推荐上一条 /2 下一条