Media Source Api не работает для пользовательского веб-файла (версия Chrome 23.0.1271.97 m)

Я ссылаюсь на демо-версию API, приведенную по этой ссылке.

Он работает нормально для данного тестового файла webm, но когда я попытался изменить имя файла на пользовательский файл webm, код перестал работать.

Это генерирует следующую ошибку: Uncaught Error: INVALID_STATE_ERR: DOM Exception 11 по следующему коду: sourceBuffer.append(new Uint8Array(e.target.result));

Чтобы проверить, работает ли пользовательский веб-файл, я создал тестовую страницу, на которой я определил тег видео, имеющий источник этого пользовательского веб-файла. Когда я запустил код, он работает нормально.

Я не могу понять причину этого странного поведения.

2 ответа

Решение

Наиболее вероятная проблема - в вашем файле WebM есть кластеры, которые не начинаются с ключевого кадра.

В сборках Chrome dev-channel (т. Е. Chrome 25 или новее) вы можете проверить это с помощью следующих шагов.

  1. Откройте Chrome: медиа-внутренности в другой вкладке.
  2. Вернитесь на вкладку со своей тестовой страницей и перезагрузите ее.
  3. Когда ошибка возникнет снова, вернитесь на вкладку chrome:media-internals и найдите нижнюю запись под заголовком "Активные медиаплееры:". Он должен иметь тот же blob: URL, который вы передали атрибуту src элемента video.
  4. Нажмите на blob: URL, чтобы развернуть данные игрока.
  5. Нажмите на запись "Log:", чтобы открыть данные журнала игрока.
  6. Поиск записей, которые имеют "MEDIA_SOURCE_ERROR" в столбце "Событие:". Эти записи должны содержать информацию о том, что не так с контентом, передаваемым в браузер.

Если вы видите сообщение, которое говорит что-то вроде "Медиа сегмент не начинается с ключевого кадра". тогда это означает, что в вашем файле есть кластеры, которые не начинаются с ключевого кадра. Это обычное явление для контента, сгенерированного FFmpeg. Вы можете исправить свой файл одним из следующих способов:

  1. Запустите программу sample_muxer, упомянутую в разделе 2.2.5 руководства по адаптивной потоковой передаче WebM.
  2. Запустите программу mse_webm_remuxer, которую я написал как часть моего проекта mse-tools.

ОБНОВЛЕНИЕ: в моем случае не отображается внутренняя ошибка (принятый ответ предлагает проверить), но проблема все та же

Я столкнулся с той же проблемой, когда пытался воспроизвести записанный файл .webm с помощью MediaRecorder API обратно с помощью Media Source Extensions (MSE). Записи Chrome (51) искажены, Firefox (46) выглядит нормально.

Чтобы заставить его работать, вы должны исправить реплики в файле.webm:

  1. клон https://github.com/webmproject/libwebm
  2. убедитесь, что у вас установлена ​​версия cmake> = 3.2 ( https://askubuntu.com/questions/610291/how-to-install-cmake-3-2-on-ubuntu-14-04)
  3. cmake .
  4. make
  5. ./sample_muxer -i original.webm -o fixed.webm
  6. загрузите fixed.webm в DASH / свой собственный плеер!

Надеюсь, это помогло кому-то. Было довольно трудно гуглить любую информацию без ключевого слова DASH (я не использую DASH, только та же базовая технология - MSE):)

Другие вопросы по тегам