3 数字电视播放软件的设计
播放软件采用模块化设计,多线程并行处理。各模块并通过MAI(Media Application Interface)Engine完成相互问的数据传递和同步。软件要求在保持流畅播放MPEG(1,2,4),DivX,WMV和XviD等格式多媒体文件的同时增加播放数字电视的功能。
3.1 已有播放软件结构
已有的媒体播放软件结构:播放软件内各模块通过MAI Engine将相应模块组装起来,完成特定格式的媒体文件的播放或格式转换。
模块类型分为:File Reader模块、Demux模块、De-coder模块、Render模块和File Writer模块。模块是否需要载人、如何进行链接由MAI Engine根据播放的媒体格式而定。模块装载后以线程的形式独立运行,模块间通过数据缓冲区进行数据交换,并由MAI Engine负责协调,以确保模块运行正常。
3.2 播放软件内的TS流处理
在播放软件内实现数字电视TS流的播放,需要在原有的播放系统上增加TS流的Reader、Demux和Decoder模块。由于数字电视的音视频编码格式都是公开且确定的,因此需要相应的Decoder模块进行处理。基于MAE的TS流处理模块结构如图3所示。
(1)TS-Reader模块
TS-Reader模块是读取TS流的模块。它从硬件设备获取TS流数据,按照TS-Demux的数据缓冲区大小要求写入该缓冲区。主要实现打开TS流数据接口、关闭接口和读取TS流数据3个功能,分别对应3个主要函数一TSstreamopen()、_TSstreamclose()和 _TSstreamread()。由于数字电视不支持回放,因此不具备定位搜索(即Seek)的功能。
(2)TS-Demux模块
TS-Demux模块是进行TS流解析的模块,它是处理数字电视TS流的关键。TS-Demux从缓冲区中取到数据后,需要对TS流进行解析,然后返回 MAI当前TS流的节目信息,供应用程序选择。在确定节目流PID后,TS-Demux将根据音视频PID分检TS流,获取Video和Audio数据,供相应的Decoder解码。