流媒体视频图像保存的研究与实现
2015-08-28薛莹莹
薛莹莹
(河南博物院,河南 郑州450002)
1 引言
流媒体技术已经成为现在最热门的技术之一,它不同于传统媒体,改变了以往人们获取多媒体信息是需要等待多媒体文件全部下载之后再播放的方式。用户可以一边解压播放前传送过来的数据包,一边下载后续的数据包,不必等待整个文件下载完毕。目前,流媒体以其特有的广泛性和交互性逐渐成为互联网应用的主流。因此,开展流媒体相关理论的研究,不仅可以促进流媒体理论本身的发展,而且对音视频直播、点播的发展也具有重要的推动作用。
2 流媒体常见文件格式
实现流式在线直播视频文件的保存需要对流媒体的文件格式进行识别,所以必须深入了解常见流媒体文件的内部组成结构,从而获取每一种文件区别于其他文件的特征信息,以保证不同格式的文件按照其相应的规范进行保存。
2.1 RM格式
RM(RealMedia)文件由3部分内容组成:报头部分、数据部分和索引部分[1-2]。其基本组成单位是块(chunk),如图1所示,每个块包括以下字段:四字节的文件标识符、四字节的数据大小和数据块部分。
图1 RM文件块示意图[2]
2.1.1 报头部分(Section)
RM的报头包括以下4种:RM文件报头(RealMedia文件的第一个块)、属性报头(PropertiesHeader)、媒体属性报头(Media Properties Header)、内容描述报头(Content Description Header)。由 于RM文 件 使 用 四 字 符 编 码(.RMF)来标识文件,所以RM文件报头必须是媒体文件的第一个块。
2.1.2 数据部分(Data Section)
RM文件的数据部分由标志数据块开始的数据部分报头和包含媒体数据的媒体数据包2部分组成。
2.1.3 索引部分(Index Section)
RM文件的索引部分由索引块报头和索引记录2部分组成。
2.2 ASF格式
ASF(Advanced Streaming Format)是Microsoft公司推出的,在Internet上实时传播多媒体的技术标准[3-4]。
ASF文件由文件头对象(Head Object),数据对象(Data Object)和可选 的索 引 对象(Index Object)3部分组成[5]。ASF文件组成结构如图2所示。
图2 ASF文件结构[3-4]
文件头对象用于描述文件的全局信息,并且是文件中唯一一个可以嵌套其它次级对象的顶级对象。数据对象以固定大小的数据包来存储多媒体数据,通常包含一个音频流和若干个视频流。索引对象为可选项,用于保存时间与媒体数据位置的映射信息,以便实现电影播放时的拖放功能。
2.3 MOV格式
MOV(Movie digitalvideo technology)是由Apple公司推出的流媒体视频格式,使用这种文件格式不仅可以存储单个的媒体内容,而且能够保存对该媒体作品的完整描述[6]。
QuickTime基本的存储结构有2种:标准原子(Classic Atom)和QT原子(QuickTime Atom)。QT原子容器(QuickTime Atom Containers)是QT原子的属性分层结构,提供在QuickTime中存储信息的基本结构。
2.3.1 原子
原子分为报头和原子数据2部分。其中报头又包含数据类型和数据大小信息。
2.3.2 QuickTime原子容器
QuickTime原子容器是QT原子的属性分层结构。每个QT原子包含数据或其它原子。如果一个原子包含其他原子,那么它就是双亲原子(ParentAtom),被包含的原子叫做子原子(Child Atom)。每个双亲原子的子原子由Atom类型和Atom ID唯一标志。包含数据的QT原子叫做叶原子(Leaf Atom)。
3 三种文件格式的特性对照
下面将从以下几个方面对上述3种常见的流媒体文件格式的特性进行比较分析:
通过以上分析可以发现:
①跨平台:MOV格式和RM格式不受系统平台的约束,可以跨平台应用。而ASF文件只支持Windows平台。
②支持的类型:Real Network能支持其他2种格式,而微软和Apple公司则坚持死守自己的阵地。
③扩展性:MOV文件和ASF文件采用的是将媒体信息和媒体数据分开的方式,便于扩展。RM扩展性较差。
④复杂性:MOV文件中原子之间为树状结构,这种树状结构给MOV文件带来强大的功能和兼容性的同时也使得文件结构变的复杂、冗余较多。RM文件和ASF文件结构相对简单。
4 文件格式识别与数据存储模块的实现
4.1 缓冲区设计
缓冲区是实现流媒体数据存储的重要基础,它的结构直接决定了流媒体视频图像的保存系统中媒体数据的读写方式。为了适合网络传输的特点,本文设计了环形队列缓冲区,满足了在缓冲区内对数据进行读写操作的需要。
该缓冲区是一个先进先出队列,包括读指针和写指针2个指针。通过移动读指针和写指针来实现缓冲区数据的读取和写入。
该环形队列的特点是:内存空间大小固定,不需要对内存进行动态的释放和分配,并且内存空间可以反复使用。队列满的情况:Front追上Rear时;队列为空的情况:Rear追上Front时。
对该缓冲区开辟了排序线程和存储线程2个线程。排序线程的主要功能是负责将已经过滤的数据包放入缓冲区中,并判断其传输层协议是TCP还是UDP。如果是TCP数据包,则对TCP数据包进行排序;反之,直接进行解析保存。存储线程的主要功能是对已经有序数据包进行解析,去除首部,提取出音视频数据并将数据写入视频文件。
4.2 文件格式的识别
文件格式的识别是实现在线直播视频文件实时接收的重要环节。只有正确识别了服务器所传输的文件格式才能将有效载荷按照相应的文件格式进行存储。通过对目前常见文件格式的分析可知,每种文件格式都有其特殊标志,不随文件扩展名以及采用的音视频压缩算法改变,即文件格式是一种带有特殊标识的“容器”。因此本文通过提取每个媒体文件的唯一特征标识符,来实现对流媒体文件格式的识别。流程图如图3所示。
4.3 数据包出错或乱序处理
UDP协议是无连接的不可靠传输协议,对数据包的到达顺序以及是否正确并不关心,协议本身并不能保证所有数据包都能够顺利到达客户端。所以对UDP数据包出现缺失的情况,采用的是直接丢弃的方法。
TCP协议是面向连接的可靠传输协议,在网络传输过程中,由于各个IP数据包经过的路由不同,有可能先(后)发送的数据包后(先)到达,导致数据包有可能出现乱序的情况,所以需要对IP数据包进行排序。这就需要首先解析出TCP首部,再根据TCP中的信息进行排序。本文为此设计了暂存队列和断点保存队列,分别用于暂存捕获的数据包和用于保存缺少数据包的序号。
4.4 文件头部的重构
文件头部包含了整个媒体文件的重要信息。通过实验发现,文件的头部并没有在媒体数据传输阶段进行传输,而是在服务器与客户端控制信息交互阶段使用TCP协议进行传输,并且采用了Base64编码。这是因为RTP协议并没有规定文件头部传输时机,可以在控制信息交互阶段进行传输也可以在实际数据传输阶段进行传输。
Base64是一种数据编码算法。Base64编码被设计用来对数据内容进行编码以适合网络传输,编码后不易直接识别,编码效率高,速度快。
Base64最初应用在Email领域,早期的一些邮件网关只识别ASCII,如果发现邮件里有其它字符,就会将其过滤掉,这样中文邮件和有图片附件的邮件在这些网关上就会发生问题,于是将中文和图片都使用base64编码以后再传输,就能解决这个问题了。在网络传输中将较长的标识信息(例如ASF的GUID)编码为字符串,将非ASCII字符转换为ASCII字符,更适合网络传输。
5 展望
本文在深入研究流媒体文件格式的基础上,对比分析了3种常见的流媒体文件格式的特性,并对媒体数据存储的具体实现过程进行了详细的阐述。目前基于P2P的流媒体技术已经从成长期步入成熟期,由于时间等方面的原因,本文并没有对其进行深入的研究,未来如果能在P2P传输模式下,实现对流媒体数据的实时接收和保存将具有重要的理论意义和实用价值。
[1]马杰,田金文,柳键.流媒体技术及其文件格式[J].计算机工程与应用,2003,39(23):49-52.
[2]曹攻靖,杨征,等.Real与Media流媒体技术比较[J].计算机应用研究,2001,18(6):103-105.
[3]齐开悦,陈剑波,田鹤.一种基于ASF的新型多媒体流格式[J].计算机应用于软件,2004,21(3):70-72.
[4]D WU,T Hour,W Zhu et a1.Streaming Video over the intermit:Approaches and Directions.IEEE Tram Circuits Sys Video Techno,2001,11:282-300.
[5]Advanced System Format(ASF)Specification Revision[S].Microsoft Coroporation,2015.
[6]范镇元.Quicktime VR技术及其文件格式[J]计算机应用.1998,18(3):13-15.