本文介绍一个自己做的码流分析软件: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. window对象细节(转载)

    Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY.FRAMESET或FRAME元素时,都会自动建立window对象的实例.另 ...

  2. mysql 连接问题----转载

    最近碰到一个mysql5数据库的问题.就是一个标准的servlet/tomcat网络应用,后台使用mysql数据库.问题是待机一晚上后,第二天早上第一次登录总是失败.察看日志发现如下错误: “com. ...

  3. 解决ListView异步加载图片错乱问题 .

    发一个异步图片加载控件.网上也有大把的异步网络加载图片的控件,但是有一个问题,异步加载会造成列表中的图片混乱,因为列表的每一项的View都可能被重用,异步加载的时候多个异步线程引用到了同一个View将 ...

  4. ecshop数据库操作类

    ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现. 好处:实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小. 当网站需要做me ...

  5. windows7任务栏上的图标修复

    Technorati 标记: 疑难杂症   今天,我在使用Windows 7的时候,因为操作一些系统文件,发现桌面下角的个别正在运行的图标不见了,但是,我们如果再打开一个新程序,又会提醒你已经在运行了 ...

  6. How to solve "The specified service has been marked for deletion" error

    There may be several causes which lead to the service being stuck in “marked for deletion”. Microsof ...

  7. Standard Numeric Format Strings

    The following table describes the standard numeric format specifiers and displays sample output prod ...

  8. java dump

    注意,请不要被我误导,我没有看其他资料,这是我自己分析的,有些可能是不对的 "DestroyJavaVM" prio=6 tid=0x00316800 nid=0x448 wait ...

  9. 数学:UVAoj 11174 Stand in a Line

    Problem J Stand in a Line Input: Standard Input Output: Standard Output All the people in the bytela ...

  10. 【模拟】FOJ 2244 Daxia want to buy house

    题目链接: http://acm.fzu.edu.cn/problem.php?pid=2244 题目大意: 每月还款额=贷款本金×[月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1 ...