本文介绍一个自己做的码流分析软件:VideoEye。为什么要起这个名字呢?感觉这个软件的主要功能就是对“视频”进行“分析”。而分析是要用眼睛来看的,因此取了“视频”和“分析”这两个词的英文,名之曰:VideoEye。这个软件是在自己毕业设计软件的基础上改的。能够对本地文件或者互联网视频流进行实时的码流分析。因为这个软件是自己一边学习视音频技术一边制作的,所以涵盖了比較全面的功能。在编写这个软件的过程中,自己也学会了非常多的视音频编解码方面的知识,以及MFC的知识。后来想想,与其自己保存在电脑里,不如开源出来与大家分享,或许能帮助正在学习视音频技术的人学习这方面的知识。软件源码中有大量的凝视,都是自己边学边记的笔记,十分方便理解和学习有关的知识。
开发环境为VC2010,软件界面使用下面类库:
界面:MFC
视音频编解码类库:FFMPEG
视频非压缩域数据分析:OpenCV
播放列表解析/导出:TinyXML
视音频播放:SDL
眼下还在完好过程中,预计还要不少的改动。
项目主页:
https://sourceforge.net/projects/videoeye
0.1測试版=================================
CSDN源码下载
http://download.csdn.net/detail/leixiaohua1020/7552669
CSDN编译好的可执行程序下载(眼下仅仅在本机上測过)
http://download.csdn.net/detail/leixiaohua1020/7552687
注:晕了,上面2个上传至CSDN的文件都缺失了3个OpenCV的Dll,编译或者执行的时候会提示找不到Dll。因为CSDN上传的资源没有提供删除功能,仅仅能再上传一个压缩包补齐相关的Dll。下面的Dll和其他Dll放到一起就能够了:
http://download.csdn.net/detail/leixiaohua1020/7555063
0.2測试版(2014.7.12)======================
相比于0.1測试版,做了下面几个部分的完好:
* 源码加入了对Unicode的支持
* 加入了两个宏定义"INT64_MIN INT64_MAX",在没有安装 Win7SDK的情况下,可能会出现找不到定义的情况。
* 改变了“收藏夹”的外观,改动了其展现视频地址的树形结构,使其美观一些。
* “单帧具体分析”界面添加了数据输出功能。能够将一帧视频码流的量化參数(Quantization Parameter),宏块类型(MacroBlock Type),运动矢量(Motion Vector),參考帧(Reference Frame)列表输出出来并存储为“.csv”格式的文件。
* 修正了“单帧具体分析”中运动矢量分析功能在分析MPEG4视频码流时候的一个BUG。
* 修正了“视频播放窗体”调整窗体大小的时候,会残留视频帧画面的BUG。
SourceForge上已经更新至0.2版。
CSDN源码下载
http://download.csdn.net/detail/leixiaohua1020/7624137
CSDN编译好的可执行程序下载
http://download.csdn.net/detail/leixiaohua1020/7624119
PUDN源码
http://www.pudn.com/downloads644/sourcecode/multimedia/detail2605176.html
注:须要VC2010的执行环境。假设出现找不到msvcp100.dll等文件的话,能够选择下面之中的一个:
1.安装Microsoft Visual C++ 2010 Redistributable Package
2.下载压缩包“VC2010编译的MFC程序须要的dll”,而且将里面的Dll复制到程序的文件夹中
下面将自己总结的软件的文档贴出来。

1 简述
VideoEye是一个开源的视频分析的软件。本软件能够播放和分析视频数据。它支持多种视频流输入方式:HTTP,RTMP,RTSP以及文件等等。该软件能够实时分析视频流并能以图形化的方式呈现其分析结果。眼下该软件还处于完好阶段。1.1 视频播放
视频播放是本软件最主要的功能。1.2 压缩域码流分析
压缩域码流分析主要用于分析视频和音频压缩码流的參数。1.3 非压缩域数据分析
非压缩域数据分析主要用于分析视频解码后的像素数据。2 主界面
本章简介系统主界面的操作和使用。软件执行后欢迎画面如图所看到的:

进入主界面以后,例如以下图所看到的。

注1:还能够通过下面几种方式加入输入路径
1. 单击“文件”,打开文件对话框,选择一个视频文件
2. 拖拽一个视频文件到主界面
3. 单击“收藏夹”,打开收藏夹列表,选择一个视频的URL
注2:本系统不但支持本地文件的分析,也支持网络流的分析。
单击位于主界面左下角的“播放”大button(一个圆圈里面有一个三角形),就可以让系统開始执行。系统执行后的截图例如以下图所看到的。

图2-3.主界面(播放中)
单击主界面下方的“播放控制”面板上的button,能够控制视频的播放。具体的功能包括快退,暂停,快进,停止,逐帧播放,全屏播放。拖动视频播放的进度条,则能够控制视频播放的进度(对于直播信号,是不能调整播放进度的)。
系统開始执行之后,会弹出视频播放窗体。该窗体相似于视频播放器,能够显示解码后的视频数据,并播放音频数据。

3 播放
本章主要介绍和视频播放相关的功能。播放是本系统最主要的功能。系统其他功能都是建立在播放的基础之上的。3.1 视频URL
假设想让系统開始播放的话,首先须要选择一个视频(音频)文件。将视频所在的URL粘贴到“输入路径”里面就可以。注1:还能够通过下面几种方式加入输入路径
1. 单击“文件”,打开文件对话框,选择一个视频文件
2. 拖拽一个视频文件到主界面
3. 单击“收藏夹”,打开收藏夹列表,选择一个视频的URL
4. 单击“地址解析”,能够使用网络上现有的地址解析引擎,解析得到像优酷,土豆,乐视这些站点上视频的URL。
注2:本系统不但支持本地文件的分析,也支持网络流的分析。
3.2 收藏夹
收藏夹功能眼下还处于调整中。支持导入m3u格式的播放列表,以及XSPF格式的播放列表。双击收藏夹中的条目,能够将该条目相应的地址传给主界面的“输入路径”。

3.3 播放控制
在“输入路径”里加入视频的URL之后,单击系统左下角的“播放”大button(一个圆圈里面有一个三角形),就能够開始播放了。在“播放”button的旁边,排列着其他控制播放的button。依次是:“后退”,“暂停”,“前进”,“停止”,“逐帧播放”,“全屏”。通过这些button,基本上能够完毕对播放的各种控制。此外,在这些button的上方,另一个播放的进度条。能够通过拖拽进度条的方式,调整视频播放的进度。
在系统的右下角,有一个button:“关于”。

3.4 播放设置
选择菜单的“播放”->“播放器首选项”。打开播放设置对话框如图所看到的。注:此处的设置仅仅有在下一次视频播放開始后才会生效。

3.5 播放画面
选择菜单的“视频”->“大小”。能够调整视频播放窗体的大小。选择菜单的“视频”->“纵横比”。能够调整视频播放窗体的纵横比。
选择菜单的“视频画面”,能够调整视频播放窗体显示的内容,有下面3种:
* 视频画面
* 音频波形图
* 音频离散傅里叶变换图
3.6 数据输出
选择菜单的“数据”。能够输出视频播放过程中的中间数据。该选项卡能够用于输出视音频码流数据,视频解码后的像素数据,或者音频解码后的採样数据。数据输出选项卡例如以下图所看到的。注:特殊容器(mp4,mkv等)封装的H.264直接输出的话,会缺少SPS和PPS,因而导致码流无法被识别。为此专门加入了特殊容器输出H.264的选项。

4 视频分析
本章主要介绍和视频分析相关的功能。4.1 视频解码分析
在视频播放的过程中,单击主界面视频部分编码參数部分的button“视频解码分析”,打开视频解码分析对话框,如图4-1所看到的。对话框中包括了一个帧列表。每一个帧相应列表中的一条记录。不同类型的帧有着不同的背景色。列表显示了下面信息:
* 帧数
* 帧类型
* 关键帧
* 码流顺序
* PTS

4.2 视频帧解码分析
在视频播放的过程中,单击主界面视频部分编码參数部分的button“单帧具体分析”,打开视频帧解码分析对话框,如图4-2所看到的。该部分主要用于对当前播放的视频帧进行具体的分析。能够列表显示视频一帧的具体參数,包括:
* 帧数
* 帧类型
* PTS
* 显示时间
* 參考帧数量
并能够对视频进行宏块级的分析,包括下面几种參数的分析:
* 量化參数分析
* 宏块类型分析
* 运动矢量list[0]分析
* 运动矢量list[1]分析
* 參考帧list[0]分析
* 參考帧list[1]分析
对话框上方的下拉框用于设置希望分析的内容。对话框左边的“选项”部分能够设置分析结果的属性。具体包括下面几项:
通用选项 | |
显示宏块边界 | 显示视频帧中宏块的边界。 |
字体 | 设置分析结果中文字的字体。 |
量化分析 | |
显示QP值 | 显示宏块的QP值。 |
显示背景颜色 | 依据QP值的不同,不同宏块显示不同灰度的背景颜色。 |
宏块类型分析 | |
显示子宏块 | 显示子宏块的划分方式。 |
显示背景颜色 | 依据划分方式的不同,不同宏块显示不同的背景颜色。 |
显示跳过宏块 | 在跳过宏块的上方标记以“s”。 |
显示參考列表 | 在使用參考帧的宏块上标记List0和List1。 |
运动矢量[0]分析 | |
颜色 | 显示的运动矢量[0]颜色。 |
样式 | 运动矢量[0]外观。 |
运动矢量[1]分析 | |
颜色 | 显示的运动矢量[1]颜色。 |
样式 | 运动矢量[1]外观。 |
对话框中间的“宏块类型”部分包括了各种类型的宏块的数量的统计信息。比如帧内4x4,帧内16x16,16x16,16x8,8x16,8x8等类型的宏块的个数。以及每行宏块数,宏块行数,总计宏块数,每一个宏块包括的运动矢量个数等信息。
对话框右边上方的“帧參数”部分包括了该视频帧的一些其他信息。比如帧数,帧类型,大小,PTS,显示时间,參考帧数量等信息。
对话框右边下方的“量化”部分包括了QP的统计信息。包括QP的最大值,最小值以及平均值。
此外,假设勾选了“随播放自己主动分析”选项,能够随着系统对视频的解码播放,实时的分析视频的码流參数。

量化參数分析结果如图所看到的。视频帧被划分成以宏块为单位的网格状。图中每一个小方块代表视频码流中的一个宏块。当中的数字代表了该宏块的量化參数。为了使分析结果更加直观,每一个宏块被标记以不同灰度的背景色,如图4-3(a)所看到的。量化系数越大,相应的背景色的灰度越浅。此外,也能够以视频帧的内容为背景显示分析结果,如图4-3(b)所看到的。也能够去掉量化系数的显示,如图4-3(c)所看到的。









4.3 视频非压缩域分析
在视频播放的过程中,单击主界面视频參数部分的button“非压缩域数据分析”,打开非压缩域数据分析对话框,如图4-7所看到的。由图可见,能够从“分析方法”里面选择想要分析的内容,包括了颜色直方图,Canny边缘检測,轮廓检測,离散傅里叶变换,人脸识别。此外,还能够查看视频的R,G,B分量以及Y,U,V分量。假设勾选了“随着播放自己主动分析” 选项的话,能够随着系统对视频的解码播放,实时的分析视频的非压缩域数据。







5 音频分析
本章主要介绍和音频分析相关的功能。5.1 音频解码分析
在视频播放的过程中,单击主界面音频编码參数部分的button“音频解码分析”,打开音频解码分析对话框,如图5-1所看到的。对话框左边是解码状态表,表中显示了音频码流的情况。每一个音频帧相应一个柱状图。横坐标相应音频帧序号,纵坐标相应音频帧大小。
对话框右边相应的是帧列表。列表显示了下面信息:
* 帧数
* 帧大小
* PTS
* DTS

6 其他功能
本章主要介绍系统的一些其他的功能。6.1 多国语言的支持
本软件眼下支持中文简体和英文两种界面。英文界面示比如图6-1, 图6-2, 图6-3, 图6-4所看到的。




6.2 专用分析工具
专用分析工具还未加入。6.3 辅助工具
眼下支持的辅助工具是MediaInfo,用于查看视频信息,如图6-5所看到的。