基于T-DMB的手机电视开发要点

本文概括性地讨论手机电视这种嵌入式手持设备的软硬件开发要点:如何设计硬件,实现音视频同步,提高h.264解码速率,并防止dma缓冲溢出等。
硬件设计
硬件设计概述
硬件配置的选择要综合考虑,如cpu的处理功能关系到最终的解码显示效果。当然,选择一些高档通用处理器,或者是专用的媒体处理器都能够达到较好的效果,但却增加了硬件的成本。可以在最终显示效果和硬件的选择上采取折中方案。目前,能接收t-dmb和dvb-h标准的芯片还不是很多,可以选择市场上的一些主流芯片。本文讨论的这款产品的硬件配置为:s3c2440a(400mhz),64mb的sdram,apollo fs1110, kino2efs1026。基本可以满足手机电视对硬件的需求。通过天线接收到的射频信号送给射频前端的rf调谐芯片apollo fs1110,主要作用是把射频信号解调为if(intermediate frequency)信号。这款芯片是目前市场上的主流产品,可以接收多个标准的信号,而且体积小(5.0mmx5.0mmx0.9mm),功耗低(80mw),拥有三个低噪声前端放大器,涵盖 l-band、bandⅱ和bandⅲ三个频段。apollo fs1110把if信号送给kino2 efs1026,完成信源码解码输出mpeg2-ts数据。kino2是一款高度优化的基带处理器,体积小(10mm×10mm×1.3mm),功耗低(100mw),可以提供各种dmb码率,最高可以达到1.8mbps,片上含有r-s解码器,可以实现较佳的移动信道性能。kino2把信源码ts码流送给cpu,由cpu完成ts流的解复用、解码和显示。硬件设计框图如图1所示。
图1 硬件设计框图
硬件各功能模块描述
手机电视终端最终要做到支持多标准、多频段,这也是市场的需求。由于现在开展手机电视业务的三地所采用的频段不太一样,如北京和广东采用了vhf band 3,而上海采用了l- band,因此,同一手机电视终端如果要在国内不同地区接收手机服务,需要支持多频段。本文讨论的t-dmb采用的工作频段是vhf 3波段和l波段,因此,要使用fs1110的bandⅲ和l-band;而bandⅱ主要用于fm广播。fs1110的3个高频输入都可以使用,频段选择可以由fs1026通过iic接口来控制,同时,fs1110内部寄存器的初始化也是通过此接口来完成的。
下游的fs1026基带处理器模块接收rf调谐器送过来的if信号,最终完成信源解码。输出的mpeg2-ts数据支持并行和串行两种格式。串行数据可以通过spi接口和cpu直接连接。基带模块还可以通过scp(serial control port)接口和cpu进行控制信息的交换,scp接口和iic接口是完全兼容的。还可以用串口(uart)和cpu进行通信。由于有的商业dmb节目经过服务商加扰(经过加密),智能卡模块可完成解扰功能。
cpu的功能是通过spi接口接收ts数据,完成音频和视频的解码后显示。数据可以通过dma进行缓存,然后就可以从dma中读取数据进行解复用。dma方式为一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过cpu,也不需要cpu干预。整个数据传输操作在dma控制器的控制下进行。cpu除了在数据传输开始和结束时做一点处理外,在传输过程中,cpu可以进行其它工作。这样,在大部分时间里,cpu和输入/输出都处于并行操作状态。因此,可以大大提高整个系统的效率。在wince平台下,对dma的操作相当方便,驱动开发难度不大,读取数据就像操作普通文件一样。只有一点区别,就是要防止dma溢出。因为普通文件的读取完全可控,而这里处理的是一种“实时”流,有可能发生溢出。溢出包括上溢(数据读取过慢)和下溢(读取过快)。和mpeg的解码器接收端防止数据溢出的原理是一样的,主要是由于图像编码的格式不一样,发送的解码器前端的数据速率并不是恒定的。mpeg采用流速反馈控制来控制数据溢出,使得到达音视频解码器的数据速率趋于恒定。对dma的控制就简单些,用专用的一个线程读取数据,解复用线程依据数据的多少,可以丢弃某些帧或者放慢解码速度。不过一般还是丢帧的情况多。
硬件设计注意事项
设计硬件电路时的主要问题就是高频和电磁兼容,一般的方法是加屏蔽罩,可以把apollo fs1110加屏蔽罩,以减少模块的空间干扰。当然也可以把apollo fs1110、kino2efs1026做成外置式模块。还可以通过优化原理图的设计来减少高频的影响。因为原理图的好坏直接影响布局、布线的难度,以及以后板子性能的好坏。为了布局布线时能清晰地进行分区设计,以减少各个功能模块之间的影响,设计原理图时应把数字、模拟和rf电路分开。但是,由于手持设备体积较小,屏蔽罩一般是必不可少的。
软件设计
t-dmb标准概述
t-dmb采用h.264 视频压缩标准,音频采用专利费较低的mpeg-4 比特分片算术编码bsac(bit-sliced arithmetic coding)或者aac+(欧洲t-dmb采用),图像格式为cif(common intermediate format)(352×288),把这些音频和视频码流加上一些用户数据,经过mpeg-4 sl(sync layer)同步层打包和mpeg-2 ts(transport stream)复用后,交给调制器调制为适宜在信道上传播的信号发射出去。各种标准的接收端除信道解码有较大差别,信源的解码很相近。t-dmb系统发送端编码器结构如图2所示。
图2 t-dmb发送端编码框图
其中的mpeg-4 od/binfs发生器产生视听对象、场景时空关系信息和视听对象的描述符信息。iod发生器产生视听对象的初始信息:场景描述和对象描述信息。分段发生器主要收集slp和iod数据信息,用于产生和节目解复用相关的参考信息psi(program specific information)。在t-dmb的数据流中,可以通过解析pmt中的描述字段得到iod_descriptor ,由iod_descriptor可以得到场景、对象描述信息。由对象描述可以得到es_ descriptor等信息。sl同步打包器主要负责视听对象和辅助数据的同步。sl包经pes打包之后,再把pes包打为ts包发送给调制器。
软件的功能描述
软件的主要任务是ts流的解复用、h.264和aac+的解码,采用微软的direct show技术开发,可以降低开发难度和开发周期。direct show技术是微软提供的windows平台多媒体开发包,以com为基础。direct show使用filter graph的模型来管理整个数据流的处理过程。参与处理的各个功能模块叫filter,按功能分3类:source、transform、rendering filter 。source filter主要负责获取数据和前期的处理;transform filter负责数据格式的转换和传输,主要是负责解码;render filter负责显示。各个filter和应用程序的交互靠事件通知机制来完成:filter状态改变时发出一个事件,由filter graph manager处理或发给应用程序。整个软件可以分为5大功能模块,如图3所示。ts解复用器模块属于source filter,作用是从dma缓冲中获取数据,然后从ts流中解析pat(program association table)和pmt(program map table),得到相关节目的音频和视频数据ts包的pid(packet identifier)之后,就可以组合pes(packetized elementary stream)包,同时还可以得到和音视频同步相关的参数:pcr(program clock reference)、cts(presentation time stamp)、dts(decoding time stamp),最后把pes包去包头后的es(elementary stream)数据发给下游的解码filter。h.264和aac+解码模块属于transform filter,主要功能是把从上游获取的音频和视频数据进行解码,把解码得到的pu(presentation unit)重新排序(只有用到双向预测时需排序),送给下游的生成器。视频生成器和音频生成器模块属于rendering filter,主要完成显示功能。如果数据格式需要转换,可以在解码器和生成器之间加一个具有转化功能的transform filter。
音频和视频的同步
软件设计中的关键技术是解决音视频同步的问题。音视频同步主要在 ts解复用器中解决。要想做到音频和视频的同步,需要用到这几个参数:pcr、dts、pts。可以在ts包的调整域中得到pcr,从pes包中得到pts。pes包中的数据是sl包,可以从sl包头中得到dts。dts是解码时间,pts是显示时间。pcr是对编码器90k时钟的计数,它的作用是在解码器切换节目时,提供对解码器pcr计数器的初始值。pts、dts最大可能和pcr达到相同的时间起点,即对解码器提供一个公共的时钟参考,以便准确地进行音视频的同步。pcr捕捉到和dts数值相同的时刻,就可以进行音视频解码。因为视频编码的时候用到了双向预测,一个图像单元被解出后并非马上显示,可能在存储器中留一段时间,作为其余图像单元的解码参考,在被参考完毕后才显示。由于声音没有用到双向预测,它的解码次序就是它的显示次序,故对它mpeg只提出pts的概念,pts就是音频的dts值。即:
dts=pts (1)
如果得不到pts,那么按下式计算:
pts=pts_pre +xms (2)
其中,pts_pre表示前面一个au的pts,x是acc+一帧的时间间隔,以ms为单位。
一般视频对象分为i-vop、b-vop、p-vop三种编码类型。假设在解码器端的vo(video object)输入次序为:
1 2 3 4 5 6 7 8 9 10………
i b b p b b p b b p b b p b b i b b p........
由于视频对象编码时用到双向预测,解码器的实际解码次序为:
i p b b p b b p b b p b b i b b p b b ........
显示次序同解码器的输入次序。假设知道i帧的pts和dts。那么得到关于p帧:
pts_p4=pts_i +33.67ms * 3 (3)
dts_p4=dts_i +33.67ms (4)
b1帧:pts_bn=pts_i +33.67ms * 2 (5)
dts_bn=dts_i +33.67ms (6)
b2帧可以参考上面的两个式子。其中,33.67ms为视频帧时间间隔。
软件开发注意事项
关于h.264的解码效率问题。软件解码部分采用开源工程ffmpeg中的h.264解码器,它效率高,方便移植,其中,关键运算,如idct、运动补偿等还在几种不同平台上用汇编进行实现。把h.264解码器移植到arm平台,对于idct和运动补偿汇编代码,只需仿照其它平台的代码就可实现,其开发难度并不大。音频解码部分可以参考faac和faad开源工程。
结语
本文讨论的是能够接收符合t-dmb规范(各种标准的接收终端的差别很小)手机电视信号的嵌入式手持设备的软硬件设计概述,这种设备使用户可以不经过移动通信网络直接获得数字电视信号,能够满足人们随时随地对信息的需求。在实际的开发过程中的主要硬件问题是电磁兼容,软件是音视频的同步和h.264的解码效率问题。软件开发的难点集中在mpeg-2的解复用和direct show应用框架的设计。

Magic Cube是如何将传统游戏向区块链游戏转型的
国内的集成电路产业将迎来新一轮发展高潮
浅谈电容中绝缘介质的相对介电常数
微软向物联网靠近 定制 Linux内核版问世
比亚迪新款唐EV四驱高性能版尊荣型正式上市:搭刀片电池!加速直追911
基于T-DMB的手机电视开发要点
基于DSP和OZ890 的电池管理系统设计
EMUI 11:如何能将「会用手机」到「用得更高效」
手机芯片缺货或将成今年新常态
中国移动流量经营:移动用户和DOU增幅对通服收入增长拉动不足
为堵住白宫的“嘴”,大疆宣布2条应对措施
金融IC卡放置传感器是为了什么
边缘计算:IT和OT融合的催化剂
模拟电路设计工程师进阶参考书推荐
工业智造大时代下,3D打印应用越来越广泛
宁夏计质院完成了宁夏博物馆安防设备系统工程现场检测
光电混合缆的诞生及使用场景
杨曦:兼具超宽和极简的5G微波回传解决方案已快速融入5G时代
侧链和状态通道之间有什么不同
超低功耗小尺寸电子纸显示解决方案