行业产品

  • 行业产品

北京汉邦高科数字技术股份有限公司


当前位置:北京汉邦高科数字技术股份有限公司>技术文章>视频解码中用到的ffmpeg交叉编译技巧

经营模式:生产厂家

商铺产品:208条

所在地区:北京北京市

联系人:汉邦高科 (助理)

技术文章

视频解码中用到的ffmpeg交叉编译技巧

阅读:724发布时间:2014-4-24

一、简介

FFmpeg是一个集录制,转换,音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。

由于ffmpeg是基于linux开发的,源代码和windows下zui常见的visual studio提供的c/c++编译器不兼容,因此不能直接使用msvc++编译,想要使用ffmpeg,需要在windows下配置一个类似Linux的编译环境,并将ffmpeg编译为二进制库以后,再利用其进行进一步开发。

目前,windows下可直接使用的版本是由ffmpeg工程组,于2008年4月份发布的ffmpeg full sdk v3.2。该sdk尽可能的集成了更多的编解码器。

在应用中,使用该开发包存在2个缺陷,*,该sdk编译基于ffmpeg r12790,编解码效率上,当前已经有了较大的提升;第二,该开发包包含了很多不需要的编解码器,需要尽可能减少开发包的体积及关联的库的个数。基于以上需求,需要自己编译出windows下可用动态库及静态库。

使用到的库文件有4个,libavcodec,libavformat,libavutil,libswscale,其中库libavcodec,libavformat用于对媒体文件进行处理,如编解码;libavutil是一个通用的小型函数库,该库中实现了CRC校验码的产生,128位整数数学,zui大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能,libswscale主要用于图像格式转换及缩放。因效率的需要,我们选择了ffmpeg-mt版本,同时通过配置编译尽量减少相关文件的体积。

网上类似编译过程说明较多,但实际编译过程中碰到一些问题,这些问题的解决花费了不少时间,本文档对这一过程进行记录,以便后续维护及学习。

二、编译环境搭建

windows下ffmpeg编译环境有多种可选择方案。这里我们使用MinGW+MSYS。

1.     下载mingw+msys并安装

http://sourceforge.net/projects/mingw/

mingw,默认安装,在choose components时选择g++ compiler及MinGW Make

Msys,默认安装,

Do you wish to continue with the post install【yn】,y!

Do you have mingw installed?【yn】, y

Where is your mingw installation? C:/mingw

 

在c:/mingw/1.0/msys.bat的*行添加

E:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat

 

2.     编译

将ffmpeg-mt减压缩至c:\mysy\1.0\home\Administrator下

启动msys,

pwd确认当前路径

cd /home/administrator/ffmpeg-ffmpeg-mt

 

下载gcc-full-4.4.0-mingw32-bin-2.tar.lzma.tar

减压缩覆盖至c:\mingw,这里需要注意的是,如果gcc版本过低,可能导致解码报错!

 

在ffmpeg-ffmpeg-mt创建编译选项文件compile.sh

在该文件中添加

./configure --disable- static --enable- shared --enable-memalign-hack --disable-debug --disable-network --disable-mpegaudio-hp --disable-ffserver --disable-ffplay --disable-filters --disable-devices --disable-protocols --disable-demuxers --disable-muxers --disable-encoders --disable-parsers --disable-bsfs --enable-pthreads --enable-runtime-cpudetect --disable-decoders --enable-decoder=H264

运行compile.sh,这时会提示:./configure:line 248: pr: command not found

这个需要从coreutils-5.97中提取pr.exe,拷贝至c:/msys/1.0/bin

然后会提示:Error: can’t find pthreads library

这个需要通过下载pthreadsGC2-static-2.9.x-gcc42.tar.bz2(静态连接),减压缩至c:\mingw\mingw32中解决

 

从其他版本ffmpeg中提取libswscale至当前文件夹内

将sdl-devel-1.2.14-mingw32.tar.gz减压缩至c:\mingw

 

3.     目标文件生成

通过上述过程,生成的是动态库,对应的库有avcodec.dll/avcodec.lib/avcodec-xx.xx.xx.dll/avcodec-xx.dll/avcodec-xx.lib,另外三个库文件生成类似,选择所需对应dll及lib即可直接用于使用。

对于静态库的编译,仅需修改编译配置,将--disable- static --enable- shared更改为-- enable - static -- disable – shared即可。

生成静态库文件libavcodec.a/libavformat.a/libavutil.a/libswscale.a,用于windows下vc项目时,还需注意添加相关库文件: libgcc.a libmingwex.a libpthreadGC2.a Ws2_32.lib。

三、  编译选项及注意项

1.     gcc版本,gcc版本过低可能导致运行错误

2.     Pthread库,使用版静态库,版本过低会有编译错误

3.     碰到问题,可以通过google搜索相关错误说明,这个过程需要有足够的耐心。


智慧城市网 设计制作,未经允许翻录必究 .      Copyright(C) 2021 https://www.afzhan.com,All rights reserved.

以上信息由企业自行提供,信息内容的真实性、准确性和合法性由相关企业负责,智慧城市网对此不承担任何保证责任。 温馨提示:为规避购买风险,建议您在购买产品前务必确认供应商资质及产品质量。

会员登录

×

请输入账号

请输入密码

=

请输验证码

收藏该商铺

登录 后再收藏

提示

您的留言已提交成功!我们将在第一时间回复您~