2024年4月8日发(作者:)
沈阳理工大学学士学位论文
摘 要
本文旨在通过VC++6.0开发平台开发一个基于OpenCV的视频播放器。OpenCV是
计算机视觉库,基于OpenCV的视频播放器可以更简单的实现AVI视频的播放。
首先,本文简单介绍了VC++6.0软件开发平台,OpenCV计算机视觉库的特点和应
用领域,计算机视频技术的发展,以及各种视频格式的分类等;其次选择在微软的
Microsoft Visual Studio 6.0开发平台上使用C++语言进行开发,编写出基于OpenCV的功
能简单实用方便的视频播放器。主要包括以下几个方面:开发本软件所使用的开发平台
与技术;功能模块;功能设计;功能实现等。
关键词:Microsoft Visual Studio 6.0;OpenCV;C++;视频播放器;AVI格式
I
沈阳理工大学学士学位论文
Abstract
This paper aims to develop a VC + + 6.0 development platform based on the video player
OpenCV, OpenCV is based on computer vision, the video player can OpenCV more simple
realization video playback. AVI.
Firstly, the paper simply introduces vc + + 6.0 software development platform under OpenCV,
computer vision, the characteristics and application fields of the library, computer video
technology development, as well as various video format of classification, Second choice at
Microsoft Microsoft Visual Studio 6.0 development platform using c + + language development,
and write a simple and practical OpenCV based on the function of video player convenience.
Mainly includes the following aspects: the development of the software development platform
and technology of use, Function module, Functional design, Functions, etc.
Keywords: Microsoft Visual Studio 6.0; OpenCV; C++;Video Player; AVI format
II
沈阳理工大学学士学位论文
目 录
1 绪论 ...................................................................................................................................... 1
1.1
概述 ................................................................................................................................. 1
1.2
OPENCV简介 ................................................................................................................ 2
1.2.1 OpenCV ............................................................................................................... 2
1.2.2 OpenCV的应用领域 ......................................................................................... 3
1.2.3 计算机视觉 ......................................................................................................... 4
1.3
论文主要研究内容及研究意义 .................................................................................... 6
1.4
论文组织结构 ................................................................................................................. 6
2 视频技术概述 ...................................................................................................................... 7
2.1
多媒体技术 ..................................................................................................................... 7
2.2
视频格式及视频流播放回放 ...................................................................................... 13
2.2.1 视频格式分类 ................................................................................................... 13
2.2.2
视频流播放与回放 .......................................................................................... 17
3 OPENCV库使用 ............................................................................................................... 18
3.1
在VC下安装O
PEN
CV................................................................................................ 18
4 VC开发环境 ...................................................................................................................... 22
4.1
VC++的组件工具 ......................................................................................................... 22
4.1.1
编译器工具 ...................................................................................................... 23
4.1.2
VC++库 ............................................................................................................ 23
4.1.3
VC++开发环境 ................................................................................................ 24
5 视频播放器的设计与实现 ................................................................................................ 25
5.1
模块划分 ....................................................................................................................... 25
5.1.1
播放器功能模块图 .......................................................................................... 25
5.2
详细设计 ....................................................................................................................... 26
5.2.1 主界面的实现 ................................................................................................... 26
5.2.2 文件控制的实现 ............................................................................................... 28
5.2.3 播放控制的实现 ............................................................................................... 30
5.2.4 进度控制的实现 ............................................................................................... 34
III
沈阳理工大学学士学位论文
5.2.5 系统声明 ........................................................................................................... 34
6 程序运行结果及分析 ........................................................................................................ 35
6.1
运行结果测试 ............................................................................................................... 35
6.2
结果分析 ....................................................................................................................... 37
结 论 ...................................................................................................................................... 38
致 谢 ...................................................................................................................................... 39
参考文献 .................................................................................................................................. 40
附录A 英文原文 .................................................................................................................. 41
附录B 汉语翻译 .................................................................................................................. 47
附录C 程序源代码 .............................................................................................................. 52
IV
沈阳理工大学学士学位论文
1 绪论
1.1 概述
C++语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但
它比C语言更容易为人们学习和掌握。C++以其独特的语言机制在计算机科学的各个领
域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一
个质的飞跃,C++完美地体现了面向对象的各种特性。
[1]
C++程序设计语言是由来自AT&T Bell Laboratories的Bjarne Stroustrup设计和实现
的,它兼具Simula语言在组织与设计方面的特性以及适用于系统程序设计的C语言设
施。C++最初的版本被称作“带类的C(C with classes)”[Stroustrup,1980],在1980年被
第一次投入使用;当时它只支持系统程序设计和数据抽象技术。支持面向对象程序设计
的语言设施在1983年被加入C++;之后,面向对象设计方法和面向对象程序设计技术
就逐渐进入了C++领域。在1985年,C++第一次投入商业市场。在1987至1989年间,
支持范型程序设计的语言设施也被加进了C++。
[2]
随着若干独立开发的C++实现产品的出现和广泛应用,正式的C++标准化工作在
1990年启动。标准化工作由ANSI(American National Standard Institute)以及后来加入
的ISO(International Standards Organization)负责。1998年正式发布了C++语言的国际
标准[C++,1998]。
而VC是基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工
具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC
在 Windows平台无所不能。
[3]
AVI(Audio Video Interleave)是一种音频视像交插记录的数字视频文件格式。1992
年初Microsoft公司推出了AVI技术及其应用软件VFW(Video for Windows)。在AVI
文件中,运动图像和伴音数据是以交织的方式存储,并独立于硬件设备。这种按交替方
式组织音频和视像数据的方式可使得读取视频数据流时能更有效地从存储媒介得到连续
的信息。AVI可以算是Windows操作系统上最基本的也是最常用的一种媒体文
件格式,兼容性比较好。构成一个AVI文件的主要参数包括视像参数、伴音参数和压
缩参数等。
1
沈阳理工大学学士学位论文
OpenCV是Intel公司支持的开源计算机视觉库。它轻量级而且高效——由一系列 C
函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。
计算机视觉市场巨大而且持续增长,且这方面没有标准API,目前的计算机视觉软
件大概有以下三种:
1.研究代码(慢,不稳定,独立并与其他库布兼容)
2.耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
3.依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)
这是目前的现状。而标准的API将简化计算机视觉程序和解决方案的开发。OpenCV
致力于成为这样的标准API。
本文在此基础上设计一个基于OpenCV的视频播放器,可以更简捷的实现avi格式
视频文件的播放,暂停,停止等操作。
1.2 OPENCV简介
1.2.1 OpenCV
OpenCV是Intel资助的开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构
成,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV 拥有包括 300 多个C/C++函数的跨平台的中、高层 API。它不依赖与其
它的外部库,尽管也可以使用某些外部库。
OpenCV 对非商业应用和商业应用都是免费的。另外OpenCV 也为Intel公司的
Integrated Performance Primitives (IPP) 提供了透明接口。 这意味着如果有为特定处理器
(INTEL的处理器)优化的的 IPP 库, OpenCV 将在运行时自动加载这些库。
OpenCV的一个目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便
捷地设计更复杂的计算机视觉相关应用程序。OpenCV包含的函数有500多个,覆盖了
计算机视觉的许多应用领域,如工厂产品检测、医学成像、信息安全、用户界面、摄像
机标定、立体视觉和机器人等。因为计算机视觉和机器学习密切相关,所以OpenCV还
提供了MLL(Machine Learning Library)机器学习库。该机器学习库侧重于统计方面的模
式识别和聚类(clustering)。MLL除了用在视觉相关的任务中,还可以方便地应用于其他
的机器学习场合。
2
沈阳理工大学学士学位论文
开发OpenCV的目的是为了促进CPU密集型应用。为了达到这一目的,Intel启动
了多个项目,包括实时光线追踪和三维显示墙。一个在Intel工作的OpenCV作者在访
问一些大学时,注意到许多顶尖大学中的研究组(如MIT媒体实验室)拥有很好的内部使
用的开放计算机视觉库—— (在学生们之间互相传播的代码),这会帮助一个新生从高的
起点开始他/她的计算机视觉研究。这样一个新生可以在以前的基础上继续开始研究,而
不用从底层写基本函数。
因此,OpenCV的目的是开发一个普遍可用的计算机视觉库。在Intel的性能库团队
的帮助下,OpenCV实现了一些核心代码以及算法,并发给Intel俄罗斯的库团队。这就
是OpenCV的诞生之地:在与软件性能库团队的合作下,它开始于Intel的研究中心,
并在俄罗斯得到实现和优化。
1.2.2 OpenCV的应用领域
大多数计算机科学家和程序员已经意识到计算机视觉的重要作用。但是很少有人知
道计算机视觉的所有应用。例如,大多数人或多或少地知道计算机视觉可用在监控方面,
也知道视觉被越来越多地用在网络图像和视频方面。少数人也了解计算机视觉在游戏界
面方面的应用。但是很少有人了解大多数航空和街道地图图像(如Google的Street View)
也大量使用计算机定标和图像拼接技术。一些人知道安全监控、无人飞行器或生物医学
分析等方面的应用,但是很少人知道机器视觉是多么广泛地被用在工厂中:差不多所有
的大规模制造的产品都在流水线上的某个环节上自动使用视觉检测。
OpenCV所有的开放源代码协议允许用户使用OpenCV的全部代码或者OpenCV的
部分代码生成商业产品。使用了OpenCV后,用户不必对公众开放自己的源代码或改善
后的算法,虽然Intel公司非常希望用户能够开放源代码。许多公司(IBM,Microsoft,,
SONY,Siemens和Google等其他公司)和研究单位(例如斯坦福大学、MIT、CMU、剑
桥大学和INRIA)中的人都广泛使用OpenCV,其部分原因是OpenCV采用了这个宽松的
协议。Yahoo groups里有一个OpenCV论坛(/group/OpenCV),用
户可以在此发帖提问和讨论;该论坛大约有20 000个会员。OpenCV在全世界广受欢迎,
在中国、日本、俄罗斯、欧洲和以色列都有庞大的用户群。
自从OpenCV在1999年1月发布alpha版本开始,它就被广泛用在许多应用领域、
产品和研究成果中。相关应用包括卫星地图和电子地图的拼接,扫描图像的对齐,医学
3
沈阳理工大学学士学位论文
图像去噪(消噪或滤波),图像中的物体分析,安全和入侵检测系统,自动监视和安全系
统,制造业中的产品质量检测系统,摄像机标定,军事应用,无人飞行器,无人汽车和
无人水下机器人。将视觉识别技术用在声谱图上,OpenCV可以进行声音和音乐识别。
在斯坦福大学的Stanley机器人项目中,OpenCV是其视觉系统的关键部分。Stanley在
DARPA机器人沙漠挑战赛中,赢得了二百万美元奖金[Thrun06]。
[4]
1.2.3 计算机视觉
计算机视觉是将来自静止图像或视频的数据转换成一个决策或者一种新的表达方
式的过程,所有的这些转换都是为了达到某个目标。输入数据可以包含一些辅助信息,
如“摄像机架在汽车上”或“激光扫描仪在1米处发现一个物体”。最终的决策可能是“场景
中有一个人”或“在这个切片中有14个肿瘤细胞”。一种新的表达方式可以是将一张彩色
照片转为灰度照片,或者从图像序列中去除摄像机晃动影响。
因为人类是视觉动物,所以会误以为可以很容易地实现计算机视觉。当人们凝视图
像时,就会很容易从中找到一辆汽车。人们凭直觉会觉得很容易。人脑将视觉信号划分
入很多个通道,将各种不同的信息输入了大脑。大脑有一个关注系统,会根据任务识别
出图像的重要部分,并做重点分析,而其他部分则分析得较少。在人类视觉流中存在大
量的反馈,但是目前我们对之了解甚少。肌肉控制的传感器以及其他所有传感器的输入
信息之间存在广泛的关联,这使得大脑可以依赖从出生以来所学到的信息。大脑中的反
馈在信息处理的各个阶段都存在,在传感器硬件(眼睛)中也存在。在眼睛中通过反馈来
调节通过瞳孔的进光量,以及调节视网膜表面上的接收单元。
在计算机视觉系统中,计算机接接收到的是来自摄像机或者磁盘文件的一个数值矩
阵。一般来说,没有内置的模式识别系统,没有自动控制的对焦和光圈,没有多年来经
验的积累。视觉系统通常很低级。
实际上,计算机视觉问题比前面我们提到的更糟糕,它是不可解的。给出三维世界
的二维视图,是没有固定方法来重建出三维信息的。在理论上,此类病态问题没有惟一
和确定的解。即使数据很完美,同一张二维图像也可以表示多种三维场景。然而,如前
面提到的,数据会被噪声和形变影响。这些影响来自真实世界的变化(天气、光线、反
射、运动),镜头和机械结构的不完美,传感器上的长时间感应(运动模糊),传感器上和
4
沈阳理工大学学士学位论文
其他电子器件上的电子噪声,以及图像采集后的图像压缩引入的变化。都是很令人头疼
的问题。
设计实际系统时,为了克服视觉传感器的限制,通常会使用一些其他的上下文知识。
考虑这样一个例子,移动机器人在室内寻找并捡起订书机。机器人可以利用这个先验知
识:可在办公室内发现桌子,订书机最可能在桌子上被找到。这给出了一个隐含的尺寸
参考或参照,也就是订书机能够放在桌子上。这也可以用于消除在不可能的地方(例如
在天花板或者窗户上)错误识别出订书机的可能性。机器人也完全可以忽略一个200英
尺大小的跟订书机形状类似的广告飞艇,因为飞艇周围没有桌子的木纹背景。与之相反,
在图像检索中,数据库中的所有订书机图像都是对真正的订书机拍摄的,而且尺寸很大
和形状不规划的订书机图像一般不可能被拍到。也就是拍摄者一般只拍摄真正的、普通
大小的订书机图像。而且人们拍照时一般会将被拍物体置于中心,且将物体放在最能表
现其特征的方向上。因此在由人拍摄的图像中,具有相当多的隐含信息。
[5]
人们也可以使用机器学习技术对上下文信息进行显式建模。隐含的变量(例如物体
大小、重力方向及其他变量)都可以通过标记好的训练数据里的数值来校正。或者,也
可以通过其他的传感器来测量隐含的变量。使用激光扫描仪可以精确测量出一个物体的
大小。计算机视觉面临的另一个难题是噪声问题。我们一般使用统计的方法来克服噪声。
例如,一般来说不可能通过比较一个点和它紧密相邻的点来检测图像里的边缘。但是如
果观察一个局部区域的统计特征,边缘检测会变得容易些。由局部区域卷积的响应连成
的点串,构成边缘。另外可以通过时间维度上的统计来抑制噪声。还有一些其他的技术,
可以从数据中学习显式模型,来解决噪声和畸变问题。例如镜头畸变,可以通过学习一
个简单多项式模型的参数来描述这种畸变,然后可以几乎完全校正这种畸变。
计算机视觉拟根据摄像机数据来采取行动或者做出决策,这样的行动或决策是在一
个指特定目的或任务的环境中来解决。我们从图像去除噪声和损坏区域,可以让监控系
统在有人爬过栅栏时给出报警,或者在一个游乐园里监控系统能够数出总共有多少人通
过了某个区域。在办公室巡游的机器人的视觉软件所采用的方法与固定摄像机的不同,
因为这两个系统有不同的应用环境和目标。通用的规律是:对计算机视觉应用环境的约
束越多,则越能够使用这些约束来简化问题,从而使最终的解决方案越可靠。
[6]
OpenCV的目标是为解决计算机视觉问题提供基本工具。在有些情况下,它提供的
高层函数可以高效地解决计算机视觉中的一些很复杂的问题。当没有高层函数时,它提
供的基本函数足够为大多数计算机视觉问题创建一个完整的解决方案。对于后者,有几
5
沈阳理工大学学士学位论文
个经过检验且可靠的使用OpenCV的方法;所有这些方法都是首先大量使用OpenCV函
数来解决问题。一旦设计出解决方案的第一个版本,便会了解它的不足,然后可以使用
自己的代码和知识来解决(更为广知的一点是“解决实际遇到的问题,而不是我们想像出
来的问题”)。解决方案所存在的不足可以通过系统所用的环境限制来解决。
[7]
1.3 论文主要研究内容及研究意义
本课题主要是在VC6.0开发环境下,通过调用OpenCV API(计算机视觉库),实现
一个基于OpenCV的视频播放器的设计。该视频播放器需要实现的基本功能有:有用户
界面,avi格式视频文件的播放,暂停,停止,进度拖动等。最后,对本软件的开发过程
进行简要总结,并介绍一下本人的体会和感想。
通过本次课题设计可使更多的人们了解Microsoft Visual Studio 6.0的发展背景,掌握
基本的VC++6.0软件开发平台的应用,熟悉VC++6.0编程环境,学习基本操作;同时还
可以更广泛的推广计算机视觉库(即OpenCV)的应用,使人们对其有较深的认识,深
入了解OpenCV的发展历史,主要特点。
1.4 论文组织结构
本文主要包括了背景介绍,多媒体介绍,VC++6.0软件开发平台和OpenCV的应用,
模块设计,系统设计,测试结果及分析等内容。
第一章主要介绍了课题研究的背景及本设计的主要内容;
第二章主要是对视频技术进行了简单介绍,包括多媒体技术及视频的格式等;
第三章是对OpenCV函数库做了一些相关介绍包括特点及主要应用等;
第四章是对VC6.0的开发环境做了较详细的介绍包括Microsoft Visual Studio 6.0的
发展过程,组件工具(编译器工具、VC++库、VC++开发环境)等;
第五章详细的介绍了视频播放器的设计与实现,包括模块划分与系统设计,流程图
及详细的的程序编码等;
第六章介绍了程序的运行结果,播放器功能的实现及对设计结果的分析,找出设计
过程中存在的不足之处,以便加以改正。
6
沈阳理工大学学士学位论文
2 视频技术概述
对于视频,我们并不陌生,日常生活中经常看的电影、电视就是视频的典型应用。
人类接收的信息中约有70%来自视觉,周围景物在人眼视网膜上的映像是人类最有效、
最重要的信息交流方式。视频具有确切、直观、具体生动、真实和高效的特点,这正是
视频技术的无穷魅力所在。
简介动态图像传输在电信领域被称为视频业务或视讯业务,在计算机界常常
称为多媒体通信、流媒体(下载像流水)通信等。视频通信技术是实现和完成视
频业务的主要技术。
其压缩标准是MPEG(动态图像专家小组),它提出了一种电视图像和声音编码
的国际标准,用在数据传输率为1.5Mb/s。 对于视频业务应用而言,主要是宽带
网络技术。
随着计算机软硬件技术的迅猛发展,视频技术也得到了飞速发展。现在,数字娱乐、
多媒体通信、高清晰度电视、数字电视、宽带网络等都是围绕如何有效地交流视频信息
而展开研究的。但是,由于视频信息十分丰富且信息量大,故对视频信号的处理、传输、
存储和显示等都提出了新的要求。因此,视频技术的研究和应用是目前信息技术领域最
热门的话题之一。
2.1 多媒体技术
多媒体究竟是什么?通常,每个人对此都有自己的观点。多媒体曾经被用来描述很
多东西,从复杂的新型交互式艺术到摇滚音乐会中闪烁的彩色聚光灯。但是多媒体是一
种真正的媒体,不能局限于一个简单的,有框架的定义。今天,这个词可能会更加模糊,
就象“数字化”这个词,在它的全盛时期也让入迷惑一样。
“多媒体”一词译自英文“Multimedia”,媒体(medium)原有两重含义,一是指存储
信息的实体,如磁盘、光盘、磁带、半导体存储器等,中文常译作媒质;二是指传递信
息的载体,如数字、文字、声音、图形等,中文译作媒介。从字面上看,多媒体就是由
单媒体复合而成的。多媒体技术从不同的角度有着不同的定义。有人定义多媒体计算机
是一组硬件和软件设备;结合了各种视觉和听觉媒体,能够产生令人印象深刻的视听效
果。在视觉媒体上,包括图形、动画、图像和文字等媒体,在听觉媒体上,则包括语言、
7
沈阳理工大学学士学位论文
立体声响和音乐等媒体。用户可以从多媒体计算机同时接触到各种各样的媒体来源。也
有人定义多媒体是 “文字、图形、图像以及逻辑分析方法等与视频、音频以及为了知识
创建和表达的交互式应用的结合体”。概括起来就是:多媒体技术是以数字技术为基础,
把通信技术(电话和传真),广播技术(电台和电视)和计算机技术融于一体,能够对
文字,图形,图像,声音,视频等多种媒体信息进行存储,传送和处理的综合性高新技
术。简言之,多媒体技术就是具有集成性、实时性和交互性的计算机综合处理声文图信
息的技术。在人类信息科学技术史上,它是继活字印刷,无线电-电视技术,计算机技
术之后的又一次新的技术革命,在信息社会中占有重要的地位。多媒体技术的发明,终
于使人和机器从原来的对立中摆脱出来,人性化的局面、虚拟现实的出现,直到人工智
能的进步,语音的输入使我们刹时感到PC已不再冰冷,芯片上已能出现人的情感,而
且是高智能的集成。
众所周知,早期的计算机仅处理数值或文字信息,其输入和输出信息只能以“文本”
的形式出现。20世纪80年代问世的图形用户界面,使计算机可用图形来参与人-机交互,
从此令用户界面面目一新。从20世纪90年代以来,多媒体技术逐步成熟,先后发布了
MPC 1.0,MPC2.0,MPC3.0等多媒体个人计算机技术规范,推动了多媒体计算机的性能不
断提高。
但是,多媒体技术的应用并不限于多媒体计算机。在现代生活中,从VCD光盘的
播放到电子出版物的制作,从多媒体万维网到电视会议的运行,处处都包含了多媒体技
术的应用。多媒体技术和计算机网络技术,已成为当代计算机应用中最热门的两个主题。
多媒体技术不仅集成了多媒体,而且集成可多种技术,包括计算机技术,通信技术,
电视技术和其他音像处理技术。通过在一个文件中把来自多个通道的信息同一获取,组
织,存储和合成,使文字,图像,声音等各种信息能在播放时同步的作用于我们的听觉,
视觉等感官,从而取得最佳的效果。在多媒体系统中,声音和活动着的视频图像都是与
时间轴密切相关的。随着多媒体技术的进步,多媒体系统已经具备对多媒体信息进行实
时处理的能力。可视电话,电视会议,远程教学,远程医疗,使千里之外的人物与场景
犹如近在咫尺,可面对面地实现对话。交互性是多媒体技术的关键特性之一。传统电视
中也包含了多媒体的信息,但它缺乏交互性,用户只能被动的收看。在多媒体系统中,
用户借助交互活动可控制信息的传播,甚至参与信息的组织过程,使之能够对感兴趣的
画面或内容进行记录或者专门的研究。
[8]
8
沈阳理工大学学士学位论文
我们知道,多媒体技术是建立在计算机技术的基础之上的,而计算机只能识别“0”,
“1”这两种二进制数据。因此在多媒体系统中,所有的多媒体信息都是用数字信号表示。
与传统电视使用的模拟信号相比,数字信号不仅易于进行加密,压缩等数值运算,因而
可提高信息的安全与处理速度;而且由于它只有“0”,“1”这两种状态,所以抗干扰能力
强,在信号存储和复制中能够达到更高的保真度,尤其是用于远程距离的无失真传输。
多媒体技术的无限发展需要计算机硬件的支持,早期的PC只能处理文本和数字,
借助键盘和显示器用文本媒体进行人-机交互。多媒体个人计算机(MPC)的诞生,使
计算机能够集声音,文,图,像的处理于一身,同时把人-机交互扩充到声音和图像等
媒体。所谓多媒体个人电脑(Multimedia Personal Computer, MPC)就是具有了多媒体处
理功能的个人计算机,它的硬件结构与一般所用的个人机并无太大的差别,只不过是多
了一些软硬件配置而已。一般用户如果要拥有MPC大概有两种途径:一是直接够买具
有多媒体功能的PC机;二是在基本的PC机上增加多媒体套件而构成MPC 。其实,
现在最近用户所购买的个人电脑绝大多都具有了多媒体应用功能。
[9]
一般的多媒体系统主要由四个部分的内容组成:多媒体硬件系统、多媒体操作系统、媒
体处理系统工具和用户应用软件。
(1)多媒体硬件系统: 包括计算机硬件、声音/视频处理器、多种媒体输入/输出设
备及信号转换装置、通信传输设备及接口装置等。其中,最重要的是根据多媒体技术标
准而研制生成的多媒体信息处理芯片、光盘驱动器等
(2)多媒体操作系统: 也称为多媒体核心系统(Multimedia kernel system),具有
实时任务调度、多媒体数据转换和同步控制对多媒体设备的驱动和控制,以及图形用户
界面管理等。
(3)媒体处理系统工具:或称为多媒体系统开发工具软件,是多媒体系统重要组成
部分。
(4)用户应用软件:根据多媒体系统终端用户要求而定制的应用软件或面向某一领
域的用户应用软件系统,它是面向大规模用户的系统产品。
一般来说,多媒体个人计算机(MPC)的基本硬件结构可以归纳为七部分:
①至少一个功能强大、速度快的中央处理器(CPU);
②可管理、控制各种接口与设备的配置;
③具有一定容量(尽可能大)的存储空间;
④高分辨率显示接口与设备;
9
沈阳理工大学学士学位论文
⑤可处理音响的接口与设备;
⑥可处理图像的接口设备;
⑦可存放大量数据的配置等;
这样提供的配置是最基本MPC的硬件基础,它们构成MPC的主机。除此以外,
MPC能扩充的配置还可能包括如下几个方面:
光盘驱动器:包括可重写光盘驱动器(CD-R)、WORM光盘驱动器和CD-ROM驱
动器。其中CD-ROM驱动器为MPC带来了价格便宜的650M存储设备,存有图形、动
画、图像、声音、文本、数字音频、程序等资源的CD-ROM早已广泛使用,因此现在
光驱对广大用户来说已经是必须配置的了。
音频卡:又称声卡,声卡用处理音频信息。它可以把话筒、唱机(包括激光唱机)、
录音机、电子乐器等输入的声音信息进行模数转换、压缩处理,也可以把经过计算机处
理的数字化的声音信号通过还原(解压缩)、数模转换后用扬声器放出或记录下来。声
卡和多媒体计算机中所处理的数字化声音信息通常有多种不同的采样频率和量化精度
可以选择,以适应不同应用场合的质量要求。采样频率越高,量化位数越多,质量越高。
图形加速卡:图文并茂的多媒体表现需要分辨率高,而且同屏显示色彩丰富的显示
卡的支持,同时还要求具有Windows的显示驱动程序,并在Windows下的像素运算速
度要快。所以现在带有图形用户接口GUI加速器的局部总线显示适配器使得Windows
的显示速度大大加快。
视频卡:可细分为视频捕捉卡、视频处理卡、视频播放卡以及TV编码器等专用卡,
其功能是连接摄像机、VCR影碟机、TV等设备,以便获取、处理和表现各种动画和数
字化视频媒体。
扫描卡:它是用来连接各种图形扫描仪的,是常用的静态照片、文字、工程图输入
设备。
打印机接口:用来连接各种打印机,包括普通打印机、激光打印机、彩色打印机等,
打印机现在已经是最常用的多媒体输出设备之一了。
交互控制接口:它是用来连接触摸屏、鼠标、光笔等人机交互设备的,这些设备将
大大方便用户对MPC的使用。
网络接口:是实现多媒体通信的重要MPC扩充部件。计算机和通信技术相结合的
时代已经来临,这就需要专门的多媒体外部设备将数据量庞大的多媒体信息传送出去或
接收进来,通过网络接口相接的设备包括视频电话机、传真机、LAN和ISDN等。
10
沈阳理工大学学士学位论文
多媒体计算机的具体应用除了要具有一定的硬件设备外,更重要的是软件系统的开
发和应用。自从多媒体计算机问世以来,许多国家和部门都在软件的的开发和应用上下
了很大功夫。Microsoft 、IBM、和Apple等公司相继推出了在基本功能上旗鼓相当的多
媒体软件平台,而其特点又都是在已有的操作系统上追加实现多媒体功能的扩充模块而
形成的,这就为用户提供了较为方便和实用的使用环境。在多媒体语言中,对存放在
CD--ROM上的多媒体应用软件产品,称作多媒体CD-ROM节目(Multimedia CD-ROM
Title)。在多媒体节目中包含了文本、图形、声音、动画和影视等视听媒体。这些多媒
体节目大致上可分为下列几个方面的应用:教育、商业、电子出版、娱乐、游戏以及通
信工程中的多媒体终端和多媒体通信系统。
多媒体技术主要应用于多媒体个人计算机、多媒体信息管理系统、多媒体通信、多
媒体电子出版物等,近期以来,运用多媒体手段来对学术科技期刊进行编辑加工、行政
管理和发行宣传,也成为一种显著的趋向。多媒体技术的应用将引发传统编辑手段的全
面变革。传统编辑方法与手段同多媒体技术结合后,将给未来学术科技期刊的编辑工作
带来全新的变化。
多媒体技术与计算机、网络技术、通信技术、数字技术的结合,使期刊出版工作过
程和学术科研信息传播不受时间、地点、国界、环境等影响,这将有利于提高世界信息
的流通速度,促进远隔重洋的各民族文化科技的及时交流。多媒体综合了报纸、广播、
电视等功能,将文字、声音、图像、动画等要素结合起来,这一结合也成为学术期刊编
辑、发行的一种全新形式,给受众以全方位的、多维的信息,光纤通道将电视网、电话
网、计算机网三网合一,使三大传统媒介开始走向高度的综合。充分利用多媒体文、图、
声、像的优势,有利于全面提高学术期刊编辑工作效率和刊物质量,促进电脑多媒体编
辑技术的有的放矢地发展,并为今后计算机技术的普及、繁荣打下良好基础。
多媒体编辑要处理大量的3D图形、 数字音频和视频信息, 还有从Web网络传来
的高带宽信息。加速图形端口(AGP)即将大量投入应用,这是一种用来连接CPU和
图形加速器、比PCI更快的总线,AGP 同时还提供图形适配器与系统内存之间的连接,
有了这种连接,在3D应用程序中就可以将大量的纹理贴图保存在系统内存中。近期出
版的一些专业电子排版系统,已集文字处理与图形图像处理功能于一身。不仅大大降低
了此前许多排版软件在文稿中植入特定图像时的繁琐操作和不便,而且可以利用软件提
供的多种绘图、制图功能,使非美工专业人员也能方便地制作出具有专业水准的图形图
11
沈阳理工大学学士学位论文
像,并通过手写板或扫描仪顺利实现图文混排。使数学、化学、物理等科学公式的排版
简便规范,同时提供各种流程图、电子电路以及各类图库。
IBM公司分别推出中、英文语音识别系统的语音录入软件,它们以声音接收装置为
媒介,将阅读文稿的语音直接转化成计算机上文本的版面,尽管目前此类软件在配置、
环境、程序设计等方面有不少尚待完善之处,但随着新的优化软件的不断问世,它必将
极大地提高文字输入的速度,从而最大限度地改变期刊计算机排版采用键盘输入的格
局。可以预见在不久的将来,我们真的可以与计算机进行交谈,正如一些科幻电影中描
述的一样,计算机可以听懂我们话语,并按我们所说的去做。
计算机辅助教学系统在教学上的运用,标志着教学媒体质的飞跃。计算机的应用,
使教学手段更加丰富,将对教学效果的提高起到促进作用。由于计算机是人脑的延伸,
是人脑思维活动的模拟,是对人类思维活动的结构、功能及其规律的把握,因此,其在
教学上的运用十分有利于学生的发展,符合现代化教学规律的要求。多媒体技术是信息
领域的又一次革命,在教学上,它既能向学生快速提供丰富多彩的集图、文、声于一体
的教学信息,又能为学生提供生动、友好、多样化的交互方式。
多媒体教学可产生优良的视听效果。因为人的视觉、听觉是接收信息的主要渠道,
获得的信息也最大。多媒体教学有利于信息传递和学生对信息的接受、储存。其特有的
优势对学生产生一定强度的刺激,引起学生的注意。如果没有注意,感知就不会产生强
烈观察力。而观察力是在感知过程中并以感知为基础形成起来的,离开了感知也就没有
了观察。利用多媒体的优势引人入胜,可以不断提高学生注意的品质,使学生心理活动
处于积极状态。
多媒体能克服时间和空间的限制。教学中常有一些宏观的自然现象、逝去的景色或
者需长时间才能感知的事物,因受时间和空间的制约,无法让学生亲眼看见;一些微观
的事物和微小的变化,无法通过仪器设备让学生进行观察,这些都是课堂教学难点。多
媒体的运用,为学生提供了形象生动、内容丰富、直观具体、感染力强的感性认识材料,
使学生看到了事物在运动、发展、变化。真情实感取代了凭空想象,难题无须多讲,“百
闻不如一见”。学生通过听、视、评、悟充分感知原先较为抽象的教学内容,适应了学
生从具体到抽象的认识规律,从而保证了教学活动的顺利进行。
多媒体教学是提高课堂教学效果的先进教学手段。多媒体的恰当运用,使课堂教学
活动更加符合学生的心理特点和认识规律,促使学生始终在愉悦的氛围中积极主动地获
取知识,学会学习,提高能力。学生当堂学习新知识,当堂消化吸收,无须课上损失课
12
沈阳理工大学学士学位论文
下补,减轻了学生的学习负担,提高了课堂教学效率。事实表明,许多好课使学生久久
不忘,对学生产生深远的影响。
随着计算机网络技术和计算机多媒体技术的发展,可视电话、视频会议系统将为人
类提供更全面的信息服务。可视电话可使单身在外的游子通过电视传真,身临其境地参
加新年的家庭聚会,也可以让分布在各地的工作人员讲座设计方案,交流经验。实际上,
多媒体系统现代商业、通信、艺术等人类工作和生活的各个领域,正改变着人类的生活
和工作的方式,描绘着一个绚丽多彩的划时代的多媒体世界。
2.2 视频格式及视频流播放回放
2.2.1 视频格式分类
视频大概有以下几种:本地影像视频;网络影像视频;手机电影视频。其中每类视
频又有各自的格式:
1、本地影像视频
AVI格式:它的英文全称为Audio Video Interleaved,即音频视频交错格式。它于
1992年被Microsoft公司推出,随Windows3.1一起被人们所认识和熟知。所谓“音频视
频交错”,就是可以将视频和音频交织在一起进行同步播放。这种视频格式的优点是图
像质量好,可以跨多个平台使用,其缺点是体积过于庞大,而且更加糟糕的是压缩标准
不统一,最普遍的现象就是高版本Windows媒体播放器播放不了采用早期编码编辑的
AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格
式视频,所以我们在进行一些AVI格式的视频播放时常会出现由于视频编码问题而造成
的视频不能播放或即使能够播放,但存在不能调节播放进度和播放时只有声音没有图像
等一些莫名其妙的问题,如果用户在进行AVI格式的视频播放时遇到了这些问题,可以
通过下载相应的解码器来解决。
nAVI格式:nAVI是newAVI的缩写,是一个名为ShadowRealm的地下组织发展
起来的一种新视频格式(与我们上面所说的AVI格式没有太大联系)。它是由Microsoft
ASF压缩算法的修改而来的,但是又与下面介绍的网络影像视频中的ASF视频格式有
所区别,它以牺牲原有ASF视频文件视频“流”特性为代价而通过增加帧率来大幅提高
ASF视频文件的清晰度。
13
沈阳理工大学学士学位论文
DV-AVI格式:DV的英文全称是Digital Video Format,是由索尼、松下、JVC等
多家厂商联合提出的一种家用数字视频格式。目前非常流行的数码摄像机就是使用这种
格式记录视频数据的。它可以通过电脑的IEEE 1394端口传输视频数据到电脑,也可以
将电脑中编辑好的的视频数据回录到数码摄像机中。这种视频格式的文件扩展名一般
是.avi,所以也叫DV-AVI格式。
MPEG格式:它的英文全称为Moving Picture Expert Group,即运动图像专家组格
式,家里常看的VCD、SVCD、DVD就是这种格式。MPEG文件格式是运动图像压缩
算法的国际标准,它采用了有损压缩方法减少运动图像中的冗余信息,说的更加明白一
点就是MPEG的压缩方法依据是相邻两幅画面绝大多数是相同的,把后续图像中和前面
图像有冗余的部分去除,从而达到压缩的目的(其最大压缩比可达到200:1)。目前MPEG
格式有三个压缩标准,分别是MPEG-1、MPEG-2、和MPEG-4,另外,MPEG-7
与MPEG-21仍处在研发阶段。
MPEG-1:制定于1992年,它是针对1.5Mbps以下数据传输率的数字存储媒体
运动图像及其伴音编码而设计的国际标准。也就是我们通常所见到的VCD制作格式。
使用MPEG-1的压缩算法,可以把一部120分钟长的电影压缩到1.2GB左右大小。这种
视频格式的文件扩展名包括.mpg、.mlv、.mpe、.mpeg及VCD光盘中的.dat文件等。
MPEG-2:制定于1994年,设计目标为高级工业标准的图像质量以及更高的传输
率。这种格式主要应用在DVD/SVCD的制作(压缩)方面,同时在一些HDTV(高清晰电
视广播)和一些高要求视频编辑、处理上面也有相当的应用。使用MPEG-2的压缩算法,
可以把一部120分钟长的电影压缩到4到8GB的大小。这种视频格式的文件扩展名包
括.mpg、.mpe、.mpeg、.m2v及DVD光盘上的.vob文件等。
MPEG-4:制定于1998年,MPEG-4是为了播放流式媒体的高质量视频而专门
设计的,它可利用很窄的带度,通过帧重建技术,压缩和传输数据,以求使用最少的数
据获得最佳的图像质量。目前MPEG-4最有吸引力的地方在于它能够保存接近于DVD
画质的小体积视频文件。另外,这种文件格式还包含了以前MPEG压缩标准所不具备的
比特率的可伸缩性、动画精灵、交互性甚至版权保护等一些特殊功能。这种视频格式的
文件扩展名包括.asf、.mov和DivX AVI等。
DivX格式:这是由MPEG-4衍生出的另一种视频编码(压缩)标准,也即我们通
常所说的DVDrip格式,它采用了MPEG4的压缩算法同时又综合了MPEG-4与MP3各
方面的技术,说白了就是使用DivX压缩技术对DVD盘片的视频图像进行高质量压缩,
14
沈阳理工大学学士学位论文
同时用MP3或AC3对音频进行压缩,然后再将视频与音频合成并加上相应的外挂字幕
文件而形成的视频格式。其画质直逼DVD并且体积只有DVD的数分之一。这种编码
对机器的要求也不高,所以DivX视频编码技术可以说是一种对DVD造成威胁最大的
新生视频压缩格式,号称DVD杀手或DVD终结者。
MOV格式:美国Apple公司开发的一种视频格式,默认的播放器是苹果的
QuickTimePlayer。具有较高的压缩比率和较完美的视频清晰度等特点,但是其最大的特
点还是跨平台性,即不仅能支持MacOS,同样也能支持Windows系列。
2、网络影像视频
ASF格式:它的英文全称为Advanced Streaming format,它是微软为了和现在的
Real Player竞争而推出的一种视频格式,用户可以直接使用Windows自带的Windows
Media Player对其进行播放。由于它使用了MPEG-4的压缩算法,所以压缩率和图像的
质量都很不错(高压缩率有利于视频流的传输,但图像质量肯定会的损失,所以有时候
ASF格式的画面质量不如VCD是正常的)。
WMV格式:它的英文全称为Windows Media Video,也是微软推出的一种采用独
立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。WMV格式的主要
优点包括:本地或网络回放、可扩充的媒体类型、部件下载、可伸缩的媒体类型、流的
优先级化、多语言支持、环境独立性、丰富的流间关系以及扩展性等。
RM格式:Real Networks公司所制定的音频视频压缩规范称为Real Media,用户
可以使用RealPlayer或RealOne Player对符合RealMedia技术规范的网络音频/视频资源
进行实况转播并且RealMedia可以根据不同的网络传输速率制定出不同的压缩比率,从
而实现在低速率的网络上进行影像数据实时传送和播放。这种格式的另一个特点是用户
使用RealPlayer或RealOne Player播放器可以在不下载音频/视频内容的条件下实现在线
播放。另外,RM作为目前主流网络视频格式,它还可以通过其Real Server服务器将其
它格式的视频转换成RM视频并由Real Server服务器负责对外发布和播放。RM和ASF
格式可以说各有千秋,通常RM视频更柔和一些,而ASF视频则相对清晰一些。
RMVB格式:这是一种由RM视频格式升级延伸出的新视频格式,它的先进之处
在于RMVB视频格式打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩
比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场景采用较低的编码
速率,这样可以留出更多的带宽空间,而这些带宽会在出现快速运动的画面场景时被利
用。这样在保证了静止画面质量的前提下,大幅地提高了运动图像的画面质量,从而图
15
沈阳理工大学学士学位论文
像质量和文件大小之间就达到了微妙的平衡。另外,相对于DVDrip格式,RMVB视频
也是有着较明显的优势,一部大小为700MB左右的DVD影片,如果将其转录成同样视
听品质的RMVB格式,其个头最多也就400MB左右。不仅如此,这种视频格式还具有
内置字幕和无需外挂插件支持等独特优点。要想播放这种视频格式,可以使用RealOne
Player2.0或RealPlayer8.0加RealVideo9.0以上版本的解码器形式进行播放。
QuickTime(MOV)是 Apple(苹果)公司创立的一种视频格式,在很长的一段
时间里,它都是只在苹果公司的 MAC 机上存在。后来才发展到支持 WINDOWS 平台
的,但平心而论,它无论是在本地播放还是作为视频流格式在网上传播,都是一种优良
的视频编码格式。到目前为止,它共有 4 个版本,其中以 4.0 版本的压缩率最好。
3、手机电影视频
AVI,RMVB,WMV适合有存储卡,带操作系统的智能手机。优点:视频质量好;
缺点:文件较大。
MP4适合所有手机,特别是带存储卡的手机,优点:图像清晰,文件大小适中。
3GP适合所有手机,特别是内存小的手机。优点:文件小。
很多人都对3GPP有一个误区就是质量差,其实不然。一个视频质量的好坏和很
多因素有关,比如源文件的质量,转换时设置的参数。之所以很多3GP的视频音质不好,
主要是因为音频设置是“语音”而不是“立体声AAC”的原因。特别是诺基亚的视频转换器
根本就没有AAC。所以很多人听到3GP觉得很差。
3GP是通讯业标准协议的格式。最大的优点就是视频文件可以压缩的很小。但同
时就会损失它的视频质量,但也不是所有的3GP视频都很差的。
一个视频质量的好坏跟视频文件的大小是成正比的。我举例说明:一个4分钟左
右的MTV,转换成音频设置为“语音”的3GP视频,文件大约为3M左右,甚至可以更
小(如果视频再设置的低些)。但如果视频设置为MPEG_4,音频为AAC_96k的话,
文件大小约为7M,甚至更大。这也就说明视频和音频设置参数越高,视频质量越好,
文件也就越大。
至于选择哪种格式的视频传到我们的爱机上,还要根据自己手机的能力和需求而
定啦!
其实AVI的格式设置的对的话,文件也不太大,大小和3GP的差不多!如果手机
支持AVI格式,我推荐使用AVI格式的影音,手机端也可以用AVI格式的,不一定都
得有扩展卡。优点:不光是图象清晰,而且支持全屏播放,快进后退,亮度调节等。
16
沈阳理工大学学士学位论文
还有一些大家常用的格式也可以说是视频文件,象FLASH这类动画,经常见到的
格式是SWF,我们也可以用专业软件进行转换以后压缩成自己想要的格式。
2.2.2 视频流播放与回放
视频流(Video Streaming)是指视频数据的传输,例如,它能够被作为一个稳定
的和连续的流通过网络处理。因为流动,客户机浏览器或插件能够在整个文件被传输完
成前显示多媒体数据。视频流技术基于 2 密钥技术,视频译码技术和可升级的视频分
发技术发展。
流媒体系统的组成 流媒体系统包括以下5个方面的内容:
1. 编码工具:用于创建、捕捉和编辑多媒体数据,形成流媒体格式
2. 流媒体数据
3. 服务器:存放和控制流媒体的数据
4. 网络:适合多媒体传输协议甚至是实时传输协议的网络
5. 播放器:供客户端浏览流媒体文件 这5个部分有些是网站需要的,有些是客户
端需要的,而且不同的流媒体标准和不同公司的解决方案会在某些方面有所不同。
17
沈阳理工大学学士学位论文
3 OPENCV库使用
OpenCV全程open source computer vision library.是Intel开发的一个计算机视觉库,
包含了多种计算机图形图像处理的库,目前版本为V1.0,可以在商业和研究领域免费实
用。主要用于处理 图像处理计算机视觉模式识别物体识别(人脸识别,Object识别) 运
动跟踪 等等方面,源库由C和一少部分C++写成。包含了很多算法的实现,而且而且,
她有python版本的移植,想象一下,一个高效率的图形处理库(跟pil不是一个方向,没
有可比性)与一个高效率的开发语言python结合。
OpenCV逐步成为一个通用的基础研究和产品开发平台。OpenCV由一系列 C函数
和C++类构成,功能涵盖图像处理、计算机视觉和模式识别等领域。OpenCV实现了大量
通用算法,涉及到图像处理、结构分析、运动检测、摄像机定标、三维重建以及机器学
习等方面,并有较高的运行效率。
目前,计算机视觉市场巨大而且持续增长,且这方面没有标准API,面临着研
究代码(慢,不稳定,独立并与其他库不兼容)、耗费很高的商业化工具(比如
Halcon, MATLAB+Simulink)、依赖硬件的一些特别的解决方案(比如视频监控,
制造控制系统,医疗设备)的现状
综上所述,标准的API将简化计算机视觉程序和解决方案的开发。OpenCV即
是为此目的开发的API库。
3.1 在VC下安装OpenCV
首先安装OpenCV,本设计应用的是OpenCV 1.0版本。在网上下载了OpenCV 1.0
版本压缩包,然后解压压缩包,双击图标。依步骤安装到“C:Program
FilesOpenCV”目录下。在安装时选择"将OpenCVbin加入系统变量"(AddOpenCVbin to
the systerm PATH)。
18
沈阳理工大学学士学位论文
安装过程如图3.1—3.4所示:
图3.1 开始安装
图3.2 选择安装路径
19
沈阳理工大学学士学位论文
图3.3 设置系统变量
图3.4安装进度
20
沈阳理工大学学士学位论文
使用VC 6.0调用OpenCV之前,还需做如下配置:
(1)运行VC 6.0,打开opencv/_make目录下的文件 然后点击'组建(Build)
'->' 批组建(Batch Build)'(编译大概几分钟)。
(2)点击'工具(Tools)'->'选项(Options)'->'目录(Directories)选项卡', 在Include
files下添加:
C:Program FilesOpenCVcvinclude
C:Program FilesOpenCVotherlibshighgui
C:Program FilesOpenCVcxcoreinclude
C:Program FilesOpenCVotherlibscvcaminclude
(3)在Library files下添加
C:Program FilesOpenCVlib
(4)在Source files下添加
C:Program FilesOpenCVcvsrc
C:Program FilesOpenCVcxcoresrc
C:Program FilesOpenCVcvauxsrc
C:Program FilesOpenCVotherlibshighgui
C:Program FilesOpenCVotherlibs_graphicssrc
(5)|*谨记*|:每次建立工程,运行前在'工程(Project)'->'设置(Settings)'->'连接(Link)
选项卡'->'对象/库模块(Object/library modules)' 中添加:
21
沈阳理工大学学士学位论文
4 VC开发环境
Visual C++6.0 是运行在 Windows 平台上的交互式的可视化集成开发环境。一方
面,Visual C++(简称 VC)与 Windows 平台的结合十分完美,利用它开发的程序具
有强大的功能;另一方面,它与 Windows 同步更新的优势对程序员也具有极强的吸引
力。
C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程
序员用C语言较得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序设
计方法就显出它的不足。C程序的设计者必须细致地设计程序中的每一个细节,准确地
考虑到程序运行是每一时刻发生的事情,例如各自变量是如何变化的,什么时候应该进
行哪些输入,在屏幕上应该输出什么等。这对程序员的要求是比较高的。如果面对的是
一个复杂的问题。程序员往往感到力不从心。当初提出结构化程序设计方法的目的是解
决软件设计危机,但是这个目标并未完全实现。为了解决软件设计危机,在20世纪80
年代提出了面向对象的程序设计,在这种情况下,C++应运而生。C++是由贝尔实验室
的Bjarne Stroustrup博士及其同事在C语言的基础上开发成功的。C++保留了C语言原
有的所有优点,增加了面向对象的机制。C++与C完全兼容,用C语言写的代码可以不
加修改的用于C++。从C++的名字就可以看出它是对C语言的扩充,是C的超集。它
既可用于结构化程序设计,又可用于面向对象的程序设计,因此它是一个功能强大的混
合型的程序设计语言。
[10]
Visual Studio集成开发环境(IDE)提供了一组工具,它集成了创建、编译、连接
和测试Windows应用程序的功能。开发环境提供这一组工具,完全是为了开发和调试
更加方便,VC++包括了VC++编译器工具、VC++库及VC++开发环境。
[11]
4.1 VC++的组件工具
VC++提供了强大而灵活的开发环境,可用于创建基于Microsoft Windows的和基于
的应用程序。它可作为集成开发系统使用,也可作为一组独立的工具使
用。
22
沈阳理工大学学士学位论文
VC++由如图4-1所示的组件组成。
图4.1 VC++的组件关系
开发环境
用户编写代码 VC++库
调用
编辑器 得到运行结果
下面分别介绍这3种工具。
4.1.1 编译器工具
VC++编译器工具是由源代码编译成目标代码,在编译过程发现程序的错误。比如
由于程序存在不可识别的代码而引起的错误,或者由程序结构引起的错误。该编译器支
持传统本机代码开发人员和面向虚拟机平台(如CLR,公共语言运行库)的开发人员。
VC++包括面向x64和Itanium的编译器。该编译器仍支持直接面向x86计算机,并且针
对这两种平台优化了性能。
4.1.2 VC++库
VC++库包括行业标准活动模板库(ATL)、Microsoft基础类(MFC)库及各种标
准库(如标准C++库),这些标准库由iostream库、标准模板库(STL)和C运行时库
(CRT)组成。CRT包括已知引起安全问题的函数的安全增强替代项。STL/CLR库为
托管代码开发人员引入了STL。具有数据封送新功能的C++支持库,其设计意图在于简
化面向CLR的程序,这些库减少了程序员的工作量。
23
沈阳理工大学学士学位论文
4.1.3 VC++开发环境
该开发环境为项目管理与配置(包括更好地支持大型项目)、源代码编辑、源代码
浏览和调试工具提供强力支持。该环境还支持IntelliSense,在写代码时,该功能可以提
供智能化且特定于上下文的建议。在VC++的编辑区,能够自动识别C++语言的关键字
和Windows的关键字,有助于编程人员在编写程序时检查错误。其调试工具方法为断
点调试、堆栈调试及跟踪调试等。
除常规的图形用户界面应用程序外,VC++还允许开发人员生成Web应用程序、基
于Windows的智能客户端应用程序及适用于客户端和智能客户端移动设备的解决方案。
C++是世界上最流行的系统级语言,而VC++则为开发人员提供了生成软件的世界级工
具。
24
沈阳理工大学学士学位论文
5 视频播放器的设计与实现
5.1 模块划分
本播放器的主要任务和目的是播放常见的AVI格式视频文件,其主要划分为下面五
个功能模块,每个功能模块的作用描述如下:
用户界面:设计一个用户界面,界面上有打开、播放、暂停、停止、进度显示、退
出等按钮及视频显示窗口。
文件控制;主要用于打开播放文件,本程序支持的格式主要是AVI格式。
播放控制;控制视频的播放状态。播放状态有播放、暂停、停止三种状态。
进度控制;显示当前视频的总长度和已播放的长度,可以使用鼠标拖放进度条,跳
跃式快速播放。
系统说明;关于(about)说明,提示说明本播放器的一些信息,比如播放器能播放的格
式,播放器的开发人开发时间等。
5.1.1 播放器功能模块图
图5.1 功能模块图
25
沈阳理工大学学士学位论文
5.2 详细设计
5.2.1 主界面的实现
许多播放器都有自己的用户界面,设计一个用户界面是一个常见的任务。本节主要
讲述如何根据上述的功能模块图实现具体的功能。
下图一为本播放器的原始界面,由Microsoft Visual Studio 6.0中已安装模板Windows
应用窗体程序(MFC)生成,所用的控件、组件、容器、菜单、工具栏、对话框等都是
有MFC提供(如果所要使用的控件等没有提供,则需个人编写)。其中图片可以自己绘
制,组件、控件等可用自己编写代码做成最适合自己要求的,这样做出来的东西色彩比
较统一,界面比较美观大方,但那样做相当的麻烦,特别是编写新的组件、控件等有很
多困难。编写本程序由于时间有限,图片是下载的,所以在美观上有所欠缺。以后如有
时间,另行绘制。由于界面是控件、组件等拖放组成,大部分代码有窗体设计器自动生
成,需个人改动的并不多,所用这部分就不详细说明了。
对用户界面添加控制按钮如:打开、播放、暂停、停止、推出等。形成一个比较直
观、易懂、方便的用户界面。如图5.2所示:
图5.2 播放器用户界面
26
沈阳理工大学学士学位论文
主窗体头文件显示如下:
Class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
Protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
27
沈阳理工大学学士学位论文
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
5.2.2 文件控制的实现
打开文件的功能是许多应用程序的一个常见任务。MFC命名空间包含了一组常用对
话框,支持这些类型的活动。在本程序中我们使用的是OpenFileDialog类,OpenFileDialog
类表示常用的文件对话框,用于从磁盘上加载一个文件,是用于打开现有文件的标准类。
部分实现代码如下:
void CIVSDlg::OnOpen()
{
// TODO: Add your control notification handler code here
//打开文件前,先关闭当前正在播放视频文件
if(IsPlaying)
{
MessageBox("请先停止当前文件的播放","提示",0);
//GetDlgItem(IDC_STOP)->SetFocus();
return;
}
28
沈阳理工大学学士学位论文
if(IsAviFile)
{//关闭先前已经打开了AVI视频文件
ile();
}
//打开视频文件
CString szFilters="Data Files (*.avi)|*.avi|All Files (*.*)|*.*||";
CFileDialog
fileDlg(TRUE,NULL,"*.avi",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFilters,this
);
if (l()==IDOK)
{
KillTimer(1);
pwnd=GetDlgItem(IDC_STATIC1); //获取显示视频图像的控件ID
pdc =pwnd->GetDC();
hdc=pdc->GetSafeHdc(); //获取句柄
GetDlgItem(IDC_STATIC1)->GetClientRect(rect); //获取控件的RECT
if(deo(hName(),hdc,rect)) //构造视频播放对象
{
IsAviFile=TRUE; //当前用户选择了播放AVI视频文件
framepos=0; //第一帧播放
deo(0); //预览第一帧图像
//初始化对话框界面
GetDlgItem(IDC_PLAY)->EnableWindow(TRUE);
GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
GetDlgItem(IDC_PAUSE)->EnableWindow(TRUE);
m_ge(0,myvideo.m_totalframes);//设置滑动范围
m_Freq(1);//每1个单位画一刻度
m_(0);
29
沈阳理工大学学士学位论文
m_totalframes=myvideo.m_totalframes;
UpdateData(FALSE);
}
}
Windows窗体Listbox 控件显示运行结果如图5.1所示:
图 5.1 主窗体
5.2.3 播放控制的实现
播放才是一个播放器最重要的功能。Windows 提供了丰富的多媒体服务功能,包括
大量从低级到高级的多媒体API函数。利用这些功能强大的API,用户可以在不同层次
上编写多媒体应用程序.这里简要地介绍一些最常用的多媒体服务。
MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文
件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、
录像等多媒体设备,而不需要知道它们的内部工作状况。应用程序通过向MCI发送命令
来控制媒体设备。MCI命令接口分命令字符串和命令消息两种,两者具有相同的功能。
30
沈阳理工大学学士学位论文
命令字符串具有使用简单的特点,但是它的执行效率不如命令消息。(mciSendString,字符
串消息。 mciSendCommand,命令消息) 所有的MCI命令字符串都是通过多媒体API函数
mciSendString传递给MCI的,该函数的声明为:
MCIERROR mciSendString(
LPCTSTR lpszCommand, //MCI命令字符串
LPTSTR lpszReturnString, //存放反馈信息的缓冲区
UINT cchReturn, //缓冲区的长度
HANDLE hwndCallback //回调窗口的句柄,一般为NULL
); //若成功则返回0,否则返回错误码。
该函数返回的错误码可以用mciGetErrorString函数进行分析,该函数的声明为:
BOOL mciGetErrorString(
DWORD fdwError, //函数mciSendString或mciSendCommand返回的错误码
LPTSTR lpszErrorText, //接收描述错误的字符串的缓冲区
UINT cchErrorText //缓冲区的长度
);
本文播放AVI视频代码如下:
void Video::PlayVideo(int frame_pos) //播放视频,即显示当前帧的图像到控件
{
if(frame_pos>m_totalframes)
{
return;
}
m_framepos=frame_pos; //播放帧开始位置
cvSetCaptureProperty(m_pcapture,
(m_framepos%m_totalframes)); //设置播放帧位置
m_pframe=cvQueryFrame(m_pcapture); //获取一帧
if(m_pframe)
CV_CAP_PROP_POS_FRAMES,
31
沈阳理工大学学士学位论文
{
m_(m_pframe,1);
m_HDC(m_hdc,&m_rect); //显示到控件
}
}
class Video : public CDialog
{
public:
Video();
int OpenVideo(CString FilePath,HDC hdc,CRect rect); //打开FilePath视频文件,
并设置好显示区域等参数
void CloseFile(); //关闭播放文件
void PlayVideo(int frame_pos); //播放第frame_pos帧视频
void PauseVideo(); //暂停播放
void StopVideo(); //停止播放
int GetPlaySpeed(); //得到视频文件的播放速度
virtual ~Video();
public:
CvvImage m_showimage; //CvvImage对象,用于显示帧到控件
IplImage *m_pframe; //获取帧
CvCapture *m_pcapture; //捕获
CString m_filepath; //文件路径
CRect m_rect; //播放区域
HDC m_hdc; //用于显示帧图像的句柄
bool m_isplay; //判断是否播放中
int m_framepos; //帧位置
int m_totalframes; //帧总数
int m_fps;
32
沈阳理工大学学士学位论文
UINT m_timer; //定时器
int m_speed; //播放速度
};
#endif
播放开始与播放过程如图5.3和图5.4所示:
图5.3 播放开始
图5.4 播放过程中
33
沈阳理工大学学士学位论文
5.2.4 进度控制的实现
进度控制的实现其实在上节就略有提及,其实就是把进度条和当前播放长度同步结
合起来,并能使用鼠标随意拖放进度条进行选择性播放。
而本程序中就是通过改变Value的值实现进度条和当前播放时间的同步。当鼠标拖动
进度条时也就是跟踪条的Value属性值发生变化,此时事件OnHScroll发生。在实现这个
功能时还需用到
MCIWndPlay
属性。位置是浮点型的,注意这里以 帧为单位。代码如下:
void CIVSDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CSliderCtrl *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
framepos=pSlidCtrl->GetPos();//取得当前位置值
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
Void CIVSDlg::OnAbout ()
{
CAboutDlg dlg;
l();}
5.2.5 系统声明
这部分功能比较简单,也的非常容易实现的,只需调用个MFC中AboutBox消息对
话框即可。AboutBox显示一个通知用户的包含文本、按钮、符号的消息框。其参数:Caption
在消息框中显示文本信息;name 显示消息框的名称;在消息框中显示指定的按钮如“确
定”。系统说明界面如下图5.5所示。
图5.5 系统声明界面
34
沈阳理工大学学士学位论文
6 程序运行结果及分析
程序编写完成后对程序进行差错,没有错误后按F5运行程序。生成快捷
方式。
6.1 运行结果测试
1. 首先运行,界面如下:
图6.1 初始界面
35
沈阳理工大学学士学位论文
2. 选择打开按钮,弹出打开对话框,如图6.2所示
图6.2 打开界面
3. 选择一个视频并打开,视频被添加到播放器中,如图6.3所示:
图6.3 视频准备就绪界面
36
沈阳理工大学学士学位论文
4. 点击播放按钮即可播放当前视频,进度控制可以控制视频播放的进度,如图6.4所
示:
图6.4 视频播放界面
5. 单击暂停按钮当前播放视频暂停,左侧图像状态显示为暂停。单击停止按钮播放停止,
当再次点击播放时,视频从头开始播放。
6. 点击退出按钮,关闭播放器。
6.2 结果分析
通过上述调试,播放器实现了对AVI视频文件的播放、暂停、停止、进度拖动等要求。
说明本课题设计成功。
37
沈阳理工大学学士学位论文
结 论
本文详细介绍了基于OpenCV视频播放器设计的过程,通过设计、调试,最终实现
了播放器设计,并实现了播放器对AVI视频文件的播放、暂停、停止、进度拖动等要求。
通过对软件的调试发现自己所学的知识还很浅薄。从接到设计任务书开始,收集相关资
料,深入了解课题,制定课题研究方案,到完成相应的功能设计历时16周。表面看时间
很充裕,其实在这期间要完成相应的设计,时间还是很紧的。因为整个设计需要查阅大
量资料,了解OpenCV计算机视觉库的功能、特点和应用;还要学习掌握Microsoft Visual
Studio 6.0软件编程环境,并且还要用该平台设计基于OpenCV的视频播放器,一时间真
是无从下手。幸好在导师的细心指导下,在同学的无私帮助下,在自己的不懈努力下,
终于克服了开发前期的茫然;攻克了前期软件调不通和程序运行错误的难题,完成了本
次课题设计。
通过本次课题设计,我了解了软件开发的过程,熟悉了Microsoft Visual Studio 6.0软
件开发平台,学习了OpenCV计算机视觉库的功能、特点和应用。掌握了把大学所学的
理论知识转化为实践的能力,同时也对软件开发产生了一定的兴趣,我相信这次的毕业
设计对我以后的工作生活有很大的帮助。
在本软件的开发过程中,由于本人是初次开发软件,在知识、经验方面都存在着很
多不足。请老师指点。
38
沈阳理工大学学士学位论文
致 谢
另外还要感谢电子科学与技术教研组的所有老师正式在他们的帮助下我才能学到相
关的专业知识,才使我有条件去完成本次设计。
此外,能顺利的完成我的论文也离不开陪伴我走完大学四年的同学,是他们给了我
家一般的感觉,让我的大学生活不孤独,安心去学习文化知识。
最后 再次向上述的老师和同学们表示衷心的感谢!谢谢你们!
39
沈阳理工大学学士学位论文
参考文献
[ 1 ] Gary Bradski, Adrian Kaehler著.于仕琪, 刘瑞祯译.学习OPENCV(中文版).清华大
学出版社,2009年
[ 2 ] 谭浩强.C程序设计(第三版).2005年7月第3版.清华大学出版社,2005年
[ 3 ] 三扬科技.Visual C++开发入行真功夫.2009年4月第1版.电子工业出版社,2009年
[ 4 ] 孙鑫,余安萍.VC++深入详解.2006年6月第1版.电子工业出版社,2006年
[ 5 ] 赵仕.视频技术介绍.2007年4月第2版.西安电子科技大学出版社,2007年
[ 6 ] 林福宗.多媒体技术基础.第2版.清华大学出版社,2002年
[ 7 ] 钟玉琢.多媒体计算机技术基础及应用.清华大学出版社,2006年
[ 8 ] 胡晓峰,吴玲达,老松杨,司光亚.多媒体技术教程.第3版.人民邮电出版社,2009
年
[ 9 ] 李泽年.多媒体技术教程.机械工业出版社,2007年
[10] Waite,著.范植华,樊莹译.新编C语言大全.清华大学出版社,1994年
[11] Davis Chapman著.骆长乐译.学用Visual C++ 6.0.清华大学出版社,1999年
[12] David nski. ProgrammingVisualC++(FifthEdition) Micrsoft Press,2001
[13] Gary Bradski,Adrian ng OpenCV: Computer Vision with the OpenCV
Library. Southeast university press,2009
[14] Walter te C++ (2nd Edition).Addison Wesley,2006
40
沈阳理工大学学士学位论文
附录A 英文原文
Avi and multimedia is introduced
AVI (Audio_Video Interleaved) is put forward under the Window in Microsoft video using
standard. In a series of bitmap to store information, and video files to join in the form of digital
video information stored in digital information is composed by a group of files. AVI files with
short, large amount of files. And avoid many traditional animation playback problems.
Multimedia control interface definition of Microsoft Windows are MCI multimedia interface
standards. Provide high-level, independent of equipment, control of various multimedia
equipment orders. Main equipments, such as multimedia cd-roms, VCD, CD player, audio and
video digital waveform can command control. MCI Using multimedia control interface MCI for
multimedia programming has the following advantages:
First, the various media device interface encapsulation details of the specific control,
programmers through multimedia control interface operation control multimedia equipment,
shorten the development of multimedia applications, the efficiency and reduce the cost.
Secondly, MCI is a high-level access multimedia equipment, independent of equipment, the
original function for hardware, control parameters, such as changes, improve the procedures of
portability and reliability.
Furthermore, the function is strong, programmers in MCI level of programming, make
multimedia application development easier.
Vc + + platform and language
C language is structured and modular language, it is facing the process. In dealing with a
smaller program, the programmer is handy with C language. But when the problem is more
complex, the program of big, structured programming method will show it. C program
designers must careful design program in every detail, the accurate considering program
operation is every moment of things, such as how to change their variables is, when should be
conducted on screen, which input should be what output. The programmer is relatively high. If
41
沈阳理工大学学士学位论文
the face is a complex problem. Programmers often feel inadequate. Initially proposed structured
programming method of software design purpose is to solve this crisis, but not completely
realized. In order to solve the crisis of software design, put forward in the 1980s object-oriented
program design, in this case, the c + + arises at the historic moment. C + + is Bjarne Stroustrup
by bell LABS, and colleagues in C language developed on the base of success. C + + retained
the original all advantages, increases the object-oriented mechanism. C + + is fully compatible
with C write the code can not add modification for C + +. In C + + name can see it on the
expansion of the C language, is C superset. It can be used for structural design program, and can
be used in object-oriented programming, so it is a powerful mixture of programming language.
Visual c + + 6.0 is run on Windows platforms of interactive Visual integrated development
environment. On one hand, Visual c + + (hereinafter referred to as the VC) and perfect
combination of Windows platforms, and use it to develop powerful function of the program, On
the other hand, it with Windows update to the advantage of strong programmers are attractive.
Visual Studio integrated development environment (IDE) provides a set of tools, it integrates
create, compilation, links, and application of the functional test Windows. This group provides
development environment for development tools, completely is more convenient and debugging,
vc + + include vc + + compiler tools, vc + + libraries and vc environment.
Vc + + compiler tool by source code in a target, compile process procedure. Due to the existing
procedures for identifying code not caused by error, or program structure erroneous. The
compiler support traditional machine code developers and facing the virtual machine platform
(such as the CLR, the common language runtime) developers. Vc + + include x64 Itanium and
facing the compiler. The compiler still support directly facing in the computer, and non-x86
platforms to optimize the performance of two.
Vc + + library include industry standard template library (ATL) activities, Microsoft basic class
(MFC library and all kinds of standard library) (such as standard C + + library), these standards
by the iostream library, standard template library (STL) and C runtime library (CRT). CRT
including known to cause problems of safety enhancement of the function of alternative.
STL/CLR managed code library for developers STL is introduced. Has the new function of
sealing to send data c + + library, its design is intended for the simplified procedures, the CLR
library reduced workload of programmers.
42
沈阳理工大学学士学位论文
Vc environment for project management and configuration (including better support large-scale
projects), the source code editor, browse and debugging tools provide strong support. The
environment also support in writing code IntelliSense, this function can be provided in the
context of intelligent and specific Suggestions. The editing area in vc + + to automatic
identification of the c + + language keywords and Windows keyword, helps programmers
writing program to check for errors. The debugging tools for the breakpoint debugging method
and debugging and tracking commissioning stack.
Besides conventional GUI application, vc + + also allows developers to generate Web
applications, based on the Windows of the intelligent client applications and applicable to the
client and the client mobile equipment solutions. C + + is the world's most popular language,
and the system of vc + + is a world-class software tools generated.
WMF SDK profile
Windows is the Microsoft corporation development of Media streaming Media technology,
digital Media has become a professional platform. Windows Media clusters are a group of
bottom SDKS application programming interface (API), its processing using the data structure
of ASF. Windows Media Media Windows SDK clusters of Media Player, core, Windows
Media Windows Media Services have identified Encoder and Windows are used to provide the
core files I/O, networking and digital rights management (DRM) support.
WMF SDK system structure
WMF SDK used the object-oriented design, is a set of completely based on COM component
model of senior setups. It introduced the generator, reading, editor as well as the ASF formats,
shielding network data transmission control are at the bottom of streaming media technology
implementation details, the upper left is for developers use programming interfaces.
Windows SDK with many Media clusters with ASF files of functions, but its core function is
written documents. This paper mainly introduces the basic task system structure.
43
沈阳理工大学学士学位论文
Generator structure
Using the Windows Media clusters of constructing the SDK application will transfer to the
source Media sample generator. Generator used in configuration files specified Settings on files.
Configuration file object code file format has been defined, including each flow of detailed
information and how should flow of information. Most of the audio and video coding by a
Media Windows codecs. But first, coding manager with a switch to handle data, preparing for
the compression. When the sample can add file, transfer to multiplexing, multiplexing device
according to the time of presentation from all of the data and the usual frame-rate sample pack.
Multiplexing for the creation of a flow is transferred to a receiver, receiver for final destination
with I/O, whether it is a disk file or the Internet or other network broadcasting.
Read the structure
Reading process and data writing process, but basically is the opposite of the order. Reading is
connected to the source, the source documents may be, network connection or custom. Open the
file data can be divided into a single, data flow, and then the sample solution samples (if the
DRM protected), and through the corresponding Windows Media coding processing decoder.
By default, the internal reading will be appropriate for ASF flow data decoder uncompress.
WMF SDK programming environment configuration
WMF SDK only suitable for C/C + + programming language, develop platform can be vc + +
6.0 or Visual was introduced in this paper, the method of VC6.0 set.
Open VC + + 6.0, select menu commands and portugues e, click on "Directories, reports in
Directories for the drop-down menu, then choose Include SDKS installation path in
VC standards before the path.
In the development of Project application, Debug version also need VC6.0 following Settings:
select menu commands the Project Settings, enter tags in Category link drop-down list before
44
沈阳理工大学学士学位论文
the choose and winmm wmvcore. and file Object/library modules, and select its
default all subscription-based.
Introduction: the history of DivX
ISO released "low bit rate activity image and speech compression standard", sorting MPEG -
4,1998 October 1998 edition approved in April 1994, and announced the second edition and
calibration model (VM), mpeg-4 official Numbers is ISO/IEC international standard 14496, it is
a new type of multimedia standard, it is an important and standard, is a difference on the object
code compression standard, defined code rate control target is obtained under the code rate in a
given quality, it is optimal for Internet video transmission quality of multimedia technology
platform provides a very good.
In 1998, was the first in the Microsoft PC using mpeg-4 encoder, it includes MS MPEG4V1,
MS MPEG4V2, MS MPEG4V3 series, including coding code V1 and V2 used to make AVI
files, until now, it is the default components as Windows, but V1 and V2 coding quality is not
very good, until MS MPEG4V3 began to have better graphics, a significant progress, but
somehow Microsoft for what purpose, but the video coding the MS MPEGV3 kernel, its
application in the Windows just Media streaming Media technology, also is our familiar ASF
streaming Media files. ASF files although there are some advantage, but because of excessive
can be widely applied to edit, it has angered the fear that a daring video to delve into video
coding hackers and ace, later, the team not only resolves the video coding, Microsoft and their
modification, a new kind of video coding born: that is widely circulated MPEG encoder -
DivX3.11.
Using MS MPEGV3 DivX, improved and join oneself function call DivX3.11, it is also the
Internet using common mpeg-4 encoder. Soon, DivX to freak was almost become the industry
standard, but also quickly appeared, DivX foundation technology is illegal theft of Microsoft,
Microsoft says will promote the development of all people, DivX to pursue, but one of the
creators of the technical DivX Rota) is about (comprehensive application, which is based on the
legalization DivX Window from the DivX although invented, but did not use any Microsoft
45
沈阳理工大学学士学位论文
technology and new company DivXNetworks to DivX, DivX (known as compressed movie)
vigorous development tide is overwhelming.
The story seems to any attract eyeball in key happens all the time, but also cannot DivX
development from this convention, the smooth development period, DivX DivX technology
mature gradually, unlimited business opportunities, a play on the DivXNetworks, original is get
rid of Microsoft technical closed, therefore, a fully open-source projects, called "Projet Mayo",
the goal is to develop a set of new, open source software, MPEG4 coding because it completely
meet ISO MPEG, is completely open source, OpenDivXCODEC attracted many software,
video player involved, soon developed a higher performance in Encore2 encoder, the most
brilliant period, DivX DXN company suddenly closed DivX, and Encore2 source on the basis
of its products DivX4 released, DXN have left his door, DivX to LGPL agreement, rather than
is the GPL, although they are public license agreement, safeguard the free use and modify the
software or source of power, but the LGPL DXN is a private, allowing the use of this agreement,
the first play out every sword.
Then, many are DXN company gave out the video software, other groups, gradually to gather
development strength, high standard, in revenge OpenDivX version, again, developed a new
mpeg-4 coding - XviD, name of the order and DviX contrary, only from the name can see XviD
full power of revenge.
DivX is nearly two years dominating network video image compression coding standard. At
first it is Microsoft MPEG video coding based on the standard 4 modified and developed, and
the free way. Its characteristic is very good with the compression ratio, can be a DVD movie
compressed into the quality of a cd-r cd-rom. Now DivX into normal version and Pro version,
the latter is still charging and make (advertising) version of the two, bringing DivX Player
procedures. If a user installed free DivX Codec, usable also Windows Media player watch
movies. DivX
46
沈阳理工大学学士学位论文
附录B 中文翻译
Avi及多媒体介绍
AVI(Audio_Video Interleaved)是微软提出的在Window下使用的视频标准。以一系
列的位图来存储视频信息,并在文件中加入数字形式存储的数字化视频信息 ,实际上是
由一组信息流组成的文件。AVI文件具有文件短,信息量大的优点。并避免许多传统的
动画播放所遇到的问题。
多媒体控制接口MCI是Microsoft Windows定义的多媒体接口标准。提供高层的,独
立于设备的,控制各种多媒体设备的命令。现有主要的多媒体设备,如CD-ROM,影碟
机、激光唱机、波形音频、数字视频等都可以MCI命令进行控制。使用多媒体控制接口
MCI进行多媒体编程具有如下优点:
首先,接口封装了各种媒体设备的具体控制细节,编程人员通过多媒体控制接口操
作控制多媒体设备,缩短开发多媒体应用程序的时间,提高了开发效率,降低了开发成
本。
其次,MCI是一种访问多媒体设备的高层方法,独立于设备,使原有函数不会因硬
件设备、控制参数等的改变而改变,提高了程序的可移植性和可靠性。
再者,功能强大,编程人员只需在MCI层面上进行编程,使多媒体应用程序开发变
得更加简单。
VC++语言及开发平台介绍
C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程序
员用C语言较得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序设计
方法就显出它的不足。C程序的设计者必须细致地设计程序中的每一个细节,准确地考虑
到程序运行是每一时刻发生的事情,例如各自变量是如何变化的,什么时候应该进行哪
些输入,在屏幕上应该输出什么等。这对程序员的要求是比较高的。如果面对的是一个
复杂的问题。程序员往往感到力不从心。当初提出结构化程序设计方法的目的是解决软
件设计危机,但是这个目标并未完全实现。为了解决软件设计危机,在20世纪80年代
47
沈阳理工大学学士学位论文
提出了面向对象的程序设计,在这种情况下,C++应运而生。C++是由贝尔实验室的Bjarne
Stroustrup博士及其同事在C语言的基础上开发成功的。C++保留了C语言原有的所有优
点,增加了面向对象的机制。C++与C完全兼容,用C语言写的代码可以不加修改的用
于C++。从C++的名字就可以看出它是对C语言的扩充,是C的超集。它既可用于结构
化程序设计,又可用于面向对象的程序设计,因此它是一个功能强大的混合型的程序设
计语言。
Visual C++6.0 是运行在 Windows 平台上的交互式的可视化集成开发环境。一方面,
Visual C++(简称 VC)与 Windows 平台的结合十分完美,利用它开发的程序具有强大
的功能;另一方面,它与 Windows 同步更新的优势对程序员也具有极强的吸引力。
Visual Studio集成开发环境(IDE)提供了一组工具,它集成了创建、编译、连接和
测试Windows应用程序的功能。开发环境提供这一组工具,完全是为了开发和调试更加
方便,VC++包括了VC++编译器工具、VC++库及VC++开发环境。
VC++编译器工具是由源代码编译成目标代码,在编译过程发现程序的错误。比如由
于程序存在不可识别的代码而引起的错误,或者由程序结构引起的错误。该编译器支持
传统本机代码开发人员和面向虚拟机平台(如CLR,公共语言运行库)的开发人员。VC++
包括面向x64和Itanium的编译器。该编译器仍支持直接面向x86计算机,并且针对这两
种平台优化了性能。
VC++库包括行业标准活动模板库(ATL)、Microsoft基础类(MFC)库及各种标准
库(如标准C++库),这些标准库由iostream库、标准模板库(STL)和C运行时库(CRT)
组成。CRT包括已知引起安全问题的函数的安全增强替代项。STL/CLR库为托管代码开
发人员引入了STL。具有数据封送新功能的C++支持库,其设计意图在于简化面向CLR
的程序,这些库减少了程序员的工作量。
VC++开发环境为项目管理与配置(包括更好地支持大型项目)、源代码编辑、源代
码浏览和调试工具提供强力支持。该环境还支持IntelliSense,在写代码时,该功能可以
提供智能化且特定于上下文的建议。在VC++的编辑区,能够自动识别C++语言的关键字
和Windows的关键字,有助于编程人员在编写程序时检查错误。其调试工具方法为断点
调试、堆栈调试及跟踪调试等。
除常规的图形用户界面应用程序外,VC++还允许开发人员生成Web应用程序、基于
Windows的智能客户端应用程序及适用于客户端和智能客户端移动设备的解决方案。
48
沈阳理工大学学士学位论文
C++是世界上最流行的系统级语言,而VC++则为开发人员提供了生成软件的世界级工
具。
WMF SDK简介
Windows Media是Microsoft公司开发的流媒体技术,已经成为一个数字媒体的专业
平台。Windows Media Format SDK是一组底层应用程序编程接口 (API),它处理使用 ASF
结构的数据。Windows Media Format SDK 是 Windows Media 的核心,Windows Media
Player、Windows Media Encoder 和 Windows Media Services 均使用它来提供核心文件
I/O、联网和数字版权管理 (DRM) 支持。
WMF SDK体系结构
WMF SDK采用了面向对象的设计,是一套完全基于COM组件模型的高级开发包。
它引入的生成器,读取器,编辑器等对象屏蔽了ASF数据格式、网络传输控制等较为底
层的流媒体技术实现细节,留下比较上层的编程接口给开发者使用。
Windows Media Format SDK 具有许多处理 ASF 文件的功能,但其核心功能是读写
文件。本文主要介绍这两大基本任务体系结构。
生成器结构
使用 Windows Media Format SDK 构建的应用程序将源媒体样本传递给生成器。生
成器使用配置文件对象中指定的设置对文件进行编码。配置文件对象定义已编码文件的
格式,包括每个流的详细信息以及应如何处理流的信息。大多数音频和视频流由一种
Windows Media 编码解码器来处理。但是,编码管理器首先用一种转换器来处理数据,
为压缩做准备。当样本可以放入文件时,先传递给多路复用器,多路复用器根据演示时
间从所有流中隔行扫描样本并将数据打包。多路复用器创建的位流被传送到一个接收器,
接收器为最终目的地处理 I/O,不管它是磁盘上的文件还是 Internet 或其他网络广播。
49
沈阳理工大学学士学位论文
读取器结构
读取过程与数据写入过程基本上相同,不过顺序是相反的。读取器连接到源,源可
以是文件、网络连接或自定义源。拆分器处理文件的数据部分,将数据分成单个流样本,
然后将样本解压缩(如果启用了 DRM 保护),并通过相应的 Windows Media 编码解码
器来处理。默认情况下,读取器内部会自动选择合适的解码器对ASF流数据进行解压缩。
WMF SDK编程开发环境配置
WMF SDK仅适合C/C++编程语言,开发平台可以是VC++6.0或Visual .
本文介绍VC6.0的设置方法。
打开VC++6.0,选择菜单命令的Tools→Options,单击Directories,在Show directories
for下拉菜单中选择 Include files,然后将SDK的安装路径放在VC标准路径之前。
在开发应用程序项目时,对VC6.0 Debug版本还需要如下设置:选择菜单命令Project
中的settings,进入标签link,在Category下拉列表中选择General,把和
文件添加到Object/library modules中,并选中Ignore all default libraries。
DivX 历史介绍:
ISO公布了“超低比特率活动图像和语音压缩标准 ”,排序MPEG-4,1998年10月批
准第一版,1994年4月又公布了第二版及其校验模型(VM),MPEG-4正式编号是
ISO/IEC国际标准14496,它是一种新型的多媒体标准,它与前标准一个重要区别就在于,
是一个基于对象的视编码压缩标准,所定义的码率控制的目标就是获得在给定码率下的
最优质量,它为互联网上传输高质量的多媒体视频提供了很好的技术平台。
1998年微软开发了第一个在PC上使用的MPEG-4编码器,它包括MS MPEG4V1、
MS MPEG4V2、MS MPEG4V3的系列编码内码,其中V1和V2用来制作AVI文件,一
直到现在它都是作为Windows的默认组件,不过V1和V2的编码质量不是很好,一直到
MS MPEG4V3才开始有好转,画质有了显著的进步,但是不知微软出于什么目的,却
将这个MS MPEGV3的视频编码内核封闭,仅仅使其应用于Windows Media流媒体技
术上,也就是我们熟悉的ASF流媒体文件中。ASF文件虽然有一些优势,但是由于过分
50
沈阳理工大学学士学位论文
的封闭不能被编辑,末得到广泛应用,这便惹怒了那些个不怕天不怕地的视频黑客和致
力于钻研视频编码的高手,后来,这些小组不仅破解了微软的视频编码,而且经过他们
的修改,一种新的视频编码诞生了:那就是广为流传的MPEG编码器-DivX3.11。
DivX采用了MS的MPEGV3,改良后并加入自己功能称之为DivX3.11,也是目前
互联网上普通采用的MPEG-4编码器之一。很快,DivX被传得红得发紫,几乎成了业
界的标准,但是,同样很快地出现了,DivX的基础技术是非法盗用微软的,微软声称将
对所有推动DivX发展的人、企业进行追究,可是DivX技术的创造者之一罗达(Rota)
正全面申请将DivX合法化,这是基于DivX虽然是从Window的发明出来的,但却没有
用过任何微软的技术,更组建新公司DivXNetworks全力推广DivX,看来DivX(俗称压
缩电影)蓬勃发展的大潮是势不可挡了。
看来任何吸引眼球的故事在关键时刻都会发生转折,DivX的发展竟也不能脱离这一
俗套,就在DivX顺利发展时期,DivX的技术逐渐成熟,商机无限的时候,一台好戏上
演了,DivXNetworks成立初衷就是摆脱微软的技术封闭,因而发起一个完全开放源码的
项目,名为 “ Projet Mayo ”,目标是开发一套全新的、开放源码的MPEG4编码软件,由
于它完全符合ISO MPEG标准,又是完全开放源代码,OpenDivXCODEC吸引了很多
软件,视频高手参与,很快便开发出具有更高性能的编码器Encore2等等,就在DivX最
辉煌的时期,DXN公司突然封闭了DivX的源代码,并在Encore2的基础上发布了自有
产品DivX4,原来DXN早就给自己留了后门,DivX采取的是LGPL协议,而不是GPL
协议,虽说它们都是公共许可证协议,保障自由使用和修改软件或源码的权利,但LGPL
允许私有,DXN就是利用这一协议初其不备的耍出了大刀。
接着,很多被DXN公司狠狠涮了一回的软件、视频团体另起门户,逐渐重新聚拢
开发力量,高举复仇大旗,在OpenDivX版本基础上,再次开发出一种新的MPEG-4编
码--XviD,名字的顺序和DviX刚好相反,仅仅从名字就可以看出Xvid充满了复仇的力
量。
DivX是近一两年来称霸网络视频的图像压缩编码标准。起初它是以微软MPEG 4
视频编码标准为基础修改和开发的,并以免费方式发布。其特点是具有十分不错的压缩
比率,可以将一整套DVD质量的影片压缩存放到一张CD-R光盘中。现在的DivX分为
普通版和Pro版,其中后者还有收费版和Adware(广告)版两种,自带DivX Player程序
进行播放。用户如果安装了免费的DivX Codec后,也可用Windows Media player观看DivX
影片。
51
沈阳理工大学学士学位论文
附录C 程序源代码
源代码:
#include "stdafx.h"
#include "IVS.h"
#include "IVSDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
52
沈阳理工大学学士学位论文
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
53
沈阳理工大学学士学位论文
/////////////////////////////////////////////////////////////////////////////
// CIVSDlg dialog
CIVSDlg::CIVSDlg(CWnd* pParent /*=NULL*/)
: CDialog(CIVSDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CIVSDlg)
m_totalframes = 0;
m_currentframe = 0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
framepos=0; //记录播放帧位置
IsPlaying=FALSE; //正在播放标识
IsPausing=FALSE; //暂停中标识
IsAviFile=FALSE; //播放AVI视频文件标识
IsCamera=FALSE; //摄像头
}
void CIVSDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIVSDlg)
DDX_Control(pDX, IDC_SLIDER1, m_slider);
DDX_Text(pDX, IDC_EDIT_totalframes, m_totalframes);
DDX_Text(pDX, IDC_EDIT_currentframe, m_currentframe);
//}}AFX_DATA_MAP
}
54
沈阳理工大学学士学位论文
BEGIN_MESSAGE_MAP(CIVSDlg, CDialog)
//{{AFX_MSG_MAP(CIVSDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_OPEN, OnOpen)
ON_BN_CLICKED(IDC_PLAY, OnPlay)
ON_BN_CLICKED(IDC_PAUSE, OnPause)
ON_BN_CLICKED(IDC_STOP, OnStop)
ON_WM_HSCROLL()
ON_BN_CLICKED(IDC_About, OnAbout)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIVSDlg message handlers
BOOL CIVSDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "" menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
55
沈阳理工大学学士学位论文
if (pSysMenu != NULL)
{
CString strAboutMenu;
ring(IDS_ABOUTBOX);
if (!y())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CIVSDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
l();
}
// Set big icon
//
56
沈阳理工大学学士学位论文
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CIVSDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) eHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (() - cxIcon + 1) / 2;
int y = (() - cyIcon + 1) / 2;
// Draw the icon
on(x, y, m_hIcon);
}
else
57
沈阳理工大学学士学位论文
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CIVSDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CIVSDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(IsAviFile)
{//选择播放视频
if(framepos>myvideo.m_totalframes)
{//判断视屏是否已经是最后一帧,即是否播完
framepos=0; //回到第一帧,继续播放
KillTimer(1);
}
else
{
deo(framepos); //播放第framepos帧
m_currentframe=framepos++; //下一帧的位置
m_(framepos);
UpdateData(FALSE);
58
沈阳理工大学学士学位论文
}
}
CDialog::OnTimer(nIDEvent);
}
void CIVSDlg::OnOpen()
{
// TODO: Add your control notification handler code here
//打开文件前,先关闭当前正在播放视频文件
if(IsPlaying)
{
MessageBox("请先停止当前文件的播放","提示",0);
//GetDlgItem(IDC_STOP)->SetFocus();
return;
}
if(IsAviFile)
{//关闭先前已经打开了AVI视频文件
ile();
}
//打开视频文件
CString szFilters="Data Files (*.avi)|*.avi|All Files (*.*)|*.*||";
CFileDialog
fileDlg(TRUE,NULL,"*.avi",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFilters,this
);
if (l()==IDOK)
{
59
沈阳理工大学学士学位论文
KillTimer(1);
pwnd=GetDlgItem(IDC_STATIC1); //获取显示视频图像的控件ID
pdc =pwnd->GetDC();
hdc=pdc->GetSafeHdc(); //获取句柄
GetDlgItem(IDC_STATIC1)->GetClientRect(rect); //获取控件的RECT
if(deo(hName(),hdc,rect)) //构造视频播放对象
{
IsAviFile=TRUE; //当前用户选择了播放AVI视频文件
framepos=0; //第一帧播放
deo(0); //预览第一帧图像
//初始化对话框界面
GetDlgItem(IDC_PLAY)->EnableWindow(TRUE);
GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
GetDlgItem(IDC_PAUSE)->EnableWindow(TRUE);
m_ge(0,myvideo.m_totalframes);//设置滑动范围
m_Freq(1);//每1个单位画一刻度
m_(0);
m_totalframes=myvideo.m_totalframes;
UpdateData(FALSE);
}
}
}
void CIVSDlg::OnPlay()
{
// TODO: Add your control notification handler code here
if(myvideo.m_filepath=="")
60
沈阳理工大学学士学位论文
{
MessageBox("请先打开视频文件","提示",0);
GetDlgItem(IDC_STOP)->SetFocus();
return;
}
IsPlaying=TRUE;
int speed=ySpeed(); //获取视频本身的播放速度
SetTimer(1,speed,NULL); //每隔一段时间读出一帧视频图像
}
void CIVSDlg::OnPause()
{
// TODO: Add your control notification handler code here
if(IsPlaying)
{
KillTimer(1);
IsPlaying=FALSE;
IsPausing=TRUE; //暂停
}
}
void CIVSDlg::OnStop()
{
// TODO: Add your control notification handler code here
if(IsPlaying||IsPausing)
{
61
沈阳理工大学学士学位论文
framepos=0; //回到第一帧位置
deo(framepos); //预览第一帧图像
KillTimer(1);
IsPlaying=FALSE;
m_currentframe=0;
m_(0);
UpdateData(FALSE);
}
}
void CIVSDlg::OnCancel()
{
// TODO: Add extra cleanup here
int user_choice=MessageBox("您确定要退出吗?","退出",1);
if(user_choice==IDOK)
{//确定退出
if(myvideo.m_filepath!=""||IsCamera) //已经打开捕获文件,需要关闭视频文件
{
ile();
}
CDialog::OnCancel();
}
}
BOOL CIVSDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
62
沈阳理工大学学士学位论文
// CWnd * m_pwnd = CWnd::GetFocus();
// int nID = m_pwnd->GetDlgCtrlID();
//
//
//
//
//
//
//
//
if( pMsg->wParam ==VK_RETURN&&nID!=IDCANCEL) //按下回车键不会关闭程序
//
//
//
//
// }
return CDialog::PreTranslateMessage(pMsg);
}
void CIVSDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CSliderCtrl *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
framepos=pSlidCtrl->GetPos();//取得当前位置值
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
{
return TRUE;
}
if( pMsg->wParam ==VK_ESCAPE) //按下Esc键不会关闭程序
{
return TRUE;
}
if(pMsg->message ==WM_KEYDOWN)
{
63
沈阳理工大学学士学位论文
void CIVSDlg::OnAbout()
{
CAboutDlg dlg;
l();
}
#include "stdafx.h"
#include "IVS.h"
#include "Video.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Video::Video()
{
m_filepath=""; //文件路径
m_isplay=FALSE; //判断是否播放中
m_framepos=0; //帧位置
m_totalframes=0; //帧总数
m_fps=0; //帧率
m_speed=20; //播放速度,初始为20
64
沈阳理工大学学士学位论文
}
int Video::OpenVideo(CString FilePath,HDC hdc,CRect rect) //打开FilePath视频文件,并
设置好显示区域等参数
{
CvCapture *capture;
capture=cvCaptureFromAVI(FilePath); //捕获视频
if(!capture)
{
AfxMessageBox("打开文件失败!");
return 0;
}
m_rect=rect; //获得picture控件的RECT
m_hdc=hdc; //获得picture控件的画图句柄
m_filepath=FilePath; //获得视频文件路径
m_pcapture=capture;
m_totalframes = (int)cvGetCaptureProperty(m_pcapture, CV_CAP_PROP_FRAME_COUNT);
//获取视频帧总数
if(m_totalframes==0)
{
AfxMessageBox("不能打开该格式文件!");
return 0;
}
m_fps=(int)cvGetCaptureProperty(m_pcapture,CV_CAP_PROP_FPS); //帧率
return 1;
}
void Video::PlayVideo(int frame_pos) //播放视频,即显示当前帧的图像到控件
{
if(frame_pos>m_totalframes)
65
沈阳理工大学学士学位论文
{
return;
}
m_framepos=frame_pos; //播放帧开始位置
cvSetCaptureProperty(m_pcapture,
(m_framepos%m_totalframes)); //设置播放帧位置
m_pframe=cvQueryFrame(m_pcapture); //获取一帧
if(m_pframe)
{
m_(m_pframe,1);
m_HDC(m_hdc,&m_rect); //显示到控件
}
}
void Video::CloseFile() //关闭播放文件,释放捕获
{
//
//
//
//
if(m_pcapture)
{
cvReleaseCapture(&m_pcapture);
}
}
void Video::PauseVideo() //暂停播放
{
if(m_pframe)
{
//
cvReleaseImage(&m_pframe);
}
CV_CAP_PROP_POS_FRAMES,
66
沈阳理工大学学士学位论文
}
void Video::StopVideo() //停止播放
{
}
int Video::GetPlaySpeed() //得到视频文件的播放速度
{
if(m_fps>0&&m_fps<1000)
{
m_speed=(int)(1000/m_fps); //每一帧多少毫秒
return m_speed;
}
return 0;
}
Video::~Video()
{
// if(m_pframe)
//
//
//cvReleaseImage(&m_pframe);
//
// if(m_pcapture)
//
//
cvReleaseCapture(&m_pcapture);
//
}
}
{
}
{
67


发布评论