0

当 SB_API_VERSION 不小于 SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER 时,Opus 的“编解码器私有”已被传递到右舷。

但我不太确定音频样本是否使用“编解码器延迟”和“搜索预卷”进行了预处理,音频解码器是否不需要使用这些?

谢谢!

4

2 回答 2

0

"Audio_specific_config"不包括codec_delayand seek_preoll,但它可以从audiotrack. codec_delay:它可以在开始时跳过一些 ns 样本。 seek_preroll:解码器在搜索操作后需要跳过一些 ns 样本。可以参考exoplayer的代码,然后通过SB struct发送吗?

github.com/google/ExoPlayer/blob/release-v2/library/core/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor

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;
于 2017-07-10T03:05:57.563 回答
0

Linux 参考实现支持 Opus,而无需对 audio_specific_config 进行 API 更改。我相信可以从流本身中提取所有必要的元数据。

于 2017-07-06T06:13:53.027 回答