@Interface

Как поддержать больше форматов в вебплеере?

Вступление:
Есть некоторый сервис, который предполагает работу с видео разных форматов. А так же их воспроизведение онлайн. Для простоты допустим, что это клон ютуба (это не так, но это не важно).

То есть туда можно залить видео произвольного формата и ожидать возможность его просмотреть онлайн.

HTML-5 player (<video>) работает вполне неплохо в этой роли, но он поддерживает очень мало форматов. Насколько я понимаю более ли менее поддержан только mp4, webm и ogg.

При этом хочется иметь поддержку avi, mkv (конкретно были проблемы с аудио (насколько я могу судить ac3 кодек не поддерживается браузерами)) и прочего.

Единственное решение, которое я нашел на данный момент - это перекодировать видео к совместимым кодекам, например в webm:
ffmpeg -y \
    -progress - \
    -fflags \
    +genpts \
    -i input.avi \
    -c:v libvpx \
    -c:a libvorbis \
    output.webm

или также есть вариант перекодировать только аудио, если видео работает:
ffmpeg -y \
    -progress - \
    -fflags \
    +genpts \
    -i input.avi \
    -c:v copy \
    -c:a aac \
    output.mp4


Проблема с таким подходом в том, что перекодирование - тяжелая операция. На моем (не самом шустром железе) эта операция выполняется со скоростью в примерно 80 фпс для первого варианта и 400 фпс для второго. Что довольно медлено и ресурсоемко.

Если у меня есть ошибка в коде - буду признателен совету.

Насколько я понимаю, раньше были распространены flash плееры, которые поддерживали больше форматов/кодеков (поддерживали ли?), но сейчас положение flash'а делает его не лучшим кандидатом в решения.

Собственно вопрос: если я хочу воспроизводить на веб-страничке произвольное видео (популярных форматов), то есть ли у меня альтернатива перекодированию?

Возможно можно перекодировать как-то быстрее? (например, мой пример кода с перекодированием аудио работает значительно быстрее, но я не знаю насколько это удачное решение) Может есть смысл использовать что-то вместо ffmpeg? Или я использую его без hardware acceleration и должен его включить руками? (читал, что ffmpeg можно подружить с GPU, но это мне не очень подходит, так как машина не будет иметь отдельного GPU)

Может существуют альтернативные веб-плееры? (webgl? сомневаюсь, конечно)

Кроссбраузерность особо не нужна, достаточно Chrome последних версий, Firefox было бы неплохо, поддержка IE, Edge, Safari и прочего не интересует совсем.

Натыкался на расширения-плееры для браузера - хотелось бы избежать их использования.
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Drno
Ну быстрее только если уменьшить качество. К примеру параметр -ultrafast
А вообще все сервисы аодируют видео под себя, только потом они доступны для отдачи
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Я бы запретил принимать видео неподходящих форматов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы