Расширения источника мультимедиа, восстановление appendBuffer

Как я могу исправить ошибки appendBuffer, возникшие в результате следующих сценариев?

  • отсутствуют данные
  • данные не по порядку

person Tim    schedule 10.12.2019    source источник
comment
Аудио или видео? Какой MIME/контейнер будет использоваться?   -  person AnthumChris    schedule 11.12.2019
comment
Аудио и видео. Я открыт ко всему. В настоящее время я использую видео/webm; кодеки=opus, vp9   -  person Tim    schedule 11.12.2019
comment
Как могут возникнуть отсутствующие данные? Что было бы добавлено вместо него?   -  person AnthumChris    schedule 20.12.2019
comment
@AnthumChris Например, если соединение обрывается. Вместо него ничего не будет добавлено. Новые данные будут продолжать добавляться при восстановлении соединения.   -  person Tim    schedule 28.01.2020


Ответы (2)


Здесь только догадки... Я бы предположил, что возможность восстановления не по порядку зависит от формата декодируемого медиаконтейнера (WebM, Ogg и т. д.). Функция браузера decodeAudioData работала нормально при получении Ogg Opus файлы с явно неупорядоченными/отсутствующими страницами (созданы с помощью opus-file-splitter). Я бы предположил, что браузеры используют одну и ту же базовую реализацию декодирования потока как для буферов decodeAudioData, так и для буферов MSE, поэтому MSE должен без проблем обрабатывать отсутствующие страницы/сегменты.

К сожалению, MSE не поддерживает audio/ogg codecs="opus", поэтому мои тестовые файлы нельзя сразу использовать для тестирования. Я еще не знаком с контейнером WebM, но в конечном итоге я буду проводить тесты с переупорядочением audio/webm codecs="opus" файлов в MSE для другого проекта и могу сообщить вам результаты, когда это произойдет!

person AnthumChris    schedule 20.12.2019

  • Отсутствующие данные просто создадут пробел в буфере, для которого потребуется некоторая логика пропуска пробела во время воспроизведения, т. Е. При застревании в конце диапазона установите currentTime в начало следующего диапазона и продолжите воспроизведение.
  • Добавление сегментов не по порядку не должно быть проблемой, если SourceBuffer.mode установлено значение segments, что гарантирует сохранение временных меток сегментов.
person jmsn    schedule 11.12.2019
comment
Если я отбрасываю несколько секунд данных, а затем пытаюсь продолжить с appendBuffer, я вижу MediaError {код: 3, сообщение: CHUNK_DEMUXER_ERROR_APPEND_FAILED: получен блок с временным кодом перед предыдущим блоком.} Я могу подтвердить, что мой SourceBuffer имеет режим = сегменты . - person Tim; 11.12.2019