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 или новее) вы можете проверить это с помощью следующих шагов.
- Откройте Chrome: медиа-внутренности в другой вкладке.
- Вернитесь на вкладку со своей тестовой страницей и перезагрузите ее.
- Когда ошибка возникнет снова, вернитесь на вкладку chrome:media-internals и найдите нижнюю запись под заголовком "Активные медиаплееры:". Он должен иметь тот же blob: URL, который вы передали атрибуту src элемента video.
- Нажмите на blob: URL, чтобы развернуть данные игрока.
- Нажмите на запись "Log:", чтобы открыть данные журнала игрока.
- Поиск записей, которые имеют "MEDIA_SOURCE_ERROR" в столбце "Событие:". Эти записи должны содержать информацию о том, что не так с контентом, передаваемым в браузер.
Если вы видите сообщение, которое говорит что-то вроде "Медиа сегмент не начинается с ключевого кадра". тогда это означает, что в вашем файле есть кластеры, которые не начинаются с ключевого кадра. Это обычное явление для контента, сгенерированного FFmpeg. Вы можете исправить свой файл одним из следующих способов:
- Запустите программу sample_muxer, упомянутую в разделе 2.2.5 руководства по адаптивной потоковой передаче WebM.
- Запустите программу mse_webm_remuxer, которую я написал как часть моего проекта mse-tools.
ОБНОВЛЕНИЕ: в моем случае не отображается внутренняя ошибка (принятый ответ предлагает проверить), но проблема все та же
Я столкнулся с той же проблемой, когда пытался воспроизвести записанный файл .webm с помощью MediaRecorder API обратно с помощью Media Source Extensions (MSE). Записи Chrome (51) искажены, Firefox (46) выглядит нормально.
Чтобы заставить его работать, вы должны исправить реплики в файле.webm:
- клон https://github.com/webmproject/libwebm
- убедитесь, что у вас установлена версия cmake> = 3.2 ( https://askubuntu.com/questions/610291/how-to-install-cmake-3-2-on-ubuntu-14-04)
cmake .
make
./sample_muxer -i original.webm -o fixed.webm
- загрузите fixed.webm в DASH / свой собственный плеер!
Надеюсь, это помогло кому-то. Было довольно трудно гуглить любую информацию без ключевого слова DASH (я не использую DASH, только та же базовая технология - MSE):)