Android Мультимедийный туннель Syn c Заголовок - PullRequest
0 голосов
/ 01 апреля 2020

Контекст

Я создаю Android приложение, воспроизводящее потоки Media Source Extensions с использованием Multimedia Tunneling . Я использую поток вызовов API в соответствии с документацией. Аудио часть обрабатывается с AudioTrack. AudioSessionID используется совместно для видео MediaCodec и AudioTrack. Android SDK версия - 26.

API call flow

Проблема

Видео воспроизводится правильно, но нет звука можно услышать.

  • 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?

Есть ли какие-либо другие недокументированные требования для мультимедийного туннелирования?

...