一. OGG音频格式概述

Ogg是一个自由且开放标准的容器格式,由Xiph.Org基金会所维护。Ogg格式并不受到软件专利的限制,并设计用于有效率地流媒体和处理高品质的数字多媒体。

“Ogg”意指一种文件格式,可以纳入各式各样自由和开放源代码的编解码器,包含音效、视频、文字(像字幕)与元数据的处理。

在Ogg的多媒体框架下,Theora提供有损的图像层面,而通常用音乐导向的Vorbis编解码器作为音效层面。针对语音设计的压缩编解码器Speex和无损的音效压缩编解码器FLAC与OggPCM也可能作为音效层面使用。

“Ogg”这个词汇通常意指Ogg Vorbis此一音频文件格式,也就是将Vorbis编码的音效包含在Ogg的容器中所成的格式。在以往,.ogg此一扩展名曾经被用在任何Ogg支持格式下的内容;但在2007年,Xiph.Org基金会为了向后兼容的考量,提出请求,将.ogg只留给Vorbis格式来使用。Xiph.Org基金会决定创造一些新的扩展名和媒体格式来描述不同类型的内容,像是只包含音效所用的.oga、包含或不含声音的影片(涵盖Theora)所用的.ogv和程序所用的.ogx。

OGGVobis(oggVorbis)是一种新的音频压缩格式,类似于MP3等的音乐格式。OggVobis是完全免费、开放和没有专利限制的。OggVorbis文件的扩展名是.OGG。Ogg文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。OGG Vorbis有一个特点是支持多声道。

二. OGG音频格式剖析

1.        OGG文件的组织形式

OGG是以页(page)为单位将逻辑流组织链接起来,每个页都有pageheader和pagedata。

2.        OGG page页结构

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

1)       页标识:ASCII字符,0x4f  'O'  0x67  'g'   0x67 'g'  0x53 'S',4个字节大小,它标识着一个页的开始。其作用是分离Ogg封装格式还原媒体编码时识别新页的作用。

2)       版本id:一般当前版本默认为0,1个字节。

3)       Header_type:标识当前的页的类型,1个字节,

0x01:本页媒体编码数据与前一页属于同一个逻辑流的同一个packet,若此位没有设,表示本页是以一个新的packet开始的;

0x02:表示该页为逻辑流的第一页,bos标识,如果此位未设置,那表示不是第一页;

0x04:表示该页位逻辑流的最后一页,eos标识,如果此位未设置,那表示本页不是最后一页。

4)       Granule_position:媒体编码相关的参数信息,8个字节,对于音频流来说,它存储着到本页为止逻辑流在PCM输出中采样码的数目,可以由它来算得时间戳。对于视频流来说,它存储着到本页为止视频帧编码的数目。若此值为-1,那表示截止到本页,逻辑流的packet未结束。(小端)

5)       Serial_number:  当前页中的流的id,4个字节,它是区分本页所属逻辑流与其他逻辑流的序号,我们可以通过这个值来划分流。(小端)

6)       Page_seguence:本页在逻辑流的序号,4个字节。OGG解码器能据此识别有无页丢失。

7)       CRC_cbecksum:循环冗余校验码校验和,4个字节,包含页的32bit CRC校验和(包括头部零CRC校验和页数据校验),它的产生多项式为:0x04c11db7。

8)       Num _segments:给定本页在segment_table域中出现的segement个数,1个字节。其最大值为255.页最大物理尺寸为65307bytes,小于64KB。

9)       Segment_table:  从字面看它就是一个表,表示着每个segment的长度,取值范围是0~255。

由segment可以得到packet的值,每个packet的大小是以最后一个不等于255的segment结束的,从页头中的segment_table可以得到每个packet长度,举例:如果一组segment依次顺序为FF 45 FF FF FF 40 FF 5 FF FF FF66,那么第一个packet的长度为255+69 = 324,第二个packet大小829,同理

页头基本上就是由上述的参数组成,由此我们可以得到页头的长度和整个页的长度:

header_size  = 27+Num_segments;(byte)

page_size = header_size +segment_table中每个segment的大小;

例如:

0000: 4F 67 67 53 00 02 00 00 00 00 00 00 00 00 82 78   OggS..........倄
0010: 00 00 00 00 00 00 12 85 4E 81 01 1E 01 76 6F 72   .......匩....vor
0020: 62 69 73 00 00 00 00 01 44 AC 00 00 FF FF FF FF   bis.....D.......
0030: 00 F4 01 00 FF FF FF FF B8 01 4F 67 67 53 00 00   ..........OggS..
0040: 00 00 00 00 00 00 00 00 82 78 00 00 01 00 00 00   ........倄......
0050: CC 63 C9 DB 0F 4D FF FF FF FF FF FF FF FF FF FF   蘡邵.M..........
0060: FF FF FF E8 03 76 6F 72 62 69 73 1D 00 00 00 58   .....vorbis....X
0070: 69 70 68 2E 4F 72 67 20 6C 69 62 56 6F 72 62 69   iph.Org libVorbi
0080: 73 20 49 20 32 30 30 34 30 36 32 39 01 00 00 00   s I 20040629....
0090: 1C 00 00 00 45 4E 43 4F 44 45 52 3D 41 64 6F 62   ....ENCODER=Adob
00A0: 65 28 52 29 20 41 75 64 69 74 69 6F 6E 28 52 29   e(R) Audition(R)
00B0: 01 05 76 6F 72 62 69 73 29 42 43 56 01 00 08 00   ..vorbis)BCV....

0000-0039:第一页
0000-001B:页头部
0000-0003=4F 67 67 53:页标识,OggS的Ascii字符
0004=00:版本号为0
0005=02:页头部类型:本页为逻辑流的第一页bos
0006-000D=0:区段位置为0
000E-0011=82 78 00 00:逻辑流ID
0012-0015=0:本页在逻辑流中的序号为0
0016-0019=12 85 4E 81:循环冗余校验码校验和
001A=01:区段表中有1个区段
001B=1E:区段表中的区段长度为 1E
001C-0039:页数据(0039=1C+1E-1)
001C=01:包头类型为标识包,包长度为1E(001C-0039),是区段表中区段的长度
001D-0022=76 6F 72 62 69 73:包头标识,vorbis的Ascii码
0023-0026=0:版本号为0
0027=01:单声道
0028-002B=44 AC 00 00:音频采样率为44.1KHZ(&HAC44=44100)
002C-002F=FF FF FF FF:最大比特率未设置
0030-0033=00 F4 01 00:标称比特率
0034-0037=FF FF FF FF:最小比特率未设置
0038=B8:块大小0为二进制的1011,块大小1为二进制的1000
0039=01:标识包结束
003A-0E8B:第二页
003A-0063:页头部
003A-003D=4F 67 67 53:页标识,OggS的Ascii字符
003E=00:版本号为0
003F=00:页头部类型:本页为新包,不是逻辑流的第一页,也不是最后一页
0040-0047=0:区段位置为0
0048-004B=82 78 00 00:逻辑流ID
004C-004F=01 00 00 00:本页在逻辑流中的序号为1
0050-0053=CC 63 C9 DB:循环冗余校验码校验和
0054=0F:区段表中有15个区段
0055-0063=4D FF FF FF FF FF FF FF FF FF FF FF FF FF E8:区段表中15个区段的长度
0064-0E8B:页数据(0E8B=64+4D+FF*D+E8-1)
0064=03:包头类型为注释包,包长度为4D(0064-00B0),是区段表中第1个区段的长度
0065-006A=76 6F 72 62 69 73:包头标识,vorbis的Ascii码
006B-006E=1D 00 00 00:制作软件信息]的长度为29字节
006F-008B=制作软件信息字符串:Xiph.Org libVorbis I 20040629
008C-008F=01 00 00 00:保留字节
0094-00AF=注释[1]字符串:ENCODER=Adobe(R) Audition(R)
00B0=01:注释包结束
00B1=05:包头类型为装备包
00B2-00B7=76 6F 72 62 69 73:包头标识,vorbis的Ascii码

音频知识之OGG格式分析相关推荐

  1. 【XAuido2】播放wav和ogg格式音频文件

    通过MSDN的文档可以知道,XAuido2出了最新的再发行版本,可以兼容win7.而DirectX SDK的XAudio2.7版本已经是2010年的产物了.需要下载库的我有上传资源在CSDN~ 封装之 ...

  2. AAC音频格式分析与解码

    原文地址为: AAC音频格式分析与解码 一直在做一个语音项目,到了测试阶段,近来不是很忙,想把之前做的内容整理一下. 关于AAC音频格式基本情况,可参考维基百科http://en.wikipedia. ...

  3. 给你安利几款好用的音频转换ogg格式的软件

    ogg是一种音频压缩格式,它能够不断地将音频的大小和音质进行改良操作.不过在日常生活中,我们比较常见的还是mp3格式的音频文件.但是,有时我们会遇见一些播放器只支持播放ogg格式的音频文件,这个时候, ...

  4. RTSP协议视频监控智能分析平台EasyNVR如何将音频转化为aac格式并上传?

    在之前的博文中,我们和大家分享了使用EasyNVR视频监控直播平台时,如何实现自定义直播背景音乐,在该文中我们知道可以通过拉流库融合的方式推送. 但是在实际的应用过程中,我们发现上传的不同格式的音频的 ...

  5. OGG格式详细全攻略ZT

    转自:http://bbs.imp3.net/thread-251659-1-1.html 相对于90年代发布的MP3格式, OGG格式的支持对于MP3数码音乐播放器来说有重要的意义:首先,数码音乐播 ...

  6. m3u8视频格式分析

    " 学习m3u8格式." 一段时间之前,乘着某美女CEO的东风,学习了一个新的数据格式,即m3u8格式. 经过一段时间的沉淀,美女CEO的热潮大概已经褪去,今天才对这个格式进行分析 ...

  7. 想要进行直播app源代码开发就要懂的音频知识

    本片文章主要介绍音频基础知识,在开发直播app源代码之前首先必须要对音频的相关概念了解.以下是具体内容概述: 常见的音频格式 WAV MP3 WMA RA APE PCM AAC 音频相关的参数 采样 ...

  8. 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | 文件头 Header 分析 | 标签 Tag 分析 | 视频标签 Tag 数据分析 )

    文章目录 安卓直播推流专栏博客总结 一. RTMP 格式解析 二. 文件头 Header 分析 三. 标签 Tag 分析 四. 视频标签 Tag 数据分析 安卓直播推流专栏博客总结 Android R ...

  9. AAC ADTS格式分析

    AAC ADTS格式分析: 没有详细的参数说明,只有格式分析.可以查询文档查看详细参数说明. ADTS的全称是Audio Data Transport Stream.是AAC音频的传输流格 式.AAC ...

  10. 如何使用视频转换器将ogg格式转换为MP3格式

    大家有没有遇到这种情况,在网上下载了一首音乐,但是在手机的MP3里却不能播放,因为这个音乐是ogg格式的,虽然ogg格式音频优点众多,支持多声道,音质好,但是没办法,MP3不支持播放,还是要转换格式, ...

最新文章

  1. 2022-2028年中国2,3,6-三甲基苯酚行业市场研究及前瞻分析报告
  2. 报告解读|远程银行:从扎根网络到加速上云
  3. c调用c++ qt_【C/C++】qt库结构及示例
  4. 水晶报表-简单数据类型(Crystal 语法)
  5. 特别慢_背什么都特别慢,该怎么提高记忆力?
  6. 开发软件不是闭卷考试
  7. linux版本和特点,Linux与其他系统对比,具有哪些特点?
  8. requestmapping配置页面后_第004课:Spring Boot 项目属性配置
  9. DotNetZip使用简介
  10. 解决PRINT函数UTF-8问题
  11. Azure平台跨存储迁移虚拟机
  12. Java基础算法看这一篇就够了,简单全面一发入魂
  13. 现代控制理论(4)——李雅普诺夫稳定性理论
  14. 斗鱼password加密参数调试生成案例
  15. 《Axure RP 8 实战手册》pdf
  16. Unity 之自动化打包ipa
  17. 【HTML 教程系列第 9 篇】什么是 HTML 中的换行标签 br
  18. Autumn中文文档3:接收客户端数据
  19. int i=-20; unsigned int j = 10; i+j;的问题
  20. 21年GitHub上最牛批的《Java工程师成神之路》最新版文档!限时开源

热门文章

  1. AutoCAD 2019 for Mac 汉化安装手册
  2. 微信聊天记录数据分析
  3. 常用数学符号大学(包含罗马字符)
  4. dpkg安装软件流程_Linux下安装软件的一般步骤
  5. java 定时任务 单元测试_介绍java 定时任务最简单的3种实现方法
  6. 第4章 网络安全体系与网络安全模型
  7. ISO27001信息安全管理体系认证范围及用处
  8. Android Wifi控制方法总结
  9. 用计算机弹极乐净土谱,原神琴谱极乐净土分享 曲谱怎么弹奏
  10. 密码套件 and 弱密码套件漏洞