在线视频播放系统的设计与实现本科论文.docx

上传人:b****6 文档编号:7620678 上传时间:2023-01-25 格式:DOCX 页数:52 大小:1.15MB
下载 相关 举报
在线视频播放系统的设计与实现本科论文.docx_第1页
第1页 / 共52页
在线视频播放系统的设计与实现本科论文.docx_第2页
第2页 / 共52页
在线视频播放系统的设计与实现本科论文.docx_第3页
第3页 / 共52页
在线视频播放系统的设计与实现本科论文.docx_第4页
第4页 / 共52页
在线视频播放系统的设计与实现本科论文.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

在线视频播放系统的设计与实现本科论文.docx

《在线视频播放系统的设计与实现本科论文.docx》由会员分享,可在线阅读,更多相关《在线视频播放系统的设计与实现本科论文.docx(52页珍藏版)》请在冰豆网上搜索。

在线视频播放系统的设计与实现本科论文.docx

在线视频播放系统的设计与实现本科论文

 

 

题目在线视频播放系统的设计与实现

学生姓名学号

所在学院物理与电信工程学院

专业班级电子1202

指导教师

完成地点物电学院计算机信息处理分室

2016年6月5日

毕业论文﹙设计﹚任务书

院(系)物电学院专业班级电子信息工程学生姓名 

一、毕业论文﹙设计﹚题目在线视频播放系统的设计与实现

二、毕业论文﹙设计﹚工作自2016年3月10日起至2016年6月20日止

三、毕业论文﹙设计﹚进行地点:

物电学院计算机信息处理分室

四、毕业论文﹙设计﹚的内容要求:

随着网络的普及,在线播放器也日益普及起来。

本设计要求学生利用VisualC++为开发工具,使用DirectShowSDK技术开发一个功能齐全的视频播放器,要求能够对硬盘或存储设备上的多媒体文件进行播放,及在回放或显示过程中,用户可以控制回放的动作和显示特性等相关功能。

五、毕业论文﹙设计﹚应收集资料及参考文献:

[1]徐孝凯,张纪勇.C++面向对象程序设计:

VC++6.0运行环境[M].天津大学出版社2009.

[2]汪晓平,钟军.VC++网络通信协议分析与应用实现[M].北京:

人民邮电出版社,2003.

[3]王艳平,张越.Windows网络与通信程序设计[M].北京:

人民邮电出版社,2006.[4]AndrewS.Tanenbau.计算机网络(第四版)[M].北京:

清华大学出版社,2004.

[5]谢希仁.计算机网络(第五版)[M].北京:

电子工业出版社,2012.

[6]朱桂英.张元亮VisualC++网络编程开发与实践[M].清华大学出版社.2013.

六、毕业论文﹙设计﹚的进度安排:

3月2日——3月29日:

查阅资料,完成初步设计方案和开题报告。

4月1日——4月26日:

根据视频播放系统的工作原理,给出设计方案,及软件流程图。

4月29日——5月24:

并在软件环境下进行运行调试,进一步完善系统功能,整理资料;

5月27日——6月7日:

撰写、修改毕业设计论文。

6月10日——6月15日:

打印论文准备并完成答辩。

指导教师签名系(教研室)主任签名

专业负责人签名批准日期

 

在线视频播放系统的实现与设计

(陕西理工学院物理与电信工程学院电子信息工程专业,2012级2班,陕西汉中723000)

指导教师:

[摘要]本设计在VisualC++环境下,利用MFC程序设计方法。

并利用DirectShow的播放器核心技术,重点实现了播放、暂停、停止、声音控制、进度控制、抓取视频帧、播放模式控制、全屏等功能。

通过对系统的需求分析、设计、实现,完成了多媒体播放器系统,各项功能使用正常,并给出了实现关键代码。

DirectShow是基于COM组件,它是二进制级别的(不受限于编程语言和操作系统),具有很好的兼容性和移植性。

[关键字]VisualC++;MFC;DirectShow;播放器

 

 

 

Thedesignandimplementofonlinevideobroadcastsystem

CuiYuanyuan

(Grade12,Class02,Majorelectronicsandinformationengineering,SchoolofPhysicsandTelecommunicationEngineering,ShaanxiUniversityofTechnology,Hanzhong723000,Shaanxi)

Tutor:

LiJuye

