新闻中心

EEPW首页 > 消费电子 > 设计应用 > 基于Directshow的H.264流媒体播放器设计

基于Directshow的H.264流媒体播放器设计

作者:时间:2011-03-04来源:网络收藏

播放本地基于H.264编码的AVI文件的Filter Graph如图1。只需将本地File Source Filter替换为网络源Filter,将CoreAVC Video De-coder替换为h.264解码Filter,即可实现网络H.264视频

本文引用地址:http://www.eepw.com.cn/article/166218.htm

a.JPG

3 系统的设计与实现
3.1 Filter设计流程
Filter的编码实现包括Filter的注册信息、Filter上的框架函数实现、逻辑控制类实现、自定义接口实现、属性页实现、产权保护等。
首先,要对Filter所要完成的功能和它在Filter Graph中的位置进行分析,以确定filter模型,选择一个合适的基类;然后,再定义输入输出PIN以及自定义接口,注册Filter信息;最后实现基类的全部纯虚函数和自定义接口函数,并重写基类的相关函数以定制filter功能。
3.2 网络源Filter的设计
源Filter主要功能是接收服务器发来的流媒体数据,并提供给Filter Graph中其它Filter使用。
由于directshow自带的AVI splitter工作于拉模式,故该源Filter也工作于拉模式。
本源Filter采用双缓冲循环队列技术来实现数据的接收和向下一级Filter传递数据。采用该技术有如下理由:
(1)在Source Filter与SpliRer连接的过程中,会从Source Filter中读取一部分数据,以获得数据的格式描述,否则Filter Graph无法完成连接。源Filter与Splitter Filter进行连接前,应启动一个等待线程,当Source Filter的数据缓存预先接收到足够的数据后,再构建完整的Filter Graph。
(2)当完整的Filter Graph构建完成,并且处于运行状态后,Source Filter必须动态地接收数据,并持续地把新数据提供给Splitter Filter,双缓冲循环队列既充分利用内存空间,又能为Splitter Filter提供稳定的数据源。
(3)缓冲队列可以稳定码率,有效减小网络延时、阻塞和抖动的影响。
源Filter的工作过程如下:建立一个循环缓冲队列,队列尾指针用于缓冲从网络接收的数据,队列头指针供Splitter读取数据,进行音视频分离,并传给下一级Decoder处理;当Socket接收到网络数据后,将数据插入队列尾部,并使尾指针后移;当Splitter需要读取数据时,从队列头读取数据,并使头指针后移。
流媒体传输采用客户端/服务器的架构,服务器与客户端之间还有一个Socket通信协议问题,由于流媒体是连续的,它的同步点不能随意选择,因此,为了传送流媒体数据,必须使用面向连接的可靠的传输协议(TCP)。客户端与服务器端的控制与反馈消息,则可以使用(UDP)来传输。服务器端首先创建一个侦听Socket,侦听来自客户端的连接请求。一旦侦听到客户端的请求,服务器端就创建一个用于数据传送的Socket,并绑定到请求连接的客户端,此时,服务器处于数据传送的就绪状态。当客户端发出命令,服务器再根据命令的类型执行相应的操作,如数据发送、停止、断开连接等。



关键词: 播放器

评论


相关推荐

技术专区

关闭