基于S3C6400的移动多媒体广播终端设计
扫描二维码
随时随地手机看文章
0 引 言
移动多媒体广播目前已经成为炙手可热的发展热点。移动多媒体广播业务是指通过卫星和地面无线广播方式,在具有7英寸以下小屏幕的移动便携式终端上,实现随时随地接收广播电视节目收视与信息服务。
我国于2006年提出了具有自主知识产权的中国移动多媒体广播(China Mobile Multimedia Broadcast—ing,CMMB)系统,能够支持诸如手机、PDA、MP3、MP4、数码相机、笔记本式计算机等小尺寸、小屏幕、移动便携的多种终端,实现随时随地提供广播影视节目和信息服务,满足当代社会“信息无处不在”的需求。为了实现较高质量的电视节目接收和播放,终端的性能起着重要的作用,其中终端的音视频解码能力又是主要因素。同时兼顾到终端的成本,选择合适的软硬件平台十分关键。因此本设计兼顾数字移动电视的性能要求和成本两个方面。
l CMMB系统架构与终端结构简介
2006年10月24日,国家广播电影电视总局正式颁布了中国移动多媒体广播CMMB系统的广播信道行业标准《GY/T 220.1—2006移动多媒体广播第1部分:广播信道帧结构、信道编码和调制》,确定了采用我国自主研发的移动多媒体广播传输技术标准(Satellite—Terrestrial Interactive Multi—service Infrastructure。STiMi)。目前国际上还没有形成统一的移动多媒体广播技术标准,尚处于大规模应用的前期,因此该标准的及时出台,对我国移动多媒体广播和相关民族工业的发展具有重要的促进作用。
CMMB技术体系是利用大功率S波段卫星信号覆盖全国,利用地面增补转发器同频同时同内容转发卫星信号补点覆盖卫星信号盲区,利用无线移动通信网络构建回传通道,从而组成单向广播和双向交互相结合的移动多媒体广播网络。CMMB体系架构如图1所示。
数字移动电视终端的硬件部分主要分为两部分:电视的接收模块和播放显示模块。前者负责控制CMMB信号,后者负责播放音视频数据。数字移动电视的接收模块采用泰合志恒公司生产的模块。接收模块的主要功能包含:电视芯片的初始化,设置频点,扫描频点;获取频道信息,设置频道;接收及停止音视频数据;测试电视信号强度大小。播放显示模块以三星的ARMll处理器S3C6400为核心的嵌入式系统。
终端的软件部分以Linux操作系统为平台,而电视播放器软件结合泰合志恒电视接收模块的SDK,能够实现数字电视的控制和播放。
2 数字电视系统软件设计
数字电视的系统结构由主界面、电视接收模块SDK和音视频播放模块3部分组成,如图2所示。
3个模块的主要功能如下:
主界面:提供数字移动电视的用户界面,与用户交互,提供播放电视,选台,设置音量,设置静音等功能。电视接收模块SDK:数字电视控制引擎,封装SPI的驱动程序,向上提供接口,用来接收数字电视信号,提供音视频数据,控制信息等。音视频播放模块:用于播放音视频数据。
2.1 主界面[!--empirenews.page--]
主界面完成的具体工作包含:搜索可用的电视频点;选择收看的电视频道;检测当前的信号强度;读取接收到的音视频数据;对接收到的音视频数据进行解码;播放解码后的音视频数据;对当前播放的节目进行录像;调节音量大小;静音功能。
主界面利用调用泰合电视接收模块SDK,通过SPI驱动程序读写数据,并将接收到的CMMB复用子帧解析成H.264格式的视频数据,AAC格式的音频数据和其他数据。然后调用播放器模块,将H.264格式的视频数据和AAC格式的音频数据解码并播放。
2.2 电视接收模块SDK
电视接收模块SDK提供对CMMB电视信号的控制,包括:电视芯片的初始化,设置频点,扫描频点;得到频道信息,设置频道;接收及停止音视频数据;测试电视信号强度大小。
该模块主要由数据处理模块及信号控制模块2个子模块组成。
数据处理子模块在打开引擎时,会生成一个线程,这个线程用来读取CMMB信号,并进行分析、处理,其流程如图3所示。
这个子模块是一个死循环,在循环中,先通过一个标志进行判断,如果需要处理数据,首先读取一帧数据,如果没有数据,则阻塞在这儿。然后对这帧数据进行分析,分别放入音频,视频,其他数据的缓冲区,最后,调用回调函数对各种数据进行处理,将音视频数据发送给音视频播放模块来播放。
另一个子模块,信号控制模块主要是提供控制接口让上层调用,以完成对CMMB信号的处理。该子模块主要包含以下功能接口函数:引擎的初始化:创建读数据线程,启动初始化;引擎的打开:对电视芯片初始化;设置频点:设置当前频点;得到ESG信息:从信号中提取ESG信息并分析;关闭引擎:清除用到的资源,硬件重置位;得到频道信息列表:发送请求,分析频道信号;设置频道:设置当前频道;得到参数:能得到信号强度,当前频道等参数。
2.3 音视频播放模块
音视频播放由3个线程来完成。这3个线程分别为视频处理线程、音频处理线程、数据接收线程。
视频处理线程:
(1)先判断缓冲区队列有没有视频数据,如果没有,休眠10 ms;
(2)有数据的话,因为视频数据是根据时间戳顺序作为队列放在缓冲区的,取出第一帧,判断是否已经过时,如果是很老的数据,已经错过了播放时间,则判断帧类型,如果是关键帧,则解码并显示,否则,丢掉这一帧,然后转到第(1)步;
(3)否则,判断这一帧是否到了播放时间,如果是,则将这帧数据解码并显示,然后转到第(1)步;
(4)如果没有到播放时间,则休眠10 ms。然后转到第(1)步。
音频处理线程:
(1)先判断缓冲区队列有没有音频数据,如果没有,休眠10 ms;
(2)有数据的话,因为音频数据是根据时间戳顺序作为队列放在缓冲区的,取出第一帧,判断是否已经过时,如果是很老的数据,已经错过了播放时间,则丢弃,然后转到第(1)步;
(3)否则,判断是否到了播放时间,如果是,则将这帧数据解码并播放,然后转到第(1)步;
(4)如果没有到播放时间,则休眠10 ms。然后转到第(1)步。
数据接收线程:数据接收线程不属于播放器模块,它是电视接收模块的一部分。
(1)如果有数据到来,判断有没有视频数据,如果有,将它们全部插入到视频缓冲区;[!--empirenews.page--]
(2)判断有没有音频数据,如果有,将它们都插入到音频缓冲区;
(3)阻塞,等待数据到来;
(4)当有数据到来时,转到第(1)步。
音视播放器模块共有4个子模块:缓冲区管理、音视频同步、音视频解码、视频显示。
2.3.1 缓冲区管理
一共设计2个队列,音频缓冲队列,视频缓冲队列。每帧数据放入缓冲区,成员分别为帧长,帧类型(视频有,音频无),时间戳,数据指针。帧长表示帧数据长度,帧类型里,1表示关键帧,0表示非关键帧,时间戳表示帧数据播放的时间,数据指针指向帧数据缓冲区。当有新的数据到来时,构造一个帧成员,填入各项参数,然后根据时间戳,将他插入到缓冲队列,播放时间近的放在前面。流程如下:
(1)首先构造一个帧缓冲成员;
(2)按照帧数据内容填充帧缓冲;
(3)根据时间戳,按照近的在前面的原则,放入缓冲区队列。
2.3.2 音视频同步
音视频数据始终与系统时间进行同步,起初初始化时,先在缓冲区存放1 s的数据。因为系统时间与发送的数据时间戳不一定相同,所以不用绝对时间,而是以缓冲区的第一帧时间戳为开始时间,后面的数据都以与这帧数据的时间差这个相对时间为准。
视频和系统时间同步的流程如下:
(1)判断缓冲队列是否为空,如果是空,休眠10 ms;
(2)如果非空,从缓冲队列取出一帧,判断这帧数据是否已经过时,如果超过播放时间100 ms以上,则判断帧类型,如果是非关键帧,丢掉这帧数据,否则处理这帧数据,然后跳到第(1)步;
(3)如果这帧数据刚刚超过播放时间并且超过时间不超过100 ms,则处理这帧数据,然后跳到第(1)步。
音频和系统时间同步的处理流程如下:
(1)判断音频缓冲区是否为空,如果是空,休眠10 ms;
(2)如果非空,取出一帧数据,判断是否已经超过播放时间100 ms,如果是,丢弃这帧数据,跳到第(1)步;
(3)否则,处理这帧数据,跳到第(1)步。
2.3.3 音视频解码
数字移动电视信号目前音频采用的是AAC编码,利用开源解码库libfaad2来解码,libfaad2的使用流程如下:
(1)首先对解码器进行配置,设置一些解码参数,例如采样率,声道数等;
(2)然后初始化解码器;
(3)如果有需要解码的音频帧,依次调用NeAAC—DecDecode进行解码;
(4)当音频帧都解码完毕,需要关闭解码器。
三星的S3C6400芯片提供了多种格式视频的硬件编解码器,简称为MFC(Multi—format Video Codec),支持的功能有:MPEG一4 Simple Profile编解码;H.264/AVC Baseline Profile编解码;H.263 P3编解码;VC一1(WMV9)Main Profile编解码;支持多任务,如同时完成1路编码和3路解码;支持多格式,如同时进行MPEG一4编码和H.264解码。理论上MFC性能可以达到全双工的720*480 30帧/s(或720*576 25帧/s)的编解码。
MFC驱动负责直接控制MFC硬件完成实际的编解码操作,提供类似字符设备的接口;MFC API封装了底层驱动的控制接口,给上层提供函数调用的接口方式,解码器调用流程如图4所示。
2.3.4 视频显示[!--empirenews.page--]
对于解码后的数据,首先要将YUV格式转换为RGB格式,转换可以使用硬件来进行。三星的S3C6400芯片提供的PostProcessor(以下简称Post或PP)支持的功能有:视频/图像的缩放;视频格式转换;颜色空间转换(RGB<一>YUV);视频输入支持420,422格式,输出支持YCbCr420,YCbCr422格式;图像格式支持16位RGB(565格式)、24位RGB;最大分辨率支持2 048×2 048;支持单帧模式(Per Frame RunMode)和自动模式(Free Run Mode)。
3 结 语
本数字电视系统能够实现稳定可靠的对CMMB信号的控制并具有完善的正常或异常退出机制。接收CMMB标准(H.264 320*240/AAC)的音视频数据时,播放速率达到25帧/s。画面流畅,停顿少,没有明显的马赛克。界面友好,操作简便,功能稳定,同时具有较高的实时性。