Abstract:

ThisdesignusesMFCprogramdesignmethodsUnderVisualC++environment.Atthesametime,usesDirectShowplayercoretechnology.Focustoachievetheplay,pause,stop,soundcontrol,schedulecontrol,grabvideoframes,playbackmodecontrol,fullscreenandotherfunctions.Throughthesystemrequirementsanalysis,design,implementation,completedamediaplayersystem,variousfunctionsnormaluse,andgivestherealizationkeycode.DirectShowisbasedontheCOMcomponent,itisabinarylevel(notlimitedtoprogramminglanguagesandoperatingsystems),hasgoodcompatibilityandportability.

Keywords:

VisualC++;MFC;DirectShow;Player

 

 

 

1.引言

随着社会的发展,信息技术越来越发达,在线视频播放器在未来社会应用也会越来越普遍。

Microsoft的Windows操作系统作为全球最主流、最常用的操作系统,掌握在它上面的多媒体开发技术显得越来越需要,相对于其他多媒体开发技术,掌握它本身提供的DirectX多媒体开发包显得更为适合。

DirectShow是微软提供的多媒体开发包DirectX中的一部分,它是建立在DirectDraw和DirectSound基础之上。

Microsoft给DirectShow程序员提供了一套开发多媒体标准的、统一的、高效的API接口,这些接口使得多媒体数据的回放变得简单,剥离了应用程序和硬件底层的差异性。

而DirectShow是基于COM组件的开发包,COM是基于二进制代码级的协议(与编程语言无关的协议),对使用DirectShow开发的软件以后的移植和兼容问题提供了良好的解决方案。

DirectShow使用智能连接开发多媒体应用程序,大大简化了开发人员工作量,同时开发人员亦可开发自定义的滤波器。

使得基于DirectShow的应用程序可以充分满足不同用户的需求。

在未来几年中,DirectShow技术的发展前景将是非常广阔的。

1.1背景

当今信息技术越来越发达,社会越来越信息化、智能化,多媒体在未来社会应用越来越广泛。

Microsoft的Windows操作系统作为全球最主流、最常用的操作系统,掌握在它上面的多媒体开发技术显得越来越需要,相对于其他多媒体开发技术,掌握它本身提供的DirectX多媒体开发包显得更为适合。

1.2研究目的

DirectShow是微软提供的多媒体开发包DirectX中的一部分,它是建立在DirectDraw和DirectSound基础之上。

Microsoft给DirectShow程序员提供了一套开发多媒体标准的、统一的、高效的API接口,这些接口使得多媒体数据的回放变得简单,剥离了应用程序和硬件底层的差异性。

而DirectShow是基于COM组件的开发包,COM是基于二进制代码级的协议(与编程语言无关的协议),对使用DirectShow开发的软件以后的移植和兼容问题提供了良好的解决方案。

DirectShow使用智能连接开发多媒体应用程序,大大简化了开发人员工作量,同时开发人员亦可开发自定义的滤波器。

使得基于DirectShow的应用程序可以充分满足不同用户的需求。

在未来几年中DirectShow技术的发展前景将是非常广阔的。

1.3开发环境及语言

本文中视频播放系统使用C++语言及DirectshowSDK技术,使用visualc++2010软件在directshow的开发环境下进行视频播放器的开发。

1.3.1VC++2010平台

MicrosoftVisualC++,(简称VisualC++、MSVC、VC++或VC)C++语言开发工具,一个集成的开发环境,能够提供编辑C语言,C++以及C++/CLI系列编程语言。

VC++整合便利的除错工具,尤其是整合WindowsAPI、三维的动画DirectXAPI,Microsoft.NET框架[1]。

MicrosoftVisualC++是微软公司推行开发的Win32环境程序、面向对象且可视化的集成化可编程系统。

其主要优点如下:

(1)程序框架能够自动生成

(2)便于灵活类管理

(3)代码编写与界面的设计可集成相互操作

(4)可开发各种程序

(5)支持各个数据库的接口、OLE2、WinSock网络和3D控制界面

1.3.2MFC概述

MFC(MicrosoftFoundationClasses)是微软公司所提供的类型库(classlibraries),以C++类的方式封装了Windows的API,且含有应用程序的框架,来减少程序开发者的工作量。

MFC中的关键技术:

(1)MFC程序的初始化过程

