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

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

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

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

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

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


person Pankaj Khurana    schedule 26.12.2012    source источник


Ответы (2)


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

В сборках канала разработки Chrome (например, Chrome 25 или более поздней версии) вы можете проверить это, выполнив следующие действия.

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

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

  1. Запустите программу sample_muxer, упомянутую в разделе 2.2.5 Руководство по адаптивной потоковой передаче WebM
  2. Запустите программу mse_webm_remuxer, которую я написал в рамках проекта mse-tools.
person Aaron Colwell    schedule 27.12.2012
comment
спасибо аарон за ответ. Я выполнил шаги, указанные вами, и обнаружил, что ошибка была такой же, как вы упомянули. - person Pankaj Khurana; 27.12.2012
comment
Теперь я следую шагу 1, который запускает программу sample_muxer. Я посетил ссылку, как указано вами. Я прочитал предварительные условия, в которых упоминается, что требуются FFmpeg, libwebm и webm-tools. Я загрузил сборки FFmpeg для Windows, добавил путь к переменной среды и проверил в cmd. Я загрузил папку libwebm, но не знаю, как ее настроить, а по третьей ссылке на необходимые веб-инструменты скачивать нечего. Пожалуйста, помогите мне заставить его работать. - person Pankaj Khurana; 27.12.2012
comment
Проанализировав код, я обнаружил, что simple_muxer — это приложение, встроенное в cpp. Я установил программное обеспечение Dev-C++, но когда я пытаюсь скомпилировать файл sound_mixer.cpp, я получаю ошибки - person Pankaj Khurana; 27.12.2012
comment
Второй подход к запуску программы mse_webm_remuxer у меня сработал. Спасибо, Аарон, за ваше ценное предложение. - person Pankaj Khurana; 28.12.2012
comment
Вы можете запретить FFmpeg создавать кластеры без ключевых кадров, если установите достаточно высокий предел размера кластера; Я использую -cluster_size_limit 10M -cluster_time_limit 10K - person Tangent 128; 07.11.2015

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

Я столкнулся с той же проблемой при попытке воспроизвести записанный файл .webm с помощью MediaRecorder API обратно с помощью Расширения источника мультимедиа (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) :)

person lukyer    schedule 12.06.2016
comment
Я боролся с этим некоторое время. Вы знаете, как это может работать в хроме? Может, исправив вебм в реальном времени? - person Tyler Biscoe; 31.07.2017
comment
это должно работать в Chrome. Я писал это давно, но оно работало в Chrome, Firefox и Opera. - person lukyer; 31.07.2017
comment
Извините, я имел в виду, есть ли способ записи с помощью API MediaRecorder, который сразу же будет воспроизводиться в Chrome. Без необходимости ремикс видео. - person Tyler Biscoe; 31.07.2017
comment
В Chrome 51 это было невозможно. Может быть, сейчас это работает, я не пробовал. Однако, если вам не нужна запись, вам не нужно использовать MediaRecorderAPI (например, если вы просто хотите показывать/транслировать MediaStream). - person lukyer; 31.07.2017