为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于DirectShow的p2p流媒体播放器的实现

2017-09-21 8页 doc 52KB 9阅读

用户头像

is_589748

暂无简介

举报
基于DirectShow的p2p流媒体播放器的实现基于DirectShow的p2p流媒体播放器的实现 2012-07-19###########2012-07-19###2#0#1#2#-#07-19######## 基于 Dir ectShow 的 p2p 流媒体播放器的实现 刘若愚 中国科学技术大学 软件学院安徽 合肥 ( , 230052) 摘 要文章介绍了一种基于 技术的 流媒体播放器主要着重于几项关键技术[] DirectShow p2p , : 缓冲层的设计源过滤器的设计和过滤器图的构建 、。 关键词流媒体播放器[] DirectShow; ; p2p ...
基于DirectShow的p2p流媒体播放器的实现
基于DirectShow的p2p流媒体播放器的实现 2012-07-19###########2012-07-19###2#0#1#2#-#07-19######## 基于 Dir ectShow 的 p2p 流媒体播放器的实现 刘若愚 中国科学技术大学 软件学院安徽 合肥 ( , 230052) 摘 要文章介绍了一种基于 技术的 流媒体播放器主要着重于几项关键技术[] DirectShow p2p , : 缓冲层的源过滤器的设计和过滤器图的构建 、。 关键词流媒体播放器[] DirectShow; ; p2p 中图分类号文献标识码文章编号[]TP317 [] A [] 1009- 9530( 2007) 03- 0118- 03 引言1 流的连接点通过针将过滤器连接起来完成一个 , 。随着高带宽网络的发展多媒体应用服务越来 ,这 样 的 集 合 成 为 过 滤 器 图 给 定 的 任 务 ( filter ,越深入人们的生活但是用户需要连接到服务器 。通过 管理整个数据graph) 。Directshow filter graph 上要以大网站为中心才能享受到服务技术 , , P2p 。 流。也称为对等网络技术是一种网络结构的思想( ) , 使得用户可以通过互联网直接交互直接连接到, 真正地消除中间其他用户的计算机交换文件 ,、 商技术改变了互联网现在的以大网站为中P2P 。 心 的 状 态 重 返 非 中 心 化 并 把 权 力 交 还 给 用 、“”, 流媒体的应用是在 文件交换的基础P2P P2P 户。上产生的用户在互联网上观看视频流媒体时可 , , 以 与 同 时 在 观 看 该 视 频 的 用 户 之 间 进 行 资 源 利 用用户可以从这些用户中同时下载该视频这比 , , 明显在效率与速度上 , 过去只能从服务器端下载 就可, 要快许多不用一个完整文件全部下载完成。 一 边 下 载 一 边 播 放 本 文 介 绍 了 一 种 基 于。 系统结构图图 技术的 流媒体播放器讨论的重点 1 DirectShow DirectShow p2p , 在编写一 因 此 的 核 心 部 分 是 过 滤 器 图 表 DirectShow Directshow 。 是播放器缓冲层的设计以及 个 流媒体网络播放器中的应用 p2p 。一个典型的过滤器图表由源过滤器转换过滤器、和表现过滤器组成源过滤器从一些数据源取数 2 DirectShow 。 是 微 软 公 司 提 供 的 一 套 在 转换过滤器用来获取处DirectShow ; 、据并将其导入过滤器图 平台上进行多媒体处理的开发包为多媒 它包括分离视频和音频的切Windows , 理和传送媒体数据 ,体 流 的 捕 捉 和 回 放 提 供 了 强 有 力 的 支 持 运 用 。 分过滤器解压视频数据的视频解码过滤器解压、、音频数据的音频解码过滤器表现过滤器用来在; 我们可以很方便地播放从本地文件和 DirectShow, 如显卡和声卡或是磁盘文从支持 驱动模型的采集硬件上表现媒体数据 , WDM ,网络播放多媒体流卡上捕获数据并且能广泛地支持各种媒体 , 件等它包括用来显示图像的视频表现过滤器和 。, 是 通 过 自 定 义 或 内 置 的 称 为 过 滤 Directshow 将 音 频 数 据 送 到 卡 上 去 的 音 频 表 现 过 滤 器 。器 的 组 件 来 控 制 和 处 理 多 媒 体 数 据 的 体 系 COM 提 供 过 滤 器 图 表 管 理 器 Directshow ( Filter Graph 该结构定义了如何控制和处理过滤器内部 , 结构管理 的连接以及完成对 中数 ) Filter Filter Manager的基本结构Directshow 和相互间的多媒体数据流。, 据流的控制它还可以传递事件给应用程序。是过滤器和针过滤器是一个执行特以便用户程序响应事件( filter)( pin) 。。 2012-07-19###########2012-07-19###2#0#1#2#-#07-19########定任务的 对象针是过滤器之间单方向数据 基于 的 流媒体播放器COM 3 DirectShow p2p 。 文件的其他块则读入共享缓冲区向 协议客; p2p 户层传送数据若是媒体文件的第一块索引块则 : 、 整块传送若是媒体文件的其他块则按所需的数 , , 据长度传送。 缓冲层的接口函数 3.1.6 所 有 接 口 函 数 全 部 封 装 在 名 为 bufferstream 的类中供流媒体播放层和 协议客户层调用 p2p 。 buffertoplayer (byte* mem, UInt32 pos, UInt32 从 中 给 播 放 层 提 供 数 据 int* read); buffer , length, 判断用户是图 流媒体播放器结构图和第 块数据进行强迫缓冲对第 2 0 1 , 因为需要缓冲数据并且需要共享数据所以 否拖动进度条并进行处理, , 。 从Buffertop2p (byte* mem, int *length, int id); 本播放器采用两层模块即流媒体缓冲层和流媒体 播放层实现由于主要播放 和 格式的文 发给 协议客户层数据rm rmvb 。buffer p2p 。件因此 使用 , Splitter Filter Real Splitter Filter。 p2ptobuffer (byte* chunk, int length, int id, int 流媒体缓冲层的设计从 协议客户层送给 数据; p2p buffer 。3.1 blockid)流 媒 体 缓 冲 层 保 证 客 户 端 之 间 的 数 据 共 享 流媒体播放层的设计, 3.2 流畅地播放媒体基本设计理念是所有的操作都 。 在物理内存充裕的前提下对硬盘 , , 在内存中完成 采用循环队列实现缓冲层具有多 , 。没有任何影响 种功能。 最大读取替换原则 3.1.1 作为共享流媒体的源客户端其硬盘拥有完 , 总是出现在数据包请求的供给队列中, , 整的文件 而且共享的流媒体客户可以是任意多个每个客, 户需要的数据也不尽相同因此其硬盘读取是无 , , 法避免的因为读取的次数越多在一定时间内图 流媒体播放层过滤器图, , 。3 p2p 文件块在客户端分布得越广泛需要源客户提供 源过滤器的设计 , 3.2.1 由于是从流媒体缓冲层请求数据 因此必须,的可能性越小所以为了最大限度地减少硬盘读 。客户端每次替换的缓冲数据必定是已经 , , 要设计自己的源过滤器这是设计流媒体播放器 , 取次数 称为最大读取替换原则的核心部分, 。。被读取次数最多的 预请求 3.1.2 提前向 共享客户端请求用户将来最可能 P2P 获取当前正在播放的流数据包之后需要的数据 , 的所有数据包所能获得的最多数据包数量取决 , 于缓冲队列的大小。缓冲数据包的请求异步进行, 发 现 有 空 闲 空 间 或 据 原 则 每 隔 一 定 时 间 系 MRR 获取可被替换统会检查每个数据块的读取次数 , 的数据块数目向 协议客户层请求新数据块, P2P 。 强迫缓冲 3.1.3 由于启动 播放需要文件头信息和 Real Media 索引块因此对文件头信息和索引块的缓冲做强。 即在客户端的缓冲区中单独开辟空间作行处理 , 图 源过滤器模块图为其缓冲这两块缓冲不在丢弃替换的范围只要 4 , , 在 源 过 滤 器 的 模 块 结 构 中 过 滤 器 客户端还处在共享状态中, 就保证拥有头信息和,CMem- 使得新加入共享的客户端能在最短的时处理从缓由基类 继承而来索引块 Stream CAsyncStream , , 冲层读取的数据主要重载了以下函数间内获得必要的数据启动播放器 , : HRESULT , 。 置 播 放 指 针 位 置 设向流媒体播放层传递数据 SetPointer(LONGLONG llPos)//,3.1.4 根据流媒体播放层传来的数据的位置和数据为 从 缓 冲 层 获 取 数 据 的 总 长 度 llPos ; HRESULT 长 度 若 是 本 地 文 件 则 从 文 件 系 统 读 取 若 是 共 , , , Read (PBYTE pbBuffer, DWORD dwBytesToRead,则判断是读取媒体文件的第一块索引块 , 、享文件数 将 据 BOOL bAlign, LPDWORD pdwBytesRead)// 还是其他任意块。放 入 视 频 缓 冲 区 ; LONGLONG Size (LONGLONG 同 协议客户层交换数据3.1.5 p2p 得到可得视频数据的长度。 *pSizeAvailable)// 应操作特别是在 中封装了一个 其 中 , OutputPin IAsyn- ter(m_pMemReader, NULL), m_pMemReader 接口支持异步操作为指向源过滤器的指针cReader , 。。取得必要的媒体播放接口: 输出 是拉模式的 CAsyncOutputPin ( pull) pin,媒 体 播 放 控 制 接 口 : m_pGraph - >QueryInter- 它允许源过滤器下游的切分过滤器建立一个线程 并从源过滤器中 媒体数据所使用的切分过 pull 。face(IID_IMediaControl, (void **)&m_pControl)滤 器 是 其 输 入 是 从 它 RealMedia Spilter, pull pin, 播 放 事 件 接 口 : m_pGraph - >QueryInterface (I- 的 接 口 中 索 取 数 CAsyncOutputPin IAsyncReader ID_IMediaEvent, (void **)&m_pEvent)的输出类型, CasyncOutputPin 据为了两者能连接。播 放 位 置 和 播 放 速 度 控 制 接 口 : m_pGraph - > 为子 类 型 是MEDIATYPE_Stream, MEDIASUB- QueryIn terface (IID_IMediaSeeking, (void**) 所有的数据请求都由异步 TYPE_REALMedia。I/O &m_pSeeking) 操作类 来处理而 的核心是请 每次调用接口时调用 增加该接 CAsyncIo , CAsyncIo , AddRef 它不停地从请求队列中取数据调用 , , Release求队列处理线程口的引用次数停止调用该接口时。 请求并处理实现异步数据请求操作 方法降低该接口的引用次数, 。。总体数据流向为在建立源过滤器时启动播放暂停或停止播放: , CMem- 3.2.3 、会 建 立 一 个 对 象 且 对 CAsyncIo CAsyncIo Reader 调用 的 方法将源过滤 IGraphBuilder Render , 象 在 合 适 的 时 候 启 动 一 个 请 求 队 列 处 理 线 程 然 , : 器输出针的数据加入过滤器图表后 开 始 以 下 的 处 理 流 程 : RealMedia Spilter Filter m_pGraph - >Render (m_pMemReader - >GetPin 向 提出数据请求CAsyncOutputPin ; CAsyncOutput- 将该请求加以包装并加入 到 的 请 求 Pin CAsyncIo (0)) 由处理线程来处理处理线程通过内存流 , ; 队列中然后调用 启动播放其中 m_pControl- >Run( ), 类 来访问缓冲区读取数据并将得到 CMemStream , 为 型指针调用 m_pControl IMediaControl 。的 数 据 通 过 发 送 给 CAsyncOutputPin RealMedia 可 以 实m_pControl - >Pause ( ); m_pControl - >Stop ( ) 。 Spilter Filter 现暂停和停止播放。过滤器图的构建 3.2.2 它能很好地首 先 调 用 方 法 创 建 过 滤 器 实际应用该播放器的结果表明 CoCreateInstance , 完成同用户的共享实现解码功能并能对播放器 图 例 , , : CoCreateInstance (CLSID_FilterGraph,NULL, 作比较理想的控制, 达到了设计要求。CLSCTX_INPROC_SERVER,IID_IGraphBuilder, 其 中 为 **)&m_pGraph), m_pGraph Ifilter- (void 参 考 文 献型指针指向已生成的过滤器图表, 。Graph [1]Microsoft Corporation.DirectX9.0 SDK 的 方 法 将 源 过然后调 用 m_pGraph AddFilter 陆其明开发指南北京清华大学出版社 [2].DirectShow [M].: Your requestcould not be processed becauseof a configurationerror: "Could not connect to LDAPserver." For assistance,contact your network support team. file:///C|/Users/Administrator/Desktop/新建文本文档.txt 涵盖各行业最丰富完备的资料文献,最前瞻权威的行业动态,是专业人士的不二选择。 file:///C|/Users/Administrator/Desktop/新建文本文档.txt2012/8/26 12:19:58
/
本文档为【基于DirectShow的p2p流媒体播放器的实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索