建立一个MFC窗口:

从CWinApp派生应用程序类,然后建立应用程序对象(theApp)。

(2)动态创建

运行的时候创建指定的类的对象。

比如视对象、框架的窗口对象等等,比如文档对象需由文档模版类对象进行动态的创建。

(3)串行化

尽管程序中有着各种数据,串行化机制也如流水般按照顺序储存置于单一文件里,并且也能按照顺序取出,成为不同对象的数据。

(4)消息映射和传递

MFC把SDK编程中对消息的产生、传递、到过程函数中响应的过程封装起来,形成消息映射宏、消息映射表和消息响应函数体系,更加直观和便于操作[2]。

2.DirectShow介绍

2.1DirectShow系统

DirectShow是新一代基于COM的流媒体处理的开发包,是微软公司在ActiveMovie和VideoforWindows的基础上推出的,与DirectX开发包共同发布。

Directshow为多媒体的回放和捕捉提供了有力强大的支持。

应用DirectShow,能方便地在支持WDM采集卡中捕获数据,且后期进行一些相应处理乃至储存到文件里。

这样在多媒体的数据库管理系统里多媒体的数据存取就会更加方便。

它的架构如图1所示。

图中央即是DirectShow系统,虚线下面是Ring0特权级硬件设备,虚线上面是Ring3特权级的应用层。

DirectShow系统处于应用层。

它用FilterGraph模型来管理整体数据流的处理。

参与数据的处理的各功能模块称做Filter;各个Filter在FilterGraph中按相应顺序连成一条“流水线”协调工作[3]。

图2.1DirectShow架构

2.2DirectShow技术

2.2.1过滤器

过滤器是DirectShow的基本组成单元。

DirectShow把数字媒体的处理(播放、捕获和格式转换)划分为一些独立的步骤,过滤器就是完成一个或多个步骤的COM对象。

DirectShow提供了一组标准的过滤器供应用程序使用,程序开发者也可以创建自定义的过滤器来扩充Directshow的功能,但必须是以COM形式建立的[4]。

按照功能来分,Filter大致分为3类:

SourceFilter、TransformFilter和RenderingFilter。

所有能生成流的DSfilter都可以认为是Sourcefilter。

这个流可以源自硬盘上的文件,也可以是实时设备,如话筒,摄像头,或是DC。

如果这个流是源自磁盘,那么它可以是预先记录的WAV,AVI或是WindowsMedia文件。

相应的,如果源是一个实时设备,那么它可以是Window兼容的所有外设。

DS是紧密绑定在WDM上,所有的安装后的多媒体设备的WDM驱动都自动可作为DS的源filter。

因此,例如,安装了驱动的摄像头可以立即成为DS的源filter。

将实时设备转换成DS流的源filter又可以称作捕捉源filter。

第12章详细描述了源filter的设计实现。

TransformFilter是DS着墨最多的工作。

转换filter从其它filter(可能是源filter)接收一个输入流,对流执行某些操作后,将流传输给下一个filter。

几乎所有能相像得到的对音视频流的操作都可以在转换filter中实现。

一个转换filter可以解析流的数据,编码它(可能将WAV数据转换成MP3格式)或解码它,或对一个视频序列添加一个文字层。

DS包含有大量的转换filter,如编码或解码各种各样的音视频格式。

转换filter同样还可以给流创建一个多通管道,意思是一个输入流可以复制到一个或多个输出pin上。

而有些转换filter可以将多个输入流混合成一个流。

渲染filter将DS流转换成某种形式的输出。

如基本的渲染filter可以将流写到文件。

而其它的渲染filter可以将音频流发送到扬声器,或将视频流发送到桌面上的窗口。

DirectShow中的Direct反映的是:

使用DirectDraw和DirectSound的渲染filter支持将它的流高效传输给显卡和声卡的技术。

这个能力意味着DS的渲染filter能进行快速且无关用户-内核模式的传输。

(对于OS来说,这个处理意味着将数据从用户层传输到内核层)。

一个filtergraph可以有多个渲染filter。

如使用一个多通管道将一路视频流送到一个渲染filter以生成文件,另一路则将它送到另一个渲染filter以用于显示。

从而可以实现监视视频的同时写文件。

