官网对FATE的介绍
FATE(FFmpeg Automated Testing Environment): ffmpeg回归测试的套件以及提供了一种在服务器上对测试结果进行聚合和展示的方式。
包含3部分内容:
FFmpeg公开服务器的测试结果: http://fate.ffmpeg.org/
执行下面的命令
会打印下面这些信息:
在FATE中有很多测试,有些测试是自包含的,有些测试还需要额外的资料,在FFmpeg中称之为SAMPLES,可以用下面的方法获取SAMPLES。
执行完整的Fate测试
执行指定的一些Fate测试case,例如
fate-filter-scale500的测试用例的定义
为了看fate-run.sh中每条指令的执行过程,我们用bash -x来跑这个脚本,如下所示。
根据上述命令行输出,最终会找到下面的关键脚本:
还是从上述命令行输出可以看到,eval这行脚本展开后为:
用eval启用的命令,被shell直接当做一条命令处理,无法看到内部的展开情况。作为一个快速方法,我们直接修改脚本中的eval行如下所示。
上述命令行输出很长,大部分篇幅是用来设置最终的ffmpeg的命令行参数,最后得到的命令行参数如上所示(两行省略号之间的那一行)。回顾一下,其实,我们前面在执行 make V=2 fate-filter-scale500 看到的最后一行输出,和这里看到的是相同的。而倒数第二行的e7d6...这一串字符则是ffmpeg的输出结果。我们也可以直接在命令行执行ffmpeg程序,得到相同的结果。
上述ffmpeg命令行参数的最后是-f nut md5:,表示将结果做md5的输出,输出一个字符串。会与/tests/ref/fate中的值进行对比。
在filter-video.mak 中,变量CMD
测试结果判断
回到fate-run.sh,再看一下eval行。
不管是md5输出、crc输出还是rawvideo输出,都会被重定向到outfile文件内容和参考文件内容比较,得出测试是pass还是fail的结论。一般来说,参考文件被保存在目录ffmpeg/tests/ref/fate/下。而对于rawvideo输出,情况略有不同。
有了crc和md5后,为什么还要rawvideo?有些处理过程中涉及到了float运算,或者frame的格式就是float相关的,那么,由于不同架构CPU的输出结果在浮点数 *** 作上会略有不同,而FFmpeg是跨平台支持诸如X86、ARM、PowerPC等多种CPU的,我们就无法用crc或者md5这种bit-exact的方法进行比较了,只能采用基于rawvideo的方式进行比较,并且允许存在一定的偏差。在FATE中,可以用oneoff的方法进行rawvideo的比较,在filter-video.mak文件中差不多可以这样写:
在fate-run.sh中,oneoff最终会调用tiny_psnr,如下所示。大致意思就是根据filter-video.mak文件中的参数设置,对当前测试得到的rawvideo文件和参考文件做个比较,判断两者是否相同。
理解FFmpeg Fate脚本需要一些基础:
1、下载ffmpeg。下载网址:http://www.ffmpeg.org/download.html
2、解压缩
tar -zxvf ffmpeg-2.0.1.tar.gz
3、配置,生成Makefile
./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg
如果执行结果不对,可以根据提示信息,并查看帮助,解决问题
./configure --help
4、编译安装
make
make install
5、安装之后在/usr/local/ffmpeg会看到有三个目录
bin 执行文件目录
lib 静态,动态链接库目录
include 编程用到的头文件
为了防止执行程序找不到库文件,
可以将/usr/local/ffmpeg/lib目录设置到LD_LIBRARY_PATH环境变量,
或者查看/usr/local/ffmpeg/lib下所有的链接,并在/usr/lib下建立同样的链接。如下。
ln -s /usr/local/ffmpeg/lib/libavcodec.so /usr/lib/libavcodec.so
ln -s /usr/local/ffmpeg/lib/libavdevice.so /usr/lib/libavdevice.so
ln -s /usr/local/ffmpeg/lib/libavfilter.so /usr/lib/libavfilter.so
ln -s /usr/local/ffmpeg/lib/libavformat.so /usr/lib/libavformat.so
ln -s /usr/local/ffmpeg/lib/libavutil.so /usr/lib/libavutil.so
ln -s /usr/local/ffmpeg/lib/libswresample.so /usr/lib/libswresample.so
ln -s /usr/local/ffmpeg/lib/libswscale.so /usr/lib/libswscale.so
ln -s /usr/local/ffmpeg/lib/libavcodec.so /usr/lib/libavcodec.so.55
ln -s /usr/local/ffmpeg/lib/libavdevice.so /usr/lib/libavdevice.so.55
ln -s /usr/local/ffmpeg/lib/libavfilter.so /usr/lib/libavfilter.so.3
ln -s /usr/local/ffmpeg/lib/libavformat.so /usr/lib/libavformat.so.55
ln -s /usr/local/ffmpeg/lib/libavutil.so /usr/lib/libavutil.so.52
ln -s /usr/local/ffmpeg/lib/libswresample.so /usr/lib/libswresample.so.0
ln -s /usr/local/ffmpeg/lib/libswscale.so /usr/lib/libswscale.so.2
这时就需要在/etc/ld.so.conf下面加一行/usr/local/ffmpeg/lib,保存过后ldconfig一下,
这时就需要在/etc/ld.so.conf下面加一行/usr/local/MySQL/lib,保存过后ldconfig一下,
6、编译测试程序
gcc -o ffmpegtest ffmpegtest.c -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavcodec -lavtuil
7、执行程序
./ffmpegtest
或直接执行/usr/local/ffmpeg/lib目录下的./ffmpeg进行测试。
开发环境: WINDOWS7 32bit MINGW eclipse juno cdt 1、首先你要编译好FFMPEG, a) 方法一:可以去官网下载源码,用MINGW编译(编译时记得支持H264,当然,事先得下载并编译好libx264,视频技术论坛里有很多介绍) b) 方法二:更加省心省力的方...欢迎分享,转载请注明来源:内存溢出
评论列表(0条)