本文系微信公众号和知乎专栏《MediaStack》原创文章,欢迎大家关注,随时进行交流。
OGG介绍
Ogg 是一种免费、开放且免版税的数字音频和视频容器格式。它由 Xiph.org 基金会开发,用于多种用途,包括流式音频和视频、播客和存档。Ogg 文件使用 Vorbis 编解码器压缩,该编解码器也是由 Xiph.org 基金会开发的。Vorbis 是一种有损压缩格式,这意味着在压缩过程中会丢失一些数据。但是,Vorbis 非常高效,而且 Ogg 文件通常比其他格式的文件(例如 MP3)小得多。
Ogg 文件可以使用各种软件播放器播放,包括 VLC、Winamp 和 Firefox。许多移动设备(例如智能手机和平板电脑)也支持 Ogg 文件。Ogg 格式是一种容器格式,这意味着它可以包含多种类型的音频和视频数据。 Ogg 文件可以包含 Vorbis 音频、Theora 视频和其他类型的数据。 Ogg 文件通常比其他格式的文件(如 MP3)小得多,因为它们使用更高效的压缩算法。
Ogg 格式是免版税的,这意味着使用它无需支付许可费。 这使得 Ogg 成为想要分发音频和视频文件而不必担心许可费用的用户的不错选择。
OGG发展历程
Ogg 的开发始于 1993 年,该格式的第一个版本于 1994 年发布。从那时起,Ogg 一直在不断发展,随着时间的推移,该格式不断添加新功能和改进。
OGG核心模块
Ogg 文件包含以下核心模块和改进:
(1)Vorbis 音频编解码器:Vorbis 是一种有损压缩格式,用于对 Ogg 文件中的音频数据进行编码。Vorbis 是一种免费的开源编解码器,其质量可与流行的 MP3 格式相媲美,但文件较小。
(2)Theora 视频编解码器:Theora 是一种有损压缩格式,用于对 Ogg 文件中的视频数据进行编码。Theora 是一种免费的开源编解码器,其质量可与流行的 Flash 视频格式相媲美,但文件较小。
(3)Ogg 容器格式:Ogg 容器格式用于存储 Vorbis 或 Theora 音频和视频数据,以及其他类型的数据,例如字幕和元数据。Ogg 容器格式是免费和开源的,它被设计成高效和可扩展的。
(4)比特率适配:比特率适配是一项允许 Ogg 文件根据可用带宽调整比特率的功能。这有助于确保 Ogg 文件即使在连接缓慢或不可靠的情况下也能流畅播放。
(5)纠错:纠错是一种有助于保护 Ogg 文件免受数据损坏的功能。这有助于确保即使 Ogg 文件已损坏也可以播放。
(6)元数据支持:Ogg 文件可以存储元数据,例如音频或视频文件的标题、艺术家和专辑。播放器可以使用此元数据来显示有关文件的信息,例如音频或视频文件的标题和艺术家。
文件格式
OGG 文件由一个或多个页面组成,也称为容器。每个页面都以 ASCII 字符 OggS 开头,后紧跟版本号。在识别文件开头的那些字节时,播放器会意识到该文件是一个 OGG 容器,它对流数据执行边界和错误检查。
OGG 格式支持真正的流式传输,无需在播放前加载整个文件,消除了播放大文件时的内存限制。流可以持续数小时,只有当前播放的部分必须加载到内存中。
在 OGG 格式中,每个页面或容器都有一个标头,其中包含帮助播放器将页面识别为 OGG 文件的一部分的信息,然后将容器放在一起(称为比特流)以播放音频文件。
OGG 格式支持多路复用,即单个文件中的多个比特流和按音频数据的寻道时间顺序列出的比特流。还可以将比特流附加到现有文件,以便比特流按顺序解码,这一步骤称为链接。
每一个字段对应的含义如下:
其中Header Type有如下几种类型:
OGG VS MP3
尽管 MP3 和 Vorbis OGG 都可以达到 320 KB/秒的最大比特率,但 Vorbis OGG 听起来比 MP3 好。
为什么会有质量差异?因为对于所有 Vorbis 也使用有损压缩进行编码的内容,它应用了更高级的编码方案,从而产生更高的音质。尽管如此,MP3 仍受到许多人的青睐,因为它兼容所有平台。
Vorbis 比特率设置
特别说明一下比特率控制。
比特率控制是使用位储存池算法来实现的。在编码过程中,编码器将固定大小的缓冲区用作编码“蓄水池”。在音频帧采样小于目标比特率时,未使用的位将被储存到池中,以供将来的音频帧使用。当帧采样大于目标比特率时,则会从池中提取“存储”的位。编码控制将防止储存池变为负值(在指定了最大比特率时)或超过上限(在指定了最小比特率时)。“平均比特率”作为长范围比特率跟踪时的基准点,即根据帧采样大于或小于设定的平均值,来调整编码器的比特率大小。
Vorbis 编解码器支持的有效比特率范围有限,具体取决于编码文件的采样率。如果比特率设置(平均值、最小值、最大值)超出编码文件的有效范围,则这些值将会被设置成有效范围内最接近的值,一则警告将在转码对话框中将出现,并显示用于编码的实际比特率。请参阅下表,来为给定采样率确定有效的比特率。
以上是本篇关于OGG的介绍,仅仅了解一些皮毛,有兴趣的同学还是要深入学习相关标准以及规范。

我是一枚爱跑步的程序猿,维护公众号和知乎专栏《MediaStack》,有兴趣可以关注,一起学习音视频知识,时不时分享实战经验。
继续阅读
阅读原文