基于SMP8654平台的MKV播放器设计
1 MKV封装格式
MKV全称为Matroska Video,是一种新的多媒体封装格式。多媒体封装格式也称多媒体容器(MulTImedia Container),它不同于H264、MPEG-2、MPEG-4这类编码格式,它只是为多媒体编码提供了一个“外壳”,本身不涉及编码。MKV是由开源组织Matroska Development Team制定的一个标准,总共包括三部分:MKV(Matroska Video)、MKA(Matroska Audio)和MKS(Matroska Subtitles),后两种格式分别针对音频和字幕,应用较少。MKV的目的是代替AVI等传统封装格式。AVI是Microsoft于1992年推出一种封装格式。其含义是Audio Video Interactive,就是把视频和音频编码混合在一起储存。微软在1996年推出了AVI的改进版本AVl2.0。AVI格式上限制比较多,只能有一个视频轨道和一个音频轨道,还可以有一些附加轨道,如文字等。AVI格式不提供任何控制功能。总体而言,AVI为主的传统封装格式结构陈旧,只能包含少数几种音视频格式,并且不够开放,可扩展性差。正因为如此,才促成了Matroska这类新的多媒体封装格式的诞生。
MKV相对于传统的封装格式,有如下优点:支持可变比特率(VBR),支持错误检测以及修复软字幕,支持流式传输,强大的开放性和跨平台兼容性,支持16 路以上的音频流和字幕流等。Matroska最大的特点是能容纳几乎所有类型的视频、音频及字幕流,除H.264以外,也可包括MPEG4、MPEG2、 Ac3、AAC等其他视频和音频格式,即使是非常封闭的RealMedia及QuicklTime也被它包括进去了,并将它们的音视频进行了重新组织来达到更好的效果。
由于MKV封装格式本身具有众多优点,随着互联网和高清影片的流行,MKV格式得到了广泛的应用,互联网上越来越多的高清影片采用MKV格式。然而,MKV是一个由开源组织制定和推广的标准,缺乏大商业公司的支持,导致MKV文件的播放缺乏一个完整和有效的设计实现。在性能和资源受限的嵌入式平台上,这个问题尤为严重。虽然目前有很多高清播放机都提供了对MKV格式的支持,但是大部分实现方案都存在支持不完善、播放效率比较低的问题,播放高码率的影片时会出现不流畅、画面卡顿等问题,影响观看效果。本文提出了一种基于SMP8654平台的MKV播放器的设计与实现方案,并针对嵌入式系统的特点做了优化,较好地达到了MKV文件流畅播放的要求。
2 硬件平台和软件总体设计
硬件平台以SMP8654芯片为核心,通过总线与RAM、SATA硬盘、Flash闪存、输入输出设备等外设相连。SMP8654是Sigma Design公司推出的多媒体播放SoC解决方案,集成了一个强大的多媒体处理器、强健的内容保障系统、新的DDR2内存控制器、多个片上CPU以及完备的系统外围设备接口。从媒体播放角度看,smp8654提供了一个完整支持高清晰度视频解码的先进解码引擎,能够支持对MPEGl、MPEG-2、 MPEG-4、H.264、WMV9、VCl以及AVS等格式的硬件解码,支持高效能的图形加速,支持多标准音频解码和先进的显示处理能力。Siena Design公司为方便第三方厂商开发应用,提供了与芯片相关的开发工具包和开发框架。本文的工作也基于这个框架进行二次开发。软件平台方面,由于一个完善的播放系统已经相当复杂,不适合直接操纵底层硬件来完成功能,需要操作系统的支持。本项目中操作系统采用uclinux,文件系统采用Romfs。 uclinux是专为嵌入式系统定制的一款Linux,它具有标准Linux操作系统的稳定性、强大网络功能等主要优点,但是却不像标准Li-nux那样复杂,主要针对没有MMU(内存管理单元)的微控制器。Romfs是一款专门为嵌入式系统设计的文件系统,体积小、可靠性好、读取速度快,是嵌入式系统常用的文件系统。
![](../img/eep-analog/analog-5318q5tnlzjxnkx.jpg)
媒体文件的播放流程一般包括如下几个步骤:系统初始化、判断文件类型、文件解析、设置硬件解码器和音视频解码,其中文件解析和音视频解码是关键部分。由于 SMP8654集成了完善的音视频硬件解码器,解码工作主要由硬件完成,我们只需将音视频数据按要求送入相应的解码缓冲区即可。整体的软件架构如图2所示。
![](../img/eep-analog/analog-5319bqxcaczapbb.jpg)
3 系统关键技术设计和实现
3.1 MKV文件解析
MKV文件解析主要是对MKV格式的各个组成元素进
模拟电路 模拟芯片 德州仪器 放大器 ADI 模拟电子 相关文章:
- 12位串行A/D转换器MAX187的应用(10-06)
- AGC中频放大器设计(下)(10-07)
- 低功耗、3V工作电压、精度0.05% 的A/D变换器(10-09)
- PIC16C5X单片机睡眠状态的键唤醒方法(11-16)
- 用简化方法对高可用性系统中的电源进行数字化管理(10-02)
- 利用GM6801实现智能快速充电器设计(11-20)