这篇文章是以前工作的一些实际经验总结,这里给大家分享一下,顺便做了一下记录以备以后使用时参考,本文(记录)与目前网上很多关于ffmpeg的文章相比有两个特点:
本文将分篇来完成,每篇只力求把基本和重要的点讲述清楚,其他细节和不重要的就不详细描述,具体真实应用在此基础上展开细化应该不难实现一个基本基于ffmpeg的嵌入式播放器的需求。文章具体分篇如下:
一、虚拟机安装
由于是在自己家里,不是工作环境,电脑还是装的windows7系统,于是开始安装虚拟机,我平时一直都喜欢用VMWare这个虚拟机,上次买了新电脑后一直都没有安装,这次必须先安装上。先是安装了最新的VMWare Workstation 11 + Ubuntu14.04,发现跑起来巨慢无比,难道是我的电脑落伍了?没有办法,也不想去折腾这个事情,还是老老实实换了一个VMWare Workstation 10.0.1 build-1379776 + Ubuntu-12.04.4-alternate-i386,最好跑起来还凑合。具体虚拟机和Ubuntu的安装过程就不详述了,网上文章一大堆。
二、配置并编译
下载最新版本的ffmpeg,目前稳定版本是ffmpeg-2.6.1。进入虚拟机在windows共享目录上解压:
配置:
然后进行make编译,最后出现错误:
原来忽略了直接在windows的共享目录中,解压到Linux目录中便不会出现这个问题了。这是因为在编译动态库时,会生成链接文件,在windows下会失败。当然如果我们编译的不是共享库,而是静态库,也不会出现这个问题,因为没有Linux的链接文件。
在Linux目录下,编译成功,生成我们的动态库:
这样我们生产了我们需要的库和头文件。
大家可能糊涂了,我现在是在pc上编译的,不能用于嵌入式设备上。这个我知道,没有办法,现在我已经没有以前的那些ARM的编译环境。大家如果是在实际的交叉环境下,配置ffmpeg的configure时指定交叉编译参数,估计大概如下面的配置:
./configure --prefix=./install --disable-static --enable-shared--enable-gpl --enable-pthreads --cross-prefix=arm-none-linux-gnueabi---enable-cross-compile --target-os=linux --extra-cflags="-mcpu=arm9 -W-Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -O2 -Wall"--arch=armv4l --cpu=arm9
根据项目的具体需求,比如用嵌入式硬件解码的话,decoder,encoder等等很多都不需要编译进去,对于不需要支持的container,也可以在配置里面进行”私人定制“,定制方法请输入
./configure --help
进行查看,网上也有很多可查,这些就是根据具体的环境修改了。这里就不多说,限于环境,本文只有在PC上来讲解,希望读者见谅。