简单来说,SourceFilter主要负责获取数据,数据源可以是文件、因特网计算机里的采集卡(WDM驱动的或VFW驱动的)数字摄像机等,然后将数据往下传输;TransformFilter主要负责数据的格式转换,例如数据流分离、合成,解码、编码等,然后将数据继续往下传输;RenderingFilter主要负责数据的最终去向——将数据送给显卡、声卡进行多媒体的演示,或者输出到文件进行存储。

2.2.2COM组件

Directshow是基于COM的流媒体处理的开发包。

COM是一种跨应用和语言共享的二

进制代码的方法,它是一个开放的组件标准,具有很强的扩展与扩充能力[5]。

优点如下:

(1)可以方便的将应用系统扩展至网络环境;

(2)可以将系统中的组件用新的代替掉,以方便随时进行系统的升级和定制;

(3)可以在多个应用系统中多次利用同一个组件;

(4)COM组件与语言和平台无关。

2.2.3针脚Pin

过滤器能和一个或者多个过滤器相连,连接接口是COM形式,叫引脚。

过滤器用引脚在各过滤器之间传输各种数据。

每个引脚都是从IPin这个COM对象派生出来的。

每个引脚都是过滤器私有的对象,过滤器能动态地创建引脚、销毁引脚、自由地控制引脚的生存时间。

引脚可分为两种类型:

输出引脚和输入引脚。

相连的两个引脚须是不同类型的,即输入引脚只能和输出引脚相连,并且连接方向常是由输出引脚指向输入引脚的。

Filter一般由一个或多个Pin组成,Filter之间通过Pin相互连接,构成一条顺序的链路。

Filter的分类亦可根据Filter包含的输入Pin或者输出Pin的数量进行。

过滤器间的连接,实质上就是连接双方的媒体类型媒体协商的过程。

连接大致的过程为:

若调用连接函数的时候已指定完整的媒体类型,那么用此媒体类型进行连接,是否成功都要结束连接进程;如不完全指定或没有指定媒体的类型,就进行下面的枚举过程:

枚举欲连接的输入引脚上的所有的媒体类型,逐一使用此媒体类型和输出引脚进行连接(如连接函数提供不完全媒体类型,就要先把每个枚举出的媒体类型和它进行匹配检查),若输出引脚也接受此媒体类型,那么引脚间的连接就成功了;如果输出引脚对全部输入引脚上所枚举的媒体类型均不支持,那么就枚举输出引脚上的全部媒体类型,且逐一利用这些媒体类型和输入引脚来进行连接,如果输入引脚接受其中的一种媒体类型,那么引脚间的连接就成功了;如果对输出引脚上的全部媒体类型输入引脚均不支持,则这两个引脚间的连接过程宣告失败。

如图2所示,仅含有输出Pin,没有输入Pin的Filter为SourceFilter;既有输入Pin又有输出Pin的Filter为TransformFilter;仅有输入Pin,没有输出Pin的Filter为RenderingFilter。

 

 

图2.2Filter通过Pin连接

2.2.4FilterGraph

在DirectShow中,一个播放程序必需实例化一个或多个过滤器,并把它们连接起来。

这样数据才能从一个过滤器到达另一个,经过它们的处理,直到表现过滤器。

所有这些过滤器和它们之间的连接被称为过滤器图(FilterGraph)。

2.2.5FilterGraphManager

FilterGraphManager过滤器链表管理器为DirectShow结构的核心,是在过滤器链表中管理各过滤器的COM对象。

主要有以下的功能:

1>协调Filter之间的状态改变:

Graph中的Filter的状态改变应该一致,因此,应用程序并将状态改变的命令直接发给Filter,而是将相应的状态改变的命令发送给FiltergraphManager,由manager将命令分发给Graph中每一个Filter。

2>建立参考时钟:

Graph中的Filter均采用同一个时钟——参考时钟(referenceclock),来确保所有数据流的同步,音频帧或视频帧应被提交的时间(presentationtime)是利用参考时钟确定的。

FiltergraphManager应该选择一个可参考的时钟,可选择声卡上的时钟,亦可选系统时钟。

3>将Graph的消息返回于应用程序:

Graph管理器用事件机制把Graph中发生的事件通知给应用程序,此机制和Windows的消息循环机制类似。

4>提供方法构建FilterGraph:

Graph管理器给应用程序提供将Filter添加进Graph的方法,断开Filter连接的方法,连接Filter的方法。

