本文介绍一个本身作的码流分析软件:VideoEye。为何要起这个名字呢?感受这个软件的主要功能就是对“视频”进行“分析”。而分析是要用眼睛来看的,所以取了“视频”和“分析”这两个词的英文,名之曰:VideoEye。这个软件是在本身毕业设计软件的基础上改的。可以对本地文件或者互联网视频流进行实时的码流分析。由于这个软件是本身一边学习视音频技术一边制做的,因此涵盖了比較全面的功能。在编写这个软件的过程当中,本身也学会了很是多的视音频编解码方面的知识,以及MFC的知识。后来想一想,与其本身保存在电脑里,不如开源出来与你们分享,或许能帮助正在学习视音频技术的人学习这方面的知识。软件源码中有大量的凝视,都是本身边学边记的笔记,十分方便理解和学习有关的知识。html
开发环境为VC2010,软件界面使用下面类库:网络
界面:MFCide
视音频编解码类库:FFMPEG工具
视频非压缩域数据分析:OpenCV学习
播放列表解析/导出:TinyXML字体
视音频播放:SDL编码
眼下还在无缺过程当中,预计还要很多的改动。spa
项目主页:.net
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 主界面
本章简介系统主界面的操做和使用。
软件执行后欢迎画面如图所看到的:
图2-1.欢迎画面
进入主界面之后,例如如下图所看到的。
图2-2.主界面
假设想让系统開始执行的话,首先需要选择一个视频(音频)文件。将视频所在的URL粘贴到“输入路径”里面就能够。
注1:还可以经过下面几种方式加入输入路径
1.
单击“文件”,打开文件对话框,选择一个视频文件
2.
拖拽一个视频文件到主界面
3.
单击“收藏夹”,打开收藏夹列表,选择一个视频的URL
注2:本系统不但支持本地文件的分析,也支持网络流的分析。
在这里咱们选择一个视频文件,URL是“F:\movie\cuc_ieschool.flv”。
单击位于主界面左下角的“播放”大button(一个圆圈里面有一个三角形),就可让系统開始执行。系统执行后的截图例如如下图所看到的。
图2-3.主界面(播放中)
由图可见,在“输入參数”部分,系统解析出了输入协议类型为file,封装格式为FLV。比特率是394.94kbps,时长是34s。 “视频”部分,系统解析出了输出像素格式为YUV420P,视频编码方式为H.264,帧率为15fps,画面大小为512x288。“音频”部分,系统解析出了採样率为44100Hz,音频编码方式为MP3,声道数为2。
单击主界面下方的“播放控制”面板上的button,可以控制视频的播放。具体的功能包括快退,暂停,快进,中止,逐帧播放,全屏播放。拖动视频播放的进度条,则可以控制视频播放的进度(对于直播信号,是不能调整播放进度的)。
系统開始执行以后,会弹出视频播放窗体。该窗体类似于视频播放器,可以显示解码后的视频数据,并播放音频数据。
图2-4.播放窗体
3 播放
本章主要介绍和视频播放相关的功能。播放是本系统最主要的功能。系统其余功能都是创建在播放的基础之上的。
3.1 视频URL
假设想让系统開始播放的话,首先需要选择一个视频(音频)文件。将视频所在的URL粘贴到“输入路径”里面就能够。
注1:还可以经过下面几种方式加入输入路径
1.
单击“文件”,打开文件对话框,选择一个视频文件
2.
拖拽一个视频文件到主界面
3.
单击“收藏夹”,打开收藏夹列表,选择一个视频的URL
4.
单击“地址解析”,可以使用网络上现有的地址解析引擎,解析获得像优酷,土豆,乐视这些站点上视频的URL。
注2:本系统不但支持本地文件的分析,也支持网络流的分析。
3.2 收藏夹
收藏夹功能眼下还处于调整中。支持导入m3u格式的播放列表,以及XSPF格式的播放列表。双击收藏夹中的条目,可以将该条目相应的地址传给主界面的“输入路径”。
图3-1.播放列表对话框
3.3 播放控制
在“输入路径”里加入视频的URL以后,单击系统左下角的“播放”大button(一个圆圈里面有一个三角形),就可以開始播放了。
在“播放”button的旁边,排列着其余控制播放的button。依次是:“后退”,“暂停”,“前进”,“中止”,“逐帧播放”,“全屏”。经过这些button,基本上可以完毕对播放的各类控制。此外,在这些button的上方,另外一个播放的进度条。可以经过拖拽进度条的方式,调整视频播放的进度。
在系统的右下角,有一个button:“关于”。
图3-2.播放控制button
3.4 播放设置
选择菜单的“播放”->“播放器首选项”。打开播放设置对话框如图所看到的。
注:此处的设置仅仅有在下一次视频播放開始后才会生效。
图3-3.播放器首选项对话框
3.5 播放画面
选择菜单的“视频”->“大小”。可以调整视频播放窗体的大小。
选择菜单的“视频”->“纵横比”。可以调整视频播放窗体的纵横比。
选择菜单的“视频画面”,可以调整视频播放窗体显示的内容,有下面3种:
*
视频画面
*
音频波形图
*
音频离散傅里叶变换图
3.6 数据输出
选择菜单的“数据”。可以输出视频播放过程当中的中间数据。该选项卡可以用于输出视音频码流数据,视频解码后的像素数据,或者音频解码后的採样数据。数据输出选项卡例如如下图所看到的。
注:特殊容器(mp4,mkv等)封装的H.264直接输出的话,会缺乏SPS和PPS,于是致使码流没法被识别。为此专门加入了特殊容器输出H.264的选项。
图3-4.数据输出对话框
4 视频分析
本章主要介绍和视频分析相关的功能。
4.1 视频解码分析
在视频播放的过程当中,单击主界面视频部分编码參数部分的button“视频解码分析”,打开视频解码分析对话框,如图4-1所看到的。
对话框中包括了一个帧列表。每个帧相应列表中的一条记录。不一样类型的帧有着不一样的背景色。列表显示了下面信息:
*
帧数
*
帧类型
*
关键帧
*
码流顺序
*
PTS
图4-1.视频解码分析对话框
4.2 视频帧解码分析
在视频播放的过程当中,单击主界面视频部分编码參数部分的button“单帧具体分析”,打开视频帧解码分析对话框,如图4-2所看到的。
该部分主要用于对当前播放的视频帧进行具体的分析。可以列表显示视频一帧的具体參数,包括:
*
帧数
*
帧类型
*
PTS
*
显示时间
*
參考帧数量
并可以对视频进行宏块级的分析,包括下面几种參数的分析:
*
量化參数分析
*
宏块类型分析
*
运动矢量list[0]分析
*
运动矢量list[1]分析
*
參考帧list[0]分析
*
參考帧list[1]分析
对话框上方的下拉框用于设置但愿分析的内容。对话框左边的“选项”部分可以设置分析结果的属性。具体包括下面几项:
表4-1.视频帧具体分析选项
通用选项 |
显示宏块边界 |
显示视频帧中宏块的边界。 |
字体 |
设置分析结果中文字的字体。 |
量化分析 |
显示QP值 |
显示宏块的QP值。 |
显示背景颜色 |
依据QP值的不一样,不一样宏块显示不一样灰度的背景颜色。 |
宏块类型分析 |
显示子宏块 |
显示子宏块的划分方式。 |
显示背景颜色 |
依据划分方式的不一样,不一样宏块显示不一样的背景颜色。 |
显示跳过宏块 |
在跳过宏块的上方标记以“s”。 |
显示參考列表 |
在使用參考帧的宏块上标记List0和List1。 |
运动矢量[0]分析 |
颜色 |
显示的运动矢量[0]颜色。 |
样式 |
运动矢量[0]外观。 |
运动矢量[1]分析 |
颜色 |
显示的运动矢量[1]颜色。 |
样式 |
运动矢量[1]外观。 |
对话框中间的“宏块类型”部分包括了各类类型的宏块的数量的统计信息。好比帧内4x4,帧内16x16,16x16,16x8,8x16,8x8等类型的宏块的个数。以及每行宏块数,宏块行数,总计宏块数,每个宏块包括的运动矢量个数等信息。
对话框右边上方的“帧參数”部分包括了该视频帧的一些其余信息。好比帧数,帧类型,大小,PTS,显示时间,參考帧数量等信息。
对话框右边下方的“量化”部分包括了QP的统计信息。包括QP的最大值,最小值以及平均值。
此外,假设勾选了“随播放本身主动分析”选项,可以随着系统对视频的解码播放,实时的分析视频的码流參数。
图4-2.视频帧解码分析对话框
量化參数分析结果如图所看到的。视频帧被划分红以宏块为单位的网格状。图中每个小方块表明视频码流中的一个宏块。当中的数字表明了该宏块的量化參数。为了使分析结果更加直观,每个宏块被标记以不一样灰度的背景色,如图4-3(a)所看到的。量化系数越大,相应的背景色的灰度越浅。此外,也可以以视频帧的内容为背景显示分析结果,如图4-3(b)所看到的。也可以去掉量化系数的显示,如图4-3(c)所看到的。
(a)
背景为灰度图,前景为量化參数
(b)
背景为帧内容,前景为量化參数
(c)
背景为灰度,前景不包括数字
图4-3.量化參数分析结果
宏块类型分析的结果如图4-4所看到的。视频帧相同被划分红以宏块为单位的网格状。依据子宏块划分方式的不一样(16x16,16x8,8x16,8x8,4x4),这些宏块被划分红了不相同式。不一样的宏块可以被标记以不一样的背景颜色,如图4-4(a)所看到的。此外,假设该宏块属于跳过宏块,还可以在宏块上面标记以“s”字样。此外,也可以以视频帧的内容为背景显示分析结果,如图4-4(b)所看到的。
(a)
背景为纯色图,前景为宏块类型
(b)
背景为帧内容,前景为宏块划分方式
图4-4.宏块类型分析结果
运动矢量分析的结果如图4-5所看到的。运动矢量分为List0和List1两种。由图可见,运动较剧烈的地方,包括了较多的长度较长的运动矢量。画面相对精巧的地方,运动矢量的长度相对照较短甚至取值为0。
(a)
List0
(b)
List1
图4-5. 运动矢量分析结果
參考帧的分析结果如图4-6所看到的。參考帧分为List0和List1两种。由图可见,不一样的宏块參考了不一样的视频帧做为其參考帧。
(a)
List0
(b)
List1
图4-6. 參考帧分析结果
4.3 视频非压缩域分析
在视频播放的过程当中,单击主界面视频參数部分的button“非压缩域数据分析”,打开非压缩域数据分析对话框,如图4-7所看到的。由图可见,可以从“分析方法”里面选择想要分析的内容,包括了颜色直方图,Canny边缘检測,轮廓检測,离散傅里叶变换,人脸识别。此外,还可以查看视频的R,G,B份量以及Y,U,V份量。假设勾选了“随着播放本身主动分析” 选项的话,可以随着系统对视频的解码播放,实时的分析视频的非压缩域数据。
图4-7.非压缩域分析
颜色直方图的分析结果如图4-8所看到的。由图可见,颜色直方图列出了不一样色彩在整幅视频帧中所占的比例。对于该视频帧来讲,红色和黄色份量取值较大,表明该种色彩所占比重较大。
图4-8.颜色直方图
边缘检測的分析结果如图4-9所看到的。经过该分析功能可以得到视频帧的边缘信息。
图4-9.边缘检測
轮廓检測的结果如图4-10所看到的。经过该分析功能可以得到视频帧的轮廓信息。
图4-10.轮廓检測
离散傅里叶变换的分析结果如图4-11所看到的。左边的图像为相位谱,中间的图像为亮度图,右边的图像为幅度谱。
图4-11.离散傅里叶变换
人脸识别的分析结果如图4-12所看到的。经过该功能可以分析出视频帧中的人脸信息。
图4-12.人脸识别
R,G,B份量的分析结果如图4-13所看到的。由图可以查看R,G,B三个份量的取值状况。
图4-13. R(左上),G(右上),B(下)份量
Y,U,V份量的分析结果如图4-14所看到的。由于Y:U:V取样格式是4:2:0的,因此U,V份量的分辨率是Y份量的一半。
图4-14. Y(左上),U(右上),V(下)份量
5 音频分析
本章主要介绍和音频分析相关的功能。
5.1 音频解码分析
在视频播放的过程当中,单击主界面音频编码參数部分的button“音频解码分析”,打开音频解码分析对话框,如图5-1所看到的。
对话框左边是解码状态表,表中显示了音频码流的状况。每个音频帧相应一个柱状图。横坐标相应音频帧序号,纵坐标相应音频帧大小。
对话框右边相应的是帧列表。列表显示了下面信息:
*
帧数
*
帧大小
*
PTS
*
DTS
图5-1. 音频解码分析
6 其余功能
本章主要介绍系统的一些其余的功能。
6.1 多国语言的支持
本软件眼下支持中文简体和英文两种界面。英文界面示好比图6-1, 图6-2, 图6-3, 图6-4所看到的。
图6-1. 主界面(英文)
图6-2. 视频解码分析(英文)
图6-3.视频帧解码分析(英文)
图6-4.视频非压缩域分析(英文)
6.2 专用分析工具
专用分析工具还未加入。
6.3 辅助工具
眼下支持的辅助工具是MediaInfo,用于查看视频信息,如图6-5所看到的。
图6-5.MediaInfo界面