基于DirectShow的P2P网络视频采集传输与播放系统DOC.docx
- 文档编号:460170
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:9
- 大小:234.95KB
基于DirectShow的P2P网络视频采集传输与播放系统DOC.docx
《基于DirectShow的P2P网络视频采集传输与播放系统DOC.docx》由会员分享,可在线阅读,更多相关《基于DirectShow的P2P网络视频采集传输与播放系统DOC.docx(9页珍藏版)》请在冰豆网上搜索。
基于DirectShow的P2P网络视频采集传输与播放系统DOC
软件技术课程设计实验报告
(基于DirectShow的P2P网络视频采集、传输与播放系统)
一.概述
DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。
它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件。
同时DirectShow支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。
DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。
DirectShow大大简化了媒体回放、格式转换和采集工作。
但与此同时,它也为用户自定义的解决方案提供了底层流控制框架,从而使用户可以自行创建支持新的文件格式或其它用途的DirectShow组件。
DirectShow的主要功能是提供对多媒体流的捉捕与回放。
这种多媒体流既可以来自本地磁盘文件,也可以来自网络上的远程服务器。
也就是说,它提供了一种“在线播放”的功能,在远程数据尚未完全传输到本地机器上的同时,本地应用程序可不必等待数据完全传输完毕再进行播放,可以一边传输,一边播放。
这就为网络化的视频采集数据的实时解码显示提供一个方便的开发平台。
点对点技术(peer-to-peer,简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。
P2P网络通常用于通过连接来连接节点。
这类网络可以用于多种用途,各种文件共享软件已经得到了广泛的使用。
P2P技术也被使用在类似VoIP等实时媒体业务的数据通信中。
二.需求分析
2.1开发要求
1.熟悉、掌握vs2010开发工具,以及DirectShowSDK9.0软件开发包。
2.熟悉了解Socket网络编程;
3.开发基于DirectShow的应用软件,要求能够完成P2P的网络视频采集、视频传输、视频播放的功能。
4.基本功能:
实现采集视频、传输视频、实现异地播放采集视频。
2.2开发平台
1.硬件:
视频摄像头一个,PC机两台,局域网。
2.软件:
操作系统WindowsXP,安装TCP/IP协议。
视频摄像头驱动程序。
开发平台VisualStudio2010。
软件开发包DirectShowSDK9.0。
3.语言:
C++
三.实现原理
1.DirectShow系统
DirectShow的核心部分为过滤器(Filter),过滤器是一个COM组件,是完成DirectShow处理过程的基本单元。
图中最大的一块即是DirectShow系统,它的基本工作原理就是“流水线”:
将单元组件Filter串联一起,交由FilterGraphManager统一控制。
系统的输入可以是本地文件系统、硬件插件、因特网等,系统的输出可以是声卡(声音再现),显卡(视频内容显示),本地文件系统,当然也可以最终将数据向网络发送。
在DirectShow系统之上是应用程序(Application)。
应用程序要按照程序所要实现的功能建立起相应的FilterGraph,然后借助于FilterGraphManager来控制整个数据的处理过程。
DirectShow能在FilterGraph运行的时候接收到各种事件,并通过消息的方式发送到应用程序。
这样就实现了应用程序与DirectShow系统之间的交互。
DirectShow的基本单元是过滤器Filter,按照功能来分,Filter大致分为三类:
SourceFilters、TransformFilters和RenderingFilters。
各类Filter如下:
(1)源过滤器,SourceFilters主要负责取得数据,它代表数据源。
数据源可以是多媒体文件、因特网、或者视频和音频捕获设备,如计算机里的采集卡(WDM驱动的或是VFW驱动的)、数字摄
像机等,然后将数据往下传输。
此外,也可以将网络传输的数据作为数据源。
可以将几种数据源组合使用;但是,只能同时有一个视频数据源和一个音频数据源,不能出现同时有两个或两个以上视频数
据源或音频数据源的情况。
(2)转换过滤器,它位于源过滤器和播放过滤器之间,TransformFilters主要负责数据的格式转换,然后将数据继续往下传输。
转换过滤器主要有三类:
一类是编码器,包括视频和音频编码器;一类是解码器,同样也包括视频解码器和音频解码器;还有一类是一些中间的辅助Filter,可以实现一些特殊的功能,比如媒体数据的分流和合流。
(3)渲染过滤器,这种Filter终止数据流,RenderingFilters主要负责数据的最终去向数据流的目的有三个:
一是播放器,对应视频数据流,可以将其在屏幕上某个区域内显示出来,对应音频数据流,则可以通过声卡,在音箱或耳机中播放;二是文件,可以将数据流写入到指定的文件中,保存在当地主机上;三是网络,发送端通过网络将媒体数据传输到接收端,对于发送端而言,这也是一个数据流终点。
2.基于DirectShow的视频采集系统的结构
整个视频采集系统的框架如上图所示,其中箭头符号表示视频数据流动的方向。
从图中可以清楚地看到,最初的视频信号经CCD摄像机和WDM视频采集卡进入计算机,其后系统的软件部分通过WDM视频采集卡驱动程序采集这些视频数据。
3.数据整体传输框图
图一:
将本地采集的音视频发向网络远程端
图二:
播放从网络远程端接收的音视频
因为音视频数据是大量的、连续的、需要可靠传输的,因此这些数据的传输可以选用TCP协议。
而通信双方的控制命令数据量很小,而且重要性也不是很强,因此可以选用UDP协议。
为了让在Socket上传输的数据简单化或者说提高Socket传输的效率,AVChat程序将音频数据和视频数据的传输分离,分别为它们创建一条Socket连接。
而在单个Socket上,可以同时进行数据的发送和接收。
4.socket网络
SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信。
客户方和服务方。
当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。
客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。
在客户方呼叫连接请求之前,它必须知道服务方在哪里。
所以需要知道服务方所在机器的IP地址或机器名称,如果客户方和服务方事前有一个约定就好了,这个约定就是PORT(端口号)。
也就是说,客户方可以通过服务方所在机器的IP地址或机器名称和端口号唯一的确定方式来呼叫服务方。
在客户方呼叫之前,服务方必须处于侦听状态,侦听是否有客户要求建立连接。
一旦接到连接请求,服务方可以根据情况建立或拒绝连接。
客户方发送的消息可以是文本,也可以是二进制信息流。
当客户方的消息到达服务方端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息了。
总之,在此程序中,客户端和服务端的交互流程设计如下图所示:
总结:
在实现原理这一段,我简单地描述了DirectShow系统的工作原理,以及此音视频聊天程序实现的整体构架。
其中,整体构架大概可以分为三部分:
首先,对于音视频数据的采集;其次,服务端与客户端网络的连接;最后,相互之间数据的传输与处理。
通过对程序整体构架的了解,可以帮助我们更加容易和清晰地了解整个程序地实现过程。
四.软件的设计模块
本音视频聊天程序共分为了六大模块,接下来便一一分析这些模块所实现的功能。
1.SourceFiles模块
SourceFiles模块主要实现是界面的设计功能。
它主要包括了以下四个类:
CAVChatDlg用于主界面功能设计;CRoleDlg用于角色选择对话框的功能实现;CSelfCheckDlg用于本地采集设备自检对话框的功能实现;CCallDlg用于呼叫服务器界面(用于指定服务器IP地址)。
2.DirectShow模块
DirectShow模块里面主要封装了关于DirectShow系统的一些应用类以及某些过滤器的设定功能。
它主要包括了以下三个大类:
Basic基本的DirectShow应用类;Device采集设备包装类;Filters过滤器设定类。
这些大的类里面还包括了以下几个类:
CDXGraph封装了FilterGraph的控制功能;CDXFilter类Filter的包装类,并作为具体Filter包装类的父类;CvideoWindow类用于视频显示窗口;UDsUtils工具类,完成了DirectShow相关的一系列相对独立的功能(比如创建设备Filter、显示Filter的属性页等);UFilterUtils完成了Filter相关的一系列相对独立的功;CAVDevice用于保存音视频采集设备信息(比如设备的显示名字、友好名字、设备类型等);CaudioCaptureFilter音频采集设备的包装Filter,用于音频采集设备的创建、参数设置等;CVideoCaptureFilter视频采集设备的包装Filter,用于视频采集设备的创建、参数设置等;CFilterNetSender用于向网络发送音视频数据的Filter(NetSender);CXInputPinNetSender的输入Pin;CFilterNetReceiver用于接收来自网络的音视频数据的Filter(NetReceiver);CnetOutPinNetReceiver的输出Pin;
3.Socket模块
Socket模块用于控制服务端与客户端之间网络通信的连接。
它分为以下三个类:
CTCPListener监听TCP连接的Socket包装类;CStreamSocket用于TCP协议进行数据的发送和接收;CUDPManager用于UDP协议进行数据的发送和接收。
4.Controller模块
Controller模块用于客户端与服务端的角色控制。
它分为以下四个类:
CPreviewAdmin用于本地采集设备自检的控制类,并作为角色控制类的父类,负责FilterGraph的构建、控制、销毁;CroleAdmin用于角色控制的基类,完成服务器和客户机两种角色控制逻辑中的公共部分;CserverAdmin服务器进程使用的角色控制类;CClientAdmin客户机进程使用的角色控制类。
以上总结了音视频程序所包含的四大模块,以及每个模块里不同类的作用和相互之间的关系。
清晰明了地将整个程序的结构展现出来,加强了对程序功能的理解与认识。
五.软件重要部分介绍
1.采集设备的自检功能
在进入真正意义上的视频聊天阶段之前,通信双方最好能对本地的采集设备进行一下检测,并且把各自的配置情况告诉对方。
因为如果本地没有视频采集设备,那么远程端的用于接收网络视频数据的FilterGraph就不用构建;音频的情况类似。
反之亦然。
在本程序中使用了一个CPreviewAdmin类来实现此功能。
2.角色控制功能
在建立网络连接之前,通信双方扮演的角色是不一样的,而且必须一个是服务器,一个是客户机。
于是出现了问题:
角色不同,要求的控制逻辑也不会一样,但要在同一个程序中实现。
这显然对AVChat程序的设计提出了更高的要求。
本程序使用一个CRoleAdmin类来实现服务器和客户机两种角色控制的共性,然后以CRoleAdmin为父类,派生一个CServerAdmin类专门定制服务器的特性,派生一个CClientAdmin类专门定制客户机的特性。
考虑到角色控制同样也包括对FilterGraph的控制,因此将CRoleAdmin类CPr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DirectShow P2P 网络 视频 采集 传输 播放 系统 DOC