组态王6.5源代码.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
组态王6.5源代码

正文 大家知道,在网络上传输音/视频等多媒体信息目前主要有下载和流式传输两种方案。下载的主要缺点是,必须等全部内容传输完毕,然后才能在本地机器打开;而采用流式传输方案,声音、影像或动画等时基媒体由音/视频服务器向用户计算机连续、实时地传送,用户不必等到整个文件全部下载完毕,只需经过几秒或十数秒的启动延时即可进行观看。流式传输广泛应用于Internet上视频点播,以及网络视频监控等领域。 本文从Microsoft DirectShow以及Windows Socket等方面的技术角度出发,阐述一个简单的媒体流式传输、实时观看的解决方案。 关键词:DirectShow Filter Windows Socket 一. 开发原理 (一)介绍一下微软的DirectShow技术 长久以来,多媒体应用一直面临着挑战,包括多媒体大量的数据传输,快速的数据处理要求,音视频流的同步,媒体流的格式转换等等。DirectShow正是微软针对以上问题设计,并且很好地解决了这些问题的一种应用架构。它的设计目标是,隔离数据传输、硬件兼容、流同步等底层处理,使客户能够轻轻松松地创建Windows应用平台上的多媒体应用程序。 为提高数据处理的效率,DirectShow运用了DirectDraw和DirectSound技术。同时,DirectShow还运用了COM组件技术,它的名字叫作Filter。Filter大致可分为三种:Source Filters、Transform Filters、Rendering Filters。Filter传输数据的端口叫作Pin。Pin有Input Pin和Output Pin两种。在应用中,将各种Filter连接起来,也就是将前面Filter(Upstream Filter)的Output Pin与后面Filter(Downstream Filter)的Input Pin连接起来,即组成一个完整的Filter Graph。运行这个Filter Graph,多媒体数据就开始从Source Filters,经过Transform Filters到Rendering Filters流动。DirectX提供了一个非常实用的工具??GraphEdit.exe??用以可视化调试Filter。下面看一下DirectShow大致的处理流程图: 在我们后面的应用实例中,我们自己编写了一个Filter(这是一个Source Filter),用于异步读取网络上出来的Mpeg1数据;紧跟这个Filter后面的是Transform Filters,负责Mpeg1数据的音视频分离(Mpeg1 Stream Splitter)、音视频数据的解码(Mpeg Audio Decoder和Mpeg Video Decoder);然后是音视频流各自的Rendering Filters,一个叫Video Renderer的负责视频的显示,一个叫Default DirectSound Device的负责音频数据的播放。参考图如下: 注:Source Filter的改写参考了DirectX 8.0 SDK的例子代码,它的路径为:samplesMultimediaDirectShow FiltersAsyncMemfile。 (二)介绍一下Windows Socket网络传输技术 我们要处理的数据并不在本地计算机,而是由另外一台视频服务器负责发送出来。那么,我们如何得到这些数据,然后再使用我们的DirectShow Filter进行处理呢?这就用到了Windows Socket技术。 运用Windows Socket技术,能够让两台计算机通过网络建立连接,并且通过定义一些上层协议,实现计算机之间的大量数据传输以及其他一些控制。微软的MFC也提供了两个类:CAsyncSocket和CSocket,用以方便客户使用Socket的特性。CAsyncSocket从较低层次封装了Windows Socket API,并且通过内建一个窗口,实现了适合Windows应用的异步机制。CSocket类从CAsyncSocket中继承而来,更简化了客户对Socket的应用。但是,这两个类均有缺陷,特别是在跨线程使用Socket的时候。 在我们后面的应用实例中,因为处理的数据量较大,我们使用了多线程。在负责数据发送的服务器端,使用专门的线程进行数据的发送;在客户端,使用专门的线程进行数据的接收,并把数据放到缓冲队列中,供DirectShow Filter读取处理。因此,我们自己封装了几个Socket的类:CListenSocket(用于服务器端建立监听客户连接的Socket类)、CWorkerSocket(负责数据传输的Socket基类)。从CWorkerSocket再派生两个类:CM

文档评论(0)

saa9099 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档