新闻中心

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

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

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

本Filter设计主要流程如下:
(1)Filter注册信息
定义类工厂模板,填写Filter的注册信息;同时实现DLL文件所必须实现的注册和反注册函数:DLLRegisterServer和DLLUnregisterSe-rver。
(2)框架函数的实现
实现函数CreateInstanee,用于创建Filter对象实例;实现函数CheeklnputType,用于对输入Pin上的媒体类型检查;实现函数Transfo-rm,用于H.264的解码操作;实现函数NonDelegafingQueryIntefface,用于暴露Filter支持的自定义接口,使应用程序可以设置解码器的参数;实现函数CompleteConnect,可以在输入Pin成功连接后取得媒体类型描述,并将输入数据的格式设置给应用逻辑控制对象;实现函数St-artStreaming和StopStreaming,可以分别调用应用控制逻辑对象的相应函数,进行流处理的初始化和反初始化操作。
(3)逻辑控制类的实现
逻辑控制类是本Filter设计的核心,框架函数和自定义接口函数的相关操作都是委托给逻辑控制类来实现的。该类实现了H.264.的解码参数的设置与解码操作,主要调用封装了H.264解码的C++类来实现。
利用ffmpeg库进行H.264解码时,需要自定义两个关键函数:open_net_file()和read_buffer_frame()。其中,open_net_file()函数完成与流媒体服务器的连接,接收指定流媒体文件的流相关信息,并返回类型为AVFormatContext结构体的值。read_buffer_frame()函数从bu-ffer缓冲中读取一帧数据,并交由库函数avcodec_decode_video()解码。
(4)自定义接口的实现
将Filter类从自定义接口类派生,并声明自定义接口的所有接口方法;然后在Filter类的实现文件中实现这些接口法,其实大都是调用应用逻辑控制类的相应函数;最后在函数NonDelegatingQueryInterface中暴露我们的自定义接口。
3.4 的设计
采用Directshow应用框架,采取界面、控制逻辑和数据分离的三层程序设计方法。界面类直接从标准的对话框类CDialog派生,在界面类中定义两个自定义类:数据封装类和逻辑控制类。界面类表达一种用户操作逻辑;数据封装类集中管理各种参数;逻辑控制类具体实现业务应用逻辑。采取Directshow应用框架,不必关心数据如何输入和输出,这些问题都由Filter框架负责,只需更多的关注数据处理的算法实现、效率优化等问题。采取界面、控制逻辑和数据分离的设计结构,不仅使程序框架清晰、容易被人理解,而且具有良好的移植性和扩展性。
基于Filter Graph Manager构建包含网络源Filter和H.264解码Filter的Filter Graph,即可实现网络流媒体的播放。界面类实现视频显示界面与用户的操作交互,控制逻辑可以控制视频的播放、暂停、停止、解码参数设置等,数据类实现对数据的操作管理。

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

4 结束语
本流媒体播放器系统采用了Directshow应用框架和H.264视频编解码标准,能很好的实现网络流媒体视频的播放,具有结构清晰、良好的可扩展性与可移植性。由于WINCE系统是微软提供的嵌入式实时操作系统,提供了对Directshow的应用支持,故本系统也可以很好的移植到win-ce的嵌入式应用平台,实现嵌入式端的流媒体视频播放。同时,本流媒体播放系统也可很好地移植到视频点播系统中,因其采用高压缩比、低码率的H.264视频编解码标准。能有效减少网络负载、减小带宽,从而减轻网络对流媒体传输中所存在的丢包、抖动、延时等影响。


上一页 1 2 3 4 下一页

关键词: 播放器

评论


相关推荐

技术专区

关闭