基于AU 1 200的TS流处理设计
扫描二维码
随时随地手机看文章
中国地面电视传输标准的强制实施和直播星的开通,将极大地促进数字电视的发展。现在国内已经有多个省市开播了移动数字电视。对终端接收设备软件而言,数字电视的处理主要是对经过解码后的TS流分析和解析。
1 TS流及一般处理流程
1.1 TS流
TS流,即传送流(Transport Stream),是根据ITU-TRec.H.222.O | ISO/IEC 13818-2和ISO/IEC 13818-3协议而定义的一种数据流。它由一道或多道节目组成,每道节目由一个或多个原始流和其他一些流复合在一起,包括视频流、音频流、节目特定信息流(PSI)和其他数据包。在数字电视广播中传送的就是TS流。TS流可以承载多种信息流,如实际应用中的音视频流、数据流、控制流等。一个TS包的长度是固定的,以同步字节(sync_byte)Ox47打头,后跟数据包识别号PID和分组负载数据等,总长为188字节。从PID可以判断其后面负载的数据类型是视频流、音频流、PSI,还是其他数据包。节目特定信息流(PSI)用来描述传送流的组成结构,由特定的PID构成,其中最重要的是PAT表和 PMT表。
1.2 TS流的处理
数字电视接收设备在收到TS流后的一般处理流程如图1所示。TS-Reader是TS流读取模块,用于检测TS流并读取;TS-Demux模块是TS流分拆模块,用于将TS流中的音视频数据分检出来供后面模块处理;Video-Decoder模块是视频解码模块,依照TS流承载的视频数据压缩格式进行相应的解码工作,然后将解码后的视频数据送到显示设备输出;Audio-Decoder模块是音频解码模块,将TS流内的音频流解码,输出到音频设备。
2 基于AU1200的TS流处理系统组成
本设计的数字电视接收设备的硬件选用AU1200作为主芯片。AU1200是RMI公司推出的一款MIPS架构的高性能、低功耗、高集成度的嵌入式处理器。AU1200所具有的媒体加速引擎(Media Acceleration Engine,MAE)可以在没有DSP的条件下流畅播放MPEG-1、MPEG-2、DivX和Xvid等多种流媒体,而不需要PC(或其他设备)进行内容的代码转换。采用AU1200作为嵌入式数字电视播放设备的主芯片,在媒体播放性能上能充分利用其低成本、低功耗和高性能的特性。
MAE是AU1200处理器内置的片上硬件,它承担了视频解码、缩放、颜色空间转换和过滤的功能。MAE硬件上被分为前端和后端,各自执行特定的任务。 MAE的前端独立执行最为复杂和繁重的解码任务,包括反向量化、反向余弦转换、运动补偿和Windows Media Video 9覆盖平滑处理。MAE后端执行缩放、颜色空间转换和过滤功能。高效地利用MAE前后端可以减轻CPU的负载,提供更友好的人机交互。[!--empirenews.page--]
以Linux系统为平台,利用其多线程处理的优势,结合AU1200硬件组成的数字电视播放系统可以方便地实现数字电视TS流的播放。数字电视播放系统结构如图2所示。
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解码。[!--empirenews.page--]
(3)Audio-Decoder模块
在MAI开始链接各模块时已确定了音视频的解码格式,因此音视频的解码模块在链接时已确定下来。此时的音频解码Audio-Decoder模块就是处理音频解码的模块,依据不同的数字电视格式,该音频解码格式可能是mp3或ac3等。音频解码后,音频数据送往Audio-Render模块驱动硬件发出声音。
(4)Video-Decoder模块
视频解码Video-Decoder模块也是进行确定编码格式的解码工作。对于MPEG2的编码格式,Video-Decoder将数据交给MAE的前端处理,由MAE送到显示屏上显示。对于其他不能使用MAE前端进行处理的视频格式(如H264等),必须由软件进行解码,形成YUV数据,然后将YUV数据输入到MAE的后端处理。
3.3 数字电视播放效果
需要对搭建起的数字电视播放系统进行测试。通过测试,数字电视设备接口的数据缓冲区需要设置为256KB,如果存储容量允许采用512 KB到1 MB更好。在数字电视模块采用USB接口进行播放时,播放流畅,音视频同步,数字电视的实际播放达到了预期的效果。
3.4 增加对其他媒体格式的支持
对于其他常见的媒体文件格式,如flv和rmvb等,也可以通过增加该格式的 Demux和Decoder实现播放。由于视频Decoder解码后得到的是YUV数据,因此直接将该数据交给MAE-BE端处理。音视频同步方面,需要在提交YUV数据给MAE-BE端处理时,将当前帧的时间戳一并提交给MAE,即可由MAE内部实现音视频同步。当然也可以自己在程序中进行音视频同步,这需要在提交YUV前从MAE取得音频播放的时间戳,然后与当前视频帧的时间戳比较,进行必要的延时操作。
结 语
本文详细介绍了数字电视播放系统的建立过程。该系统基于AU1200芯片,结合软硬件优势,实现了数字电视TS流的播放功能。通过对媒体播放程的扩展,还可以实现如flv和rmvb等多种媒体格式的解码播放。