Вступление:
Есть некоторый сервис, который предполагает работу с видео разных форматов. А так же их воспроизведение онлайн. Для простоты допустим, что это клон ютуба (это не так, но это не важно).
То есть туда можно залить видео произвольного формата и ожидать возможность его просмотреть онлайн.
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 и прочего не интересует совсем.
Натыкался на расширения-плееры для браузера - хотелось бы избежать их использования.