Контекст
Я создаю Android приложение, воспроизводящее потоки Media Source Extensions с использованием Multimedia Tunneling . Я использую поток вызовов API в соответствии с документацией. Аудио часть обрабатывается с AudioTrack
. AudioSessionID
используется совместно для видео MediaCodec
и AudioTrack
. Android SDK версия - 26.
Проблема
Видео воспроизводится правильно, но нет звука можно услышать.
- API не сообщает об ошибке.
- Буферы записываются в
OutputBuffer
с использованием AudioTrack.write
. - Звук воспроизведения без туннелирования работает хорошо .
audio_hal
не выдает никаких ошибок в журналах.
Вопрос
Я смотрел на ExoPlayer
реализации и я вижу использование заголовка syn c перед записью буфера в 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);
Я также пытался добавить этот заголовок, но звук все еще не был услышан.
Требуется ли этот заголовок syn c?
Есть ли какие-либо другие недокументированные требования для мультимедийного туннелирования?