【发布时间】:2020-04-01 18:06:58
【问题描述】:
上下文
我正在创建一个使用 Multimedia Tunneling 播放媒体源扩展流的 Android 应用程序。我正在使用文档提供的 API 调用流程。音频部分由AudioTrack 处理。 AudioSessionID 在视频MediaCodec 和AudioTrack 之间共享。 Android SDK 版本为 26。
问题
视频正在正确播放,但听不到音频。
- API 没有报告任何错误。
- 缓冲区使用
AudioTrack.write写入OutputBuffer。 - 非隧道播放音频效果很好。
-
audio_hal不会在日志中产生任何错误。
问题
我研究了ExoPlayer 的实现,发现在隧道播放中将缓冲区写入AudioTrack 之前使用了同步标头。
ByteBuffer avSyncHeader = ByteBuffer.allocate(16);
avSyncHeader.order(ByteOrder.BIG_ENDIAN);
avSyncHeader.putInt(0x55550001);
avSyncHeader.putInt(4, size);
avSyncHeader.putLong(8, presentationTimeUs * 1000);
avSyncHeader.position(0);
audioTrack.write(avSyncHeader, avSyncHeader.remaining(), WRITE_NON_BLOCKING);
我也尝试添加该标题,但仍然没有听到音频。
这个同步标头是否必要?
多媒体隧道还有其他未记录的要求吗?
【问题讨论】:
标签: android android-mediaplayer android-mediacodec audiotrack