开源实时视频码流分析软件:VideoEye

时间:2024-03-04 12:02:56

 本文介绍一个自己做的码流分析软件: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 主界面

本章简介系统主界面的操作和使用。

软件执行后欢迎画面如图所看到的:


 
图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界面