但是,Graph管理器没有提供如何将数据从一个Filter发送到另一个Filter的方法,这个工作是由Filter在内部通过Pin来独立完成的。

2.2.6FilterGraph中的数据流动

当用户要创建自定义的过滤器时,需了解媒体数据是如何在过滤器图表中传输的。

为了在过滤器图标中传送媒体数据,Directshow过滤器需支持传输协议。

连接的过滤器须支持相同的传输相同传输协议,否则不能交换媒体数据。

绝大多数的Directshow过滤器会把媒体的数据保存于主存储器里,且通过Pin把数据提交给其他的过滤器,这种传输被称作局部的存储器传输。

但并不是所有的过滤器均用局部的存储器传输,例如有的过滤器用硬件传送媒体的数据,而引脚只是来提交所控制的信息。

Directshow给局部的存储器传输定义了两种机制,分别是推模式和拉模式:

在推模式里,将源过滤器生成数据提交给下级过滤器。

下级过滤器被动地接受数据,完成数据处理之后再传送给下级过滤器。

在拉模式里,源过滤器和分析过滤器相连。

分析过滤器向源过滤器请求数据之后,源过滤器则传送数据来响应请求。

2.3Directshow事件交互

DirectShow应该有一种机制,能够让应用程序与FilterGraphManager之间实现交互控制。

常见事件有:

EC_COMPLETE,表示FilterGraph中所有的数据都已经回放完毕;

EC_ERRORABORT,表示FilterGraph运行时出错;

EC_DEVICE_LOST,表示热插拔设备脱离系统;

EC_REPAINT,表示视频窗口要求重画当前图像帧。

事件处理机制:

FilterGraphManager上有3种接口和事件的通知有关,即

IMediaEventSink,IMediaEvent和IMediaEventEx.

IMediaEventSink:

用在Filter内部,其接口方法Notify用于向FilterGraphManager发送事件的通知;

IMediaEvent:

应用程序就利用它的接口方法处理FilterGraphManager发出来的事件;

IMediaEventEx:

IMediaEvent接口扩展,支持当FilterGraphManager发出事件时,用窗口消息的方式来通知应用程序。

事件处理大致的过程如下:

一.FilterGraph中的Filter发出事件后,接收者是FilterGraphManager;

二.FilterGraphManager对一些特殊事件拥有默认处理的方法。

接到事件之后,或按照默认的方法进行直接处理,或放至事件队列,等候上层应用程序的处理;

三.应用程序获知FilterGraphManager有事件发出后,则可使用IMediaEventEx接口方法到事件队列里读取事件,之后依据事件的类型作相应的处理.

那么,应用程序是怎么知道FilterGraphManager的事件队列里有事件在等待处理?

有两种办法:

一种是FilterGraphManager通过发送指定的窗口消息来通知应用程序,另一种通过事件来同步对象。

一种:

//自定义一个消息,然后调用IMediaEventEx:

:

SetNotifyWindow将其设置给FilterGraphManager

#defineWM_GRAPHNOTIFY(WM_APP+100)

IMediaEventEx*pEvent=NULL;

hr=pGraph->QueryInterface(IID_IMediaEventEx,(void**)&pEvent);

hr=pEvent->SetNotifyWindow((DAHWND)m_hwnd,WM_GRAPHNOTIFY,0);

//定义消息映射

ON_MESSAGE(WM_GRAPHNOTIFY,OnGraphNotify)

//在消息响应函数中获取FilterGraph的事件通知,并作出相应处理,

voidCNotifyWnd:

:

OnGraphNotify(WPARAMinWParam,LPARAMinLParam)

{

 if(pEvent)

 {

  LONGeventCode=0,eventParam1=0,eventParam2=0;

  while(SUCCEEDED(pEvent->GetEvent(&eventCode,&eventParam1,eventParam2);

  switch(eventCode)

  {

   caseEC_COMPLETE:

   break;

   caseEC_USERABORT:

   break;

   caseEC_ERRORABORT:

   break;

   default:

   break;

  }

 }

}

第二种在FilterGraphManager在内部创建了一个事件同步对象,它在事件队列中有尚未处理的事件时,状态标记为有效,而当应用程序不断调用接口方法取空事件状态复位。

我们可以通过IMediaEvent:

:

Get

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1