文档章节

移植FFMPEG到VS2008系列之一

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:45
字数 1038
阅读 3
收藏 0

做音视频编解码的人都知道ffmpeg。然而,要想在windows上调试ffmpeg却不是一件容易的事情。之前也曾经把x264的代码移植到vs2008上面,具体可以参见我前面的文章。最近终于把ffmpeg的最新代码完全移植到vs2008环境中来。在移植过程中深深的感觉到codec的多样性,我虽然在codec领域工作了很多年,但是ffmpeg里面大多数codec甚至连名字都没有见过。下面把移植过程中需要注意的问题描述一下。


首先,必须要有坚强的毅力和决心。ffmpeg代码量超级大,其总共有3千多个文件,将近100w行代码。移植ffmpeg是一项体力很繁重的活,所以,如果你决定要做,就不要中途放弃。


其次,也是最重要的,就是要掌握方法。ffmpeg代码采用C99的语法,使得微软VS开发环境的不兼容导致产生大量的语法错误。其次,ffmpeg有些采用的linux下面的库也会使得windows上没法编译的问题。如何快速的修改c99语法成为移植ffmpeg的关键!


工欲善其事,必先利其器。通过正则表达式的强大功能,可以一定程度上解决这一问题。对于精通正则表达式的朋友们,完全可以用某种编程语言,例如python,perl等写若干个脚本语言,就可以很轻松的修改c99的语法为标准的c89的语法。这样只需要3,4天的时间完成这项任务。


而我花了将近2个礼拜的时间,其中调试bug花了3天。主要是对于正则表达式不是很在行,只是了解一些正则表达式的写法。也没有用某种编程语言来操作正则表达式的编程经验。我使用的正则表达式工具就是常见的文本编辑器UE。


1. 下载最新的ffmpeg源代码。

我是在github上下载的代码ffmpeg-master。当我把代码跑起来之后发现crash了,调试之后发现ffmpeg-master的版本在初始化的时候有几个bug导致的,对于不熟悉音视频编解码的朋友很难修改这些bug。后来我又下载的稳定的ffmpeg1.2的版本,一比较,发现有三分之一的文件不一样。大概看了下,不一样的地方大部分都不是很关键。我不知道ffmpeg-master的版本是介于1.1和1.2之间的还是高于1.2没有发布的版本,也许ffmpeg1.2的版本没有这些bug。但我已经在master版本中修改的差不多了,所以也没有必要在1.2的版本上重新改。建议大家下载稳定的ffmpeg1.2的版本。


2. 文件重命名。

    ffmpeg不同的文件夹下面有很多的文件名都是相同的,这在vs2008开发环境下会是个问题。所以,干脆把所以的文件名都重命名,例如可以都以某个文件夹的前缀。文件太多,不可能一个一个的改。以文件夹libavcodec下面的所有文件为例说明如下:

2.1 打开dos窗口,切换到libavcodec目录下面执行DOS命令:

dir *.c /b >>c_files.txt


2.2 UE打开c_files.txt,使用正则表达式执行替换操作,具体看下图:

         


         在查找什么方框里面输入的正则表达式为:(?m)(^[\w.]+)

         在替换为方框里面输入的正则表达式为:rename $1 av_codec_$1

         选中正则表达式 perl选项 不用勾选 只匹配整个词语和匹配大小写选项

       

          执行全部替换,保存文件。

2.3  把文件c_files.txt文件后缀改成批处理文件,即c_files.bat。运行这个批处理文件,这样libavcodec文件夹下面的所 有的文件都变成以av_codec_打头的文件了。


2.4  用同样的方法把其它文件夹下面的所有文件重命名。

    


      







本文转载自:http://www.cnblogs.com/celerychen/archive/2013/04/23/3588212.html

共有 人打赏支持
abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问
最简单的基于FFmpeg的移动端例子附件:Android 自带播放器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47056733 ===================================================== 最简单的...

雷霄骅
2015/07/25
0
0
最简单的基于FFmpeg的移动端例子:IOS 视频转码器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47072673 ===================================================== 最简单的...

雷霄骅
2015/08/01
0
0
最简单的基于FFmpeg的移动端例子附件:IOS自带播放器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47072861 ===================================================== 最简单的...

雷霄骅
2015/08/01
0
0
最简单的基于FFmpeg的移动端例子:IOS 推流器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47072519 ===================================================== 最简单的...

雷霄骅
2015/07/29
0
0
最简单的基于FFmpeg的移动端例子:IOS 视频解码器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47072257 ===================================================== 最简单的...

雷霄骅
2015/07/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

安装数据库 常见问题

数据库重置密码 如果MySQL数据库用户的密码设置过于简单,数据库在用户登录后会提示重置密码,并且不接受简单的密码。 提示需要重置密码: ERROR 1820 (HY000): You must reset your passwo...

狼王黄师傅
15分钟前
0
0
三种方式拿到反射的入口

public class a_1 { public static void main(String args[]) throws ClassNotFoundException { //三种方式拿到反射的入口 System.out.println(Class.forName("reflect.com.Son")); System.o......

南桥北木
27分钟前
1
0
Macbook 安装PhotoShop 总提示安装包损坏的问题

问题描述 今天在给Mac10.12安装Adobe Photoshop的时候一直提示Error The installation cannot continue as the installer file may be damaged. Download the installer file again.起初以为......

Carlyle_Lee
34分钟前
1
0
Java 帝国对 Python 的渗透能成功吗?哈哈

引子 Java 帝国已经成立20多年,经过历代国王的励精图治,可以说是地大物博,码农众多。 可是国王依然不满足,整天想着如何继续开拓疆土, 这一天晚上他又把几个重臣招来商议了。 IO大臣说:...

边鹏_尛爺鑫
今天
14
0
分布式事务解决方案框架(LCN)

什么是XA接口 XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口...

群星纪元
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部