(1)从USB端口接收CY7C68013所传输进来的TS码流,存入缓冲区内。这个功能相对简单,利用Cy-press公司提供的通用驱动程序和_些相应的API函数,在打开USB设备获得设备句柄之后,设置每次读取数据量的大小,然后开启一个线程循环读取数据,就能连续不断的得到TS码流。其中每次读取数据量的大小对于播放的流畅度影响很大,在本方案中曾经将该参数分别设为1 024 B,8 192 B,10 240 B,30 720 B,61 440 B等数值进行测试比较,发现该参数的值越大播放效果越好,它直接影响着丢包率。最终本方案将该值设为61 440 B,这也是实测所能得到的最大数值,在这个参数下节目播放出来的效果最好。
(2)搭建实时媒体播放器,将所接收到的TS码流解码播放。这是PC机应用程序的核心部分。在选择搭建实时媒体播放器的策略上有两种方法:一是利用开源的播放器进行修改,但绝大多数开源播放器都是基于Linux平台下编写的,要在Windows平台下使用需要经过移植才行,移植工作量很大,且移植后播放器稳定性较难控制。另一个是基于DirectShow技术,自行编写播放器。DirectShow是微软DirectX家族中的成员,与Windows有着天然的“血缘”关系,是Windows平台下搭建媒体播放器的最佳选择。并且微软提供了相应的开发套件,使得开发工作量得以减少,开发周期大大缩短。基于以上原因,本方案选择基于DirectShow技术搭建实时媒体播放器。
3.2 DirectShow技术在系统中的应用
在DirectShow技术中,一个播放器由多个功能不同的Filter连接而成,这些Filter不是独立工作,而是互相联系、互相配合,是一个有机的整体,这个整体称之为Filter Graph。一般将Filter分为以下几类,见表1。