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

开源实时视频码流分析软件:VideoEye的更多相关文章

  1. [转]开源实时视频码流分析软件:VideoEye

    原文太长了,就直接贴上链接,以便大家学习. 引文链接:开源实时视频码流分析软件:VideoEye

  2. HEVC之路0:HM16.18的运行+码流分析

    1.HM下载 HM不能直接网页下载,因为它是采用svn来管理代码的,因此需要利用svn下载,这里采用TortoiseSVN(软件下载地址为https://tortoisesvn.net/)进行下载. ...

  3. H264码流打包分析

    转自:http://www.360doc.com/content/13/0124/08/9008018_262076786.shtml   SODB 数据比特串-->最原始的编码数据 RBSP ...

  4. H264码流打包分析(精华)

    H264码流打包分析 SODB 数据比特串-->最原始的编码数据 RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若 ...

  5. 视频特性TI(时间信息)和SI(空间信息)的计算工具:TIandSI-压缩码流版

    ===================================================== TI(时间信息)和SI(空间信息)计算工具文章列表: 视频特性TI(时间信息)和SI(空间信 ...

  6. 视音频数据处理入门:AAC音频码流解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

  7. 视音频数据处理入门:H.264视频码流解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

  8. 大华NVR设备接分别入宇视摄像机Onvif和RTSP主子码流的方案说明

    需求提要 1.各个内网现场有多种网络摄像机IPC和网络硬盘录像机NVR设备: 2.需要将这些设备统一接入到云端中心平台,进行统一的视频直播和录像回放管理: 3.由于目前IPC设备都属于高清设备,主码流 ...

  9. 关于Darwin接入私有协议、私有SDK码流的讨论

          最近做到云视频/云监控的项目,跟团队伙伴讨论到一个架构问题,就是将私有协议的码流数据接入到Darwin,再通过Darwin对外提供高效的RTSP/RTP服务.说到私有协议接入Darwin, ...

随机推荐

  1. 关于Linux 交互(用户操作接口)

    Linux 系统提供两种基本接口给用户操作:命令行,图形界面. 不同接口也有相应的访问终端. 一.命令行 Command Line Linux系统命令行,一般指 Shell. Shell 接受经键盘输 ...

  2. 网页main中左边固定宽度,右边自适应。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 利用正则表达式,给Json字段加引号

    { scheme: [ { query: [ [{ id: 'stdNumber', title: "标准号", compareType: 2 }], [{ id: 'CnName ...

  4. PAT - 基础 - 最大公约数和最小公倍数

    题目: 本题要求两个给定正整数的最大公约数和最小公倍数. 输入格式: 输入在一行中给出2个正整数M和N(<=1000). 输出格式: 在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1 ...

  5. 数组去重的三种方法及from方法

    直接上代码: var str="adbbckddwerivka"; var arr=str.split(""); console.log(arr); //ind ...

  6. QQ弹窗代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. AspNet WebApi : MessageHandler(消息处理器 )

    1. Http Message Handler WebApi中的MessageHandler类似MVC中的filter,可用于请求/响应到达真正目标前对请求或者响应进行修改,比如:用户身份验证,请求头 ...

  8. 关于 Boolean 的转换

    前端经常喜欢这样写 if else if(value) { //do something } javascript 能智能的把任何类型的 value 转换成 boolean 来进行 if 判断 转换是 ...

  9. 【转】 Android开发之EditText属性详解

    原文网址:http://blog.csdn.net/qq435757399/article/details/7947862 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: ...

  10. (转载)PHP_Memcache函数详解

    (转载)http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/04/19/2021605.html memcache函数所有的方法列表如下: M ...