文档章节

移植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

没有更多内容

加载失败,请刷新页面

加载更多

Idea

command + E : 打开最近编辑过的文件 command + O : 打开指定文件 option + enter: 补全变量 实现接口 格式化字符串 System.out.printf("realName:" + u.getRealName() + "email: " + u.get...

xpttxsok
20分钟前
1
0
FTP 协议 1.0

自己制作的FTP协议:

Explorer0
31分钟前
2
0
Android 通过DrawableInflater加载自定义Drawable

一、Drawable 在Android系统张,图形图像的绘制需要在画布上进行操作和处理,但是绘制需要了解很多细节以及可能要进行一些复杂的处理,因此系统提供了一个被称之为Drawable的类来进行绘制处理...

IamOkay
42分钟前
1
0
灵活无处安放,所以选择流浪....《漆黑的空间》& 《灰色轨迹》

灵活无处安放,所以选择流浪....《漆黑的空间》& 《灰色轨迹》

yizhichao
49分钟前
1
0
Kafka+Flink 实现准实时异常检测系统

1.背景介绍 异常检测可以定义为“基于行动者(人或机器)的行为是否正常作出决策”,这项技术可以应用于非常多的行业中,比如金融场景中做交易检测、贷款检测;工业场景中做生产线预警;安防...

架构师springboot
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部