下固件网 http://www.XiaGuJian.com - 专注于免费技术分享的网站!

下固件网-XiaGuJian.com,计算机科技

当前位置: 主页 > 安防报警 > 安防技术 >

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

软件大小:未知 发布时间:2022-12-08 刷新次数:
内容详情
一、简介FFmpeg是一个集录制,转换,音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。由于ffmpeg是基于linux开发的,源代码和windows下最常见的visualstudio提供的c/c++编译器不兼容,因此不能直接使用msvc++编译,想要使用ffmpeg,需要在windows下配置一个类似Linux的编译环境,并将ffmpeg编译为二进制库以后,再利用其进行进一步开发。目前,windows下可直接使用的最新版本是由ffmpeg工程组,于2008年4月份发布的ffmpegfullsdkv3.2。该sdk尽可能的集成了更多的编解码器。在应用中,使用该开发包存在2个缺陷,第一,该sdk编译基于ffmpegr12790,编解码效率上,当前已经有了较大的提升;第二,该开发包包含了很多不需要的编解码器,需要尽可能减少开发包的体积及关联的库的个数。基于以上需求,需要自己编译出windows下可用动态库及静态库。使用到的库文件有4个,libavcodec,libavformat,libavutil,libswscale,其中库libavcodec,libavformat用于对媒体文件进行处理,如编解码;libavutil是一个通用的小型函数库,该库中实现了CRC校验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能,libswscale主要用于图像格式转换及缩放。因效率的需要,我们选择了ffmpeg-mt版本,同时通过配置编译尽量减少相关文件的体积。网上类似编译过程说明较多,但实际编译过程中碰到一些问题,这些问题的解决花费了不少时间,本文档对这一过程进行记录,以便后续维护及学习。二、编译环境搭建windows下ffmpeg编译环境有多种可选择方案。这里我们使用MinGW+MSYS。1.下载mingw+msys并安装http://sourceforge.net/projects/mingw/mingw,默认安装,在choosecomponents时选择g++compiler及MinGWMakeMsys,默认安装,Doyouwishtocontinuewiththepostinstall【yn】,y!Doyouhavemingwinstalled?【yn】,yWhereisyourmingwinstallation?C:/mingw在c:/mingw/1.0/msys.bat的第一行添加E:\ProgramFiles\MicrosoftVisualStudio9.0\VC\bin\vcvars32.bat2.编译将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:line248:pr:commandnotfound这个需要从coreutils-5.97中提取pr.exe,拷贝至c:/msys/1.0/bin然后会提示:Error:can’tfindpthreadslibrary这个需要通过下载pthreadsGC2-static-2.9.x-gcc42.tar.bz2(静态连接),减压缩至c:\mingw\mingw32中解决从其他版本ffmpeg中提取libswscale至当前文件夹内将sdl-devel-1.2.14-mingw32.tar.gz减压缩至c:\mingw3.目标文件生成通过上述过程,生成的是动态库,对应的库有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.alibmingwex.alibpthreadGC2.aWs2_32.lib。三、编译选项及注意项1.gcc版本,gcc版本过低可能导致运行错误2.Pthread库,最好使用最新版静态库,版本过低会有编译错误3.碰到问题,可以通过google搜索相关错误说明,这个过程需要有足够的耐心。
微信公众号
获取资料
★下载时请注意网站提示!如未成功下载勿关闭页面并联系网站客服。
重要说明

1.浏览本站前务必阅读并知晓本站服务条款点击阅读
2.严禁将本站分享内容用于非法用途,或以任何形式的传播,造成损失由使用人承担一切后果.
3.本站网友等分享的一些资源仅供无商业目的得交流学习之用,版权规所有权人所有.

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
昵称: 验证码:点击我更换图片
栏目列表
扫码关注免费咨询海量资料每日推送
下固件网公众号