新闻中心

EEPW首页>消费电子>设计应用> 基于SMP8654的MKV播放器设计与实现

基于SMP8654的MKV播放器设计与实现

作者: 时间:2010-09-07 来源:网络 收藏

文件格式的显著特点是模块化、结构化存储。每一个高一级的元素由若干次一级的元素组成,直至最基本的组成元素,每个元素都是一个TLV结构。一个标准的文件有两部分组成:EBML Header和Segment。EBML Header由EBMLVersion、DocType等子元素组成,包含了文件的版本、文档类型等相关信息。Segment部分保存了媒体文件的视频和音频的实际数据,其data部分又可以分为SeekHead、Tracks、Cluster等若干子元素(表1)。所有元素的处理都可以按照一个统一的流程来进行。我们可以仿照TCP/IP协议分层的思想,对每一层的每个功能都用一个函数来完成,使用更底层的函数完成此项功能,并可被更高层的函数调用。文件解析时,从文件顶层开始,每当上一级的元素解析到有某个子元素时,调用此函数进行次一级的解析,依次直至文件结束,即可完成对文件的解析处理。整个的解析调用过程如图3所示。Hea-der Parse和Segment Parse为文件最上层的元素解析函数,Cluster Parse、Tracks_Parse等为次一级组成元素的解析函数。ebml_read_ele-ment_idebml read element length为最底层基本组成元素的解析函数。

本文引用地址://m.amcfsurvey.com/article/166596.htm

10e.jpg


3.2 设置硬件解码器音视频核心参数
Tracks用来描述文件中包含的每一路多媒体流的信息。一路多媒体流用一个TrackEntry描述,所有的track都要在一个Tracks中进行描述。一个TrackEntry主要包含:TrackNumber(判定属于哪一路流的ID)、TrackType(video、audio或者subtitle)、TimeScale(时间戳单位)、CodecID(编码格式);CodecPrivate(不同的编码格式所需的私有数据)等;对于视频,还包含以下信息:PixelWidth、PixelHeight等。对于音频,track还包含以下信息:channels、Sampling Frequency等。这些是关于音视频能否正确解码播放的关键参数,需要在解析时获得,然后通过硬件操纵函数设置。
Cluster包含实际的数据,一个Cluster块,通常是几秒钟时间跨度的媒体数据,一个文件有数以千计的Cluster。每个Cluster又有若干个BlockGroup。根据Cluster和BlockGroup的起始pts和持续时间,可以计算出当前Block的实际pts。PTS是用来确定播放时间的重要数据,也是音视频同步的关键信息。这部分信息要在送入视频或音频数据的同时设置硬件解码器。
3.3 性能优化
MKV封装的影片通常为高清影片,分辨率在1920×1080,即使采用H.264等先进编码格式,码率依然非常高。同时,MKV支持可变码率,可变码率能够减少文件的体积,但是剧烈波动的码率会使播放不能流畅进行。在高清文件中码率一般在10~30M/ps之间,最高可达60Mp/ s,如此高的码率,如果不做特殊处理,播放时很容易出现卡顿,播放不流畅等问题。为解决这个问题,我们从两方面考虑。
在解析方面,解析的效率关系到能否尽快将数据读入缓冲区,如果处理时间过长,造成一段时间内缓冲区为空,这时候就会出现卡顿。 MKV文件中通常包含一路视频、多路音频和多路字幕,播放时只选中其中一路音频和一路字幕,其他路的数据可以被视为无效数据。在解析时,可以根据Block头的标记判断出这路数据是当前播放需要的有效数据还是无效数据。如果是有效数据,则继续解析,并将音视频数据送入缓冲区,如果是无效数据,不进行解析,直接移动文件指针到下一个Block,这样可大大加快文件解析和数据读取速度。
在播放方面,通常播放时的处理流程是读取一帧数据,然后送入硬件解码器,等到收到硬件解码器为空的信号,再读取下一帧的数据。如果是处理低码率文件的播放,这样做不会有问题,但是当文件分辨率比较高,码率比较高时,解析读取时问和解码时间都会增加,这样做就会造成卡顿。为解决这个问题,我们在内存中了一个缓冲FIFO,相当于一个滑动窗口(图4),缓冲区可以存放若干个帧(一帧就是一个Block,根据帧的大小缓冲区存放的个数不等)。当缓冲区未满时,读取文件中的一个Block并解析,然后将实际数据到缓冲区的队尾。当发现
硬件缓冲区空闲时,将FIFO队首的数据从内存直接送入硬件缓冲区,不需要再去读取文件。由于缓冲区中有多个帧,能够提供一定的缓冲,这样在码率波动时就仍然能够及时提供数据,避免出现硬件缓冲区为空造成的卡顿,播放不流畅等问题。

10f.jpg

4 结语
本文详细介绍了MKV封装格式的特点。并提出了一种MKV方案,经验证,能够达到对高清MKV文件的流畅播放,并已经实际应用到产品上。接下来将做进一步研究,在MKV的基础上,一种针对多种封装格式的通用媒体框架,将FLV、FLAC等其他格式也融合进来,并提供较好的可扩展性,方便后续扩充其他的封装格式。

adc相关文章:adc是什么



上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