新闻中心

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

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

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

在服务器端首先将连续的H.264流分成一块一块小包的负载数据,并且加上一个信息头一起使用TCP协议发送;在客户端根据信息头描述,将小包的负载数据进行拼装,然后进行H.264的解码播放。Socket数据传送结构为:负载类型(8 bit)、负载数据长度(16 bit)和负载数据包(2324Byte)。
客户端的实现可以参考SDK中的MEMFile Filter,直接从SDK例子将asyncrdr.cpp、asyncrdr.h、asyncio.cpp、asyneio.h四个文件拷贝过来,然后在MemFilter.h文件中从CAsyncStream派生流处理类CMemStream,定制数据源并进行数据的读取操作;从CAsyncReader派生滤波器类CMemReader,实现含1个输出PIN的Source Filter框架,完成与Splitter Filter的连接。
网络源滤波器类间数据流程如图2,下一级Filter“拉”线程数据流程如图3。其中:CAsyneStream用以标示数据流;CAsyneRequest标示输入与输出请求;CAsyncIo实现数据输入和输出的控制。编程主要实现CMemStream:Read()函数以实现从特定的数据源读取数据到下一级Filter的Sample中。

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

b.JPG
3.3 H.264解码Filter的设计
该滤波器工作于Splitter和Renderer filter之间,包含一个输入和一个输出,且输入和输出pin上的媒体类型不一致,故选择CTrans-form Filter作为基类,派生子类CX264Decode。
ffmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。利用ffmpeg中的Libavformat和libavcodec库访问大多数视频文件格式是一个很好的方法。将ffmpeg中关于h.264解码的操作封装为C++类,供H.264解码Filter调用以实现解码功能。
子类CX264Decode必须要实现的纯虚函数有:CheckInputType()实现输入Pin上的媒体类型检查;CheckTransform()检查是否支持从该输入pin到输出pin的变换操作;DecideBufferSize()决定Samlple内存的大小;GetMediaType():提供输出Pin上的首选媒体类型;Transform():实现解码变换。
子类CX264Decode可选的重写虚函数有:初始化和反初始化流:StartStreaming()和StopStreaming();响应质量通告消息:AlterQuali-ty();获取媒体类型被实际设置的时间:SetMediaType();连接时获取额外的接口:CheckConnect()、BreakConnect()和CompleteConneet();定制变换过程:Receive();标准化设置输出Sample:InitializeOutputSample()。



关键词: 播放器

评论


相关推荐

技术专区

关闭