OGG流媒体文件格式分析.docx

上传人:b****1 文档编号:15063548 上传时间:2023-06-30 格式:DOCX 页数:8 大小:20.32KB
下载 相关 举报
OGG流媒体文件格式分析.docx_第1页
第1页 / 共8页
OGG流媒体文件格式分析.docx_第2页
第2页 / 共8页
OGG流媒体文件格式分析.docx_第3页
第3页 / 共8页
OGG流媒体文件格式分析.docx_第4页
第4页 / 共8页
OGG流媒体文件格式分析.docx_第5页
第5页 / 共8页
OGG流媒体文件格式分析.docx_第6页
第6页 / 共8页
OGG流媒体文件格式分析.docx_第7页
第7页 / 共8页
OGG流媒体文件格式分析.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

OGG流媒体文件格式分析.docx

《OGG流媒体文件格式分析.docx》由会员分享,可在线阅读,更多相关《OGG流媒体文件格式分析.docx(8页珍藏版)》请在冰点文库上搜索。

OGG流媒体文件格式分析.docx

OGG流媒体文件格式分析

OGG流媒体文件格式分析

摘要流媒体文件格式在流媒体系统中占有重腹地位,设计合理的文件格式是提高流媒体效劳器工作效率最直接和最有效的方法。

该文在剖析经常使用流媒体系统和文件格式的基础上,专门地对美国基金会的开源流媒体工程Ogg文件格式子项目做了深切的分析,指出Ogg格式对媒体编码数据的存储读取和传输具有简练性,Ogg格式的映射与逆映射与媒体编码数据具有相对独立性,能够有效提高流媒体效劳器的工作效率。

关键词流媒体;OGG文件格式;流效劳器效率

1引言

流媒体是指在Internet/Intranet中利用流式传输技术的持续时基媒体,如音频、视频等多媒体文件。

文件格式和传输协议是流媒体应用的要紧技术。

从不同的角度看,流媒体数据有三种格式:

紧缩格式、文件格式、发布格式。

其中紧缩格式描述了流媒体文件中媒体数据的编码、解码方式;流媒体文件格式是指效劳器端待传输的流媒体组织形式,文件格式为数据互换提供了标准化的方式;流媒体发布格式是一种呈现给客户端的媒体安排方式。

本文所讨论的格式是指第二种:

流媒体文件格式。

专门地分析了一种开源流媒体文件格式:

Ogg。

它是美国基金会开发的开源流媒体工程的一个子项目,它是应其开源音/视频媒体紧缩编码格式Vorbis/Theora等的存储与传输需要而设计的。

本文在研究和分析已有流媒体系统的基础上,结合在研发新的流媒体系统中的体会和教训,对流媒体文件格式做系统和深切的剖析,旨在深切明白得流媒体系统和找到提高流媒体系统工作效率的方式。

2流媒体文件格式分析

文件格式在流媒体系统中的重要性

一个简化的流媒体系统由流媒体效劳器、客户端和传输网络组成,流媒体系统的核心是流媒体效劳器。

随着流媒体技术研究的深切和流媒体应用的扩展,如何提高流媒体系统的工作效率,要紧指标表现为如何提高效劳器并发媒体流的数量,这是一个被普遍关注的课题。

它取决于效劳器处置每一个流的效率,决定了一个效劳器能够同时为多少客户效劳,其功效不但具有理论价值,更具有极大的经济价值。

图1的圆圈内标出了阻碍流媒体系统性能的一些要紧因素。

若是对其中每一个因素认真分析判定,能够发觉关于一个现有的流媒体效劳器而言,能有效提高其效率的手腕并非多。

例如:

提升客户端、效劳器端的硬件配置,只能取得性能提高,工作效率没有取得提高;实时传输、操纵协议是人们通过量年的大量应用实践总结,由IETF因特网工程任务组确认的媒体流传输一起标准,是必需遵守的标准,是无法轻易改变的;节目源的质量、紧缩方式等因素关于效劳器而言是不可预知或是不可操纵的。

那么在这些客观因素无法改变的情形下,优化流媒体文件格式为提高流媒体效劳器的工作效率提供了可能。

流媒体文件格式能够对效劳器的工作效率产生阻碍是由流效劳器工作方式的特点决定的。

流效劳器的要紧工作任务是通过直播或点播的方式向用户提供流媒体内容,它输入磁盘上存储的流媒体文件,然后进行实时传输协议封装后再通过IP网络输出给客户端。

简言之,其工作流程为3步:

读取、封装、发送。

由于每发送一个媒体流都需要启动一个流程,而且所有流程都需要实时进行,可见当一个流效劳器并发几千个流时,每一个流程工作效率的细小区别都会对效劳器工作效率造成专门大的阻碍。

 

图1简化的流媒体系统结构及其阻碍因素

每一个工作流程的输入是流媒体文件,输出是媒体数据包。

输入、输出数据的内容是没有改变的,都是多媒体紧缩码流,二者之间只有格式的不同,因此从数据流角度来看,效劳器的要紧工作实际上是一个格式转换的进程。

由于媒体数据包的格式是由传输协议事前确信的,那么流媒体文件格式是不是能够方便效劳器读取、封装就决定了效劳器的工作量。

流媒体文件格式的分析与比较

流媒体文件在流媒体系统中具有重腹地位,文献[2]分析了具有代表性的QuickTime电影文件(mov)和MicrosoftMediaServer的电影文件(asf),对其文件格式和相关环节做了深切剖析。

发觉这些文件格式对效劳器工作效率存在如下负面阻碍:

(1)磁盘操纵器访问吞吐量低。

每次封装一个媒体数据包需要读取一帧数据,一样每帧大小为1K左右,每秒需要25帧,这造成对磁盘频繁访问,吞吐量低。

(2)关于QuickTimeMov文件格式,媒体数据没有通过预处置,效劳器每发一个包都需要从hint轨中取得打包时需要的相关参数,实时读取媒体数据、封装、发送,对CPU占用率专门大。

(3)关于MicrosoftAsf文件格式,媒体数据在Packet中时已是mms包的半成品,效劳器节省了截取媒体流的时刻,但仍然需要效劳器选择媒体流来组织mms包。

而且,Packet中的数据不满是需要发送的数据,浪费了内存空间和磁盘IO时刻。

文献[3]提出了一种新的流媒体文件格式NMF,该格式具有如下大体结构(如图2所示)和特点:

 

图2NMF文件结构

NMF流媒体文件由头文件和体文件组成。

头文件要紧包括文件描述、媒体描述、流描述等必要的信息;体文件包括全数的媒体数据。

一个NMF由一个头文件和假设干个体文件组成,同一媒体源不同的流(不同的传输协议或不同的码速度)寄存在不同的体文件中,此结构用来实现多码速度切换/智能流技术和兼容现有的流媒体播放器。

头文件和体文件的功能划分原那么是:

当效劳器和客户成立连接时(在发送媒体数据之前),只需要从头文件中读数据;当效劳器和客户成立连接后,只需要从文件体中读取媒体数据。

如此,效劳器中各个模块间耦合减少,效率提高。

由于头文件和体文件的相对独立,使文件具有很强的可扩展性,而且使得利用硬件进行封装、发送也成为可能。

NMF的核心思想确实是充分利用预处置进程,将原始媒体文件组织成方便效劳器处置的格式,减少实时封装和发送时的工作量,同时增加文件结构的兼容性和可扩展性,以提高流效劳器的工作效率,增加并发流数量。

3Ogg文件格式结构

文件格式在流媒体系统中的重要性

逻辑流以页(page)为单位组织链接成物理流,如图3所示:

 

图3Ogg文件的组织形式

图3中的文件链接了两个物理流,A、B和C三个逻辑流组成一个物理流,逻辑流D单独是一个物理流。

一个物理流中的所有逻辑流的bos_page都必需在物理位置上相邻,如图3所示*A*、*B*、*C*三个bos_page的位置。

bos:

beginningofstream;eos:

endofstream

映射到Ogg格式的媒体(如vorbis音频,Theora视频)有相关详细概念,这些概念使得这些媒体之间有更具体的约束关系。

Ogg本身并没详细说明多个并发媒体流之间的时刻关系,这需要并发媒体流在映射到Ogg格式的时刻来指定,通常他们之间的交织关系是按他们产生的时刻前后顺序来排列。

Oggpage页结构

每一个页之间彼此独立,都包括了各自应有的信息,页的大小是可变的,一样为4K-8KB,最大值不能超过65307bytes(27+255+255*255=65307)。

页头部格式如图4。

页头部各字段域详细说明参见文献[4]:

(小端字节序列格式LSB)。

⑴capture_pattern:

模式捕捉域,4个字节,表示页的开始,其作用是分离Ogg封装格式还原媒体编码时识别新页的作用,它包括了四个幻数(ASCII字符集):

0x4f'O'0x67'g'0x67'g'0x53'S'

⑵stream_structure_version:

1个字节,表示当前Ogg文件格式的版本,目前为0。

 

图4Ogg页头部结构

⑶header_type_flag:

头部类型标识,1个字节。

标识当前页具体类型。

其设置分三种情形:

*bit0x01假设已设置,页包括的媒体编码数据于前一页同属于一个逻辑流的同一packet。

假设未设置,本页是一个新的packet。

*bit0x02设置,表示逻辑流的第一个页bos。

未设,不是第一个页。

*bit0x04设置,表示逻辑流的最后一页eos。

未设,不是最后一页。

⑷granule_position:

8个字节(字节6-字节13),包括了媒体编码相关参数信息。

关于音频流,包括了到本页为止逻辑流在PCM中采样编码的总次数。

关于视频流,包括了逻辑流到本页为止视频帧编码的总次数。

其值假设为-1,那么说明到此页为止,逻辑流的packet还未终止。

⑸bitstream_serial_number:

流序列号,4字节,表示本页所属逻辑流与其他逻辑流相区别的序号。

⑹page_sequence_number:

说明了本页在逻辑流中的序列号,Ogg解码器能据此识别有无页丢失。

⑺CRC_checksum:

循环冗余校验码校验和,4字节域,包括页的32bitCRC校验和(包括页头部零CRC校验和页数据校验),它的产生多项式为:

0x04c11db7。

⑻number_page_segments:

1字节,给定了在本页的segment_tabale域中所显现的segement个数,其最大值为255segments(每片255个字节),即页头部第26个字节的取值范围为:

0x00-0xff(0-255)。

页最大物理尺寸为65307bytes,小于64KB。

⑼segment_table:

逻辑流中的每一个packet每一个segment长度的取值(lacingvalues,除每一个packet的最后一个segment小于255外,其它segment都为255),这些值以segment显现的前后顺序依次排列。

此域的字节数为number_page_segments域所表示的数字(即在0-255之间)。

bytevalue

270xff(255)

[.................]

n-10xff(255)

n0x00-0xfe(0-254,n=num_segments+26)

页头部长度的字节数:

header_size=27+number_page_segments[Byte]

即页头部长度为上述9个域名所表述占据的字节数之和。

页的总长度:

page_size=header_size+sum(lacing_values:

1...number_page_segments)[Byte]

即页的总长度为页头部长度加上紧随其后的假设干segments长度之和(净载荷长度)。

Ogg封装处置进程

(1)音视频编码在提供给Ogg封装之前是以具有包边界的“Packets”形式呈现的,包边界依托于具体的编码格式。

如图5所示。

(2)将逻辑流的各个包进行分片segmentation,每片大小固定为255Byte,但包的最后一个segment通常小于255字节。

因为packet的大小能够是任意长度,由具体的媒体编码器来决定。

(3)进行页封装,每页都被加上页头,每页的长度可不等,由具体情形而确信。

页头部segment_table域告知了“lacing_value”值的大小,即页中最后一个segment的长度(能够为0,或小于255)。

一次处置一个packet,此packet被封装成一个或多个page页(page的长度设定了上限,一样为4kB);下一个packet必需用新的page开始封装,由首部字段域header_type_flag的设置规定来表示。

(4)多个已被页格式封装好的逻辑流(如语音、文本、图片、音频、视频等)按应用要求的时序关系合成物理流。

Ogg文件的映射与逆映射

用Ogg文件格式封装好紧缩编码媒体流可用于存储(磁盘文件)或直接传输(TCP或管道),这是因为Ogg比特流格式提供了封装/同步、过失同步捕捉、寻觅标记和其它足够的信息使得这种分散开的数据能够完全地还原为封装之前的具有包边界“packet”形式的紧缩编码媒体流,恢复到这种原先媒体流就具有的包边界形式不需要依托于针对紧缩编码的解码器。

也确实是说Ogg映射与逆映射和媒体流的紧缩编码、解码具有相对独立性。

 

图5Ogg封装流程示用意

Ogg文件需要解封装的情形有两种:

(1)播放器要对媒体流解码之前;

(2)对媒体流进行RTP/UDP传输之前。

解封装的进程确实是ogg逆映射进程,即还原为具有包边界“packet”形式的媒体流,同时以预先填充好了的RTP首部字段与相应一段媒体数据捆绑,形成RTP封包。

此进程即是媒体流从Ogg格式到RTP格式的转换进程。

将以packet为单元的媒体流映射为以page为单元的Ogg格式比特流,其中间通过了segment的划分和重组环节,但方便了对媒体流的存储与传输(TCP)。

对源缓冲区媒体数据(packet)的操作,需成立几个中间环节的数据结构,只需将切割的媒体数据在内存移动一次,操作指向媒体数据的指针便能达到媒体数据迁移到目的缓冲区(page)的用意,其进程可用两个函数转换来表述:

 

ogg_stream_packetin()àogg_stream_pageout()。

将Ogg格式比特流逆映射还原为packets媒体流,以备播放解码或以RTP封装进行UDP传输。

其中间环节是把page中的segment单元数据按顺序重组为packet,一样媒体数据在内存中的复制只有一次,其进程可用三个函数转换来表述:

ogg_sync_pageout()àogg_stream_pagein()àogg_stream_packetout(),媒体数据复制发生在第一个函数ogg_sync_pageout()。

Ogg映射与逆映射的功能都体此刻ogg函数库中,当前最新版本为。

4终止语

Ogg格式是在吸收其它流媒体文件格式优势的基础上针对具有“packet”包边界形式的媒体流而制定的利于其存储和传输的开源流媒体文件格式,在icecast流效劳器的传输中取得了专门好的应用;依照icecast官方网站发布其测试结果,在GB骨干网的条件下对Oggvorbis音频传输的客户端并发流可达14000个。

更为重要的是,作为流媒体技术的核心环节,大多数流媒体文件格式至今仍没有完全公布,且受专利爱惜。

要在流媒体技术和应用飞速进展的今天占得一席之地,遵从GNU/GPL协定,走开源之路,进展不受知识产权约束的流媒体文件格式是紧追先进流媒体技术的较佳选择。

参考文献

[1]李向阳,卞德森,流媒体及其应用技术[J].广播与电视技术,2001,28(9):

76-85

[2]马杰,田金文.流媒体技术及其文件格式[J],运算机工程与应用,P49-52.

[3]马杰,田金文.一种新的流媒体文件格式[J].运算机工程与科学,Vol126,No17,2004.

[4]Walleij,L..Theapplication/oggMediaType,RFC3534,May2003.

[5]Pfeiffer,S..TheOggEncapsulationFormatVersion0.RFC3533,May2003.

[6][7]

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2