当 SB_API_VERSION 不小于 SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER 时,Opus 的“编解码器私有”已被传递到右舷。
但我不太确定音频样本是否使用“编解码器延迟”和“搜索预卷”进行了预处理,音频解码器是否不需要使用这些?
谢谢!
当 SB_API_VERSION 不小于 SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER 时,Opus 的“编解码器私有”已被传递到右舷。
但我不太确定音频样本是否使用“编解码器延迟”和“搜索预卷”进行了预处理,音频解码器是否不需要使用这些?
谢谢!
"Audio_specific_config"
不包括codec_delay
and seek_preoll
,但它可以从audiotrack
.
codec_delay:它可以在开始时跳过一些 ns 样本。
seek_preroll:解码器在搜索操作后需要跳过一些 ns 样本。可以参考exoplayer的代码,然后通过SB struct发送吗?
case CODEC_ID_OPUS:
mimeType = MimeTypes.AUDIO_OPUS;
maxInputSize = OPUS_MAX_INPUT_SIZE;
initializationData = new ArrayList<>(3);
initializationData.add(codecPrivate);
initializationData.add(
ByteBuffer.allocate(8).order(ByteOrder.nativeOrder()).putLong(codecDelayNs).array());
initializationData.add(
ByteBuffer.allocate(8).order(ByteOrder.nativeOrder()).putLong(seekPreRollNs).array());
break;
Linux 参考实现支持 Opus,而无需对 audio_specific_config 进行 API 更改。我相信可以从流本身中提取所有必要的元数据。