ogg格式解析
来源:互联网 发布:outdoorvoices淘宝 编辑:程序博客网 时间:2024/05/19 11:46
HTML5 规定了一种通过 video 元素来包含视频的标准方法。当前,video 元素支持三种视频格式:
Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件
MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件
WebM = 带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件
Internet Explorer 8 不支持 video 元素。在 IE 9 中,将提供对使用 MPEG4 的 video 元素的支持。
官网资料:https://www.xiph.org/
注意theora只有I 和 P帧,没有B帧。
最近的任务是做ogg的demux,一直在研究ogg格式,积累了一些资料和知识,在这里做一记录。
ogg是一种多媒体容器,可以包含很多种音视频格式,他是xiph提供的免费开源的音视频格式,官网可以看看http://www.xiph.org/!
大家可能所见的.ogg的文件大都ogg的vorbis音频格式,是一种效果和MP3相媲美的音频,我最初接触ogg的时候,以为是纯音频,看过官网的介绍发现他是一个很强大的容器结构,xiph提供的免费的视频Theora和音频vorbis都是开源免费的,都包含在ogg的容器中,此外ogg也能包含很多其他音视频,如:flac,MP3等,大家可以看看我官网链接,便豁然开朗。
<一>ogg的标准容器格式
ogg是以页(page)为单位将逻辑流组织链接起来,每个页都有pageheader和pagedata。页头中有如下的定义:
1>页标识:ASCII字符,0x4f 'O' 0x67 'g' 0x67 'g' 0x53 'S',4个字节大小,它标识着一个页的开始。
2>版本id:一般当前版本默认为0,1个字节。
3> 类型标识:标识当前的页的类型,1个字节,
0x01:本页媒体编码数据与前一页属于同一个逻辑流的同一个packet,若此位没有设,表示本页是以一个新的packet开始的;
0x02:表示该页为逻辑流的第一页,bos标识,如果此位未设置,那表示不是第一页;
0x04:表示该页位逻辑流的最后一页,eos标识,如果此位未设置,那表示本页不是最后一页。
4>granule_position:媒体编码相关的参数信息,8个字节,对于音频流来说,它存储着到本页为止逻辑流在PCM输出中采样码的数目,可以由它来算得时间戳。对于视频流来说,它存储着到本页为止视频帧编码的数目。若此值为-1,那表示截止到本页,逻辑流的packet未结束。(小端)
5> serial_number:当前页中的流的id,4个字节,它是区分本页所属逻辑流与其他逻辑流的序号,我们可以通过这个值来划分流。(小端)
6>page_seguence_number:本页在逻辑流的序号,4个字节。
7>CRC_cbecksum:循环冗余效验码效验,4个字节,用来效验每页的有效性。
8>number_page_segments:给定本页在segment_table域中出现的segement个数,1个字节。
9>segment_table:从字面看它就是一个表,表示着每个segment的长度,取值范围是0~255。
由segment(1个segment就是1个字节)可以得到packet的值,每个packet的大小是以最后一个不等于255的segment结束的,从页头中的segment_table可以得到每个packet长度,举例:如果一组segment依次顺序为FF 45 FF FF FF 40FF 05FF FF FF 66(共4个packet,含12个segment,每个packet的长度是:FF 45【324】;FF FF FF 40【829】;FF 05【260】;FF FF FF 66【847】),那么第一个packet的长度为255+69 = 324,第二个packet大小829,同理。
页头基本上就是由上述的参数组成,由此我们可以得到页头的长度和整个页的长度:
header_size = 27+number_page_segments ;(byet)
page_size = header_size +segment_table中每个segment的大小;
3 Ogg 文件格式结构
3.1 文件格式在流媒体系统中的重要性
3.2 Ogg page 页结构
3.3 Ogg封装处理过程
3.4 Ogg文件的映射与逆映射
------------------------------------------------------------------------------------
> |packet1| | | | ||packet2||||packet3|| <
------------------------------------------------------------------------------------
分片segmentation
packet1(5 segments) packet2(3 segments) packet3(2 segments)
------------------------------------------------------------------------------------
> |seg1 |seg2 |seg3|seg4|seg5||seg1||seg2|seg3 ||seg1|seg2 | <
------------------------------------------------------------------------------------
页封装
page1(packet1+data) page2(packet2+data) page3(packet3+data)
-----------------------------------------------------------------------------------------------------
> |H| |H| |H|
|D| |D| |D|
|R|seg1 |seg2 |seg3|seg4|seg5|R|seg1||seg2|seg3 |R|seg1|seg2 | <
-----------------------------------------------------------------------------------------------------
MUX pages of other lgical bitstreams
多个逻辑流合成ogg物理流
page1 page2 page3 ......
---------------------------------------------------------------------------
| |||||......
---------------------------------------------------------------------------
OGG 物理流
4 结束语
- ogg格式解析
- ogg格式解析
- ogg 格式解析
- ogg格式
- ogg格式
- OGG音频压缩格式
- OGG格式总结
- OGG格式总结
- OGG音频格式解析
- OGG/OGV文件格式解析
- ogg参数解析
- OGG格式视频的转换
- ogg与wav格式转换
- Ogg 音频压缩格式 类似于MP3格式
- Html 5 video/audio 格式转换 ogg
- OGG格式详细全攻略ZT
- 如何制作ogg格式的视频?解决办法!!!
- 如何转换成Ogg和MPEG4格式
- android onNewIntent()
- 计算机图形学(三)_图元的属性_1_OpenGL状态变量
- 自定义Android商品标签控件
- 分布式缓存架构设想
- oracle 监听器的启动和关闭
- ogg格式解析
- [YII2]Unable to verify your data submission
- Tomcat 内存及控制台标题调整
- 参数
- UVa 13007 D as in Daedalus Latin America Regional Contest 2015
- edgesForExtendedLayout
- linux select函数用法 && 阻塞与非阻塞IO
- UICollectview一般运用
- sublime常用功能及快捷键