OPUS一般是分帧编码,比如一个320采样点(640字节)的数据,编码后为70多个字节,和PCM一样,编码后的OPUS不能直接播放:
无法从文件本身获取音频的元数据(采样率,声道数,码率等)
缺少帧分隔标识,无法从连续的文件流中分隔帧(尤其是vbr情况)
Opus被构建在一个连续的逻辑Ogg流中。有两个必需的标题。包含这些标题的页面的位置必须为零。
逻辑Ogg流中的第一个包必须包含标识头,该标识头将流唯一地标识为Opus audio。它必须以8字节“IDHeader”开头。它必须单独放置在逻辑Ogg流的第一页中。此页必须设置“流的开始”标志。、
第二个Opus包必须包含注释头。它必须以8字节“OpusTags”开头。它可以跨越一个或多个页面,从逻辑流的第二个页面开始。不管它跨越多少个页面,注释头数据包都必须完成它结束的页面。
- opus采样率帧长约束
1.采样率约束:
输入信号的采样率(Hz),必须是8000、12000、16000、24000、或48000。
2.帧长约束:
opus为了对一个帧进行编码,必须正确地用音频数据的帧(2.5, 5, 10, 20, 40 or 60 ms)来调用opus_encode()或opus_encode_float()函数。
比如,在48kHz的采样率下,opus_encode()参数中的合法的frame_size(单通道的帧大小)值只有:120, 240, 480, 960, 1920, 2880。即:frame_size = 采样率 * 帧时间。
因为需要满足帧时间长度为10,20,40,60ms这些才能编码opus,因而需要对输入数据进行缓冲裁剪
3.兼容opus的容器格式:
有ogg,ts,mkv。但ts无法播放,mkv只能foobar播放,ogg能用foobar,vlc播放。因而不再考虑opus合成到ts
OggOpus Opus从入门到精通(五)OggOpus封装器全解析