Рендеринг анимации HTML5 на стороне сервера?

#firefox #html #video #audio #screenshot

#firefox #HTML #Видео #Аудио #скриншот

Вопрос:

Мы создаем анимации с использованием HTML5 Javascript. Теперь мы хотели бы преобразовать эти анимации в видеофайлы (MPEG4 или другие, не имеет значения), чтобы пользователи с ограниченными возможностями просмотра также могли видеть анимации. Анимации содержат звуковую дорожку.

Мы ищем решения, при которых HTML-страница отображалась бы и записывалась на стороне сервера. Я знаю, что уже существуют инструменты для рендеринга эскизов веб-страниц и т.д. статических изображений. Однако в нашем случае использования мы должны вывести видеофайл.

Какие есть варианты? Можно ли использовать headless X server Firefox? Желательно, чтобы мы запускали это в облаке (Amazon EC2).

Также, если есть что-то особенное, о чем нам нужно подумать при воспроизведении анимации на скоростях, отличных от скорости реального времени, я хотел бы услышать — например, синхронизацию звука HTML5 с анимацией.

Комментарии:

1. Здравствуйте, Микко, у меня есть веб-приложение, в котором пользователь может создавать анимации, я хотел бы отобразить эти анимации в видео на стороне сервера, можете ли вы предоставить свой репозиторий или любое решение моих проблем? Пока я борюсь, спасибо

Ответ №1:

Просто отметим, что мы решили эту проблему с помощью

  • Запуск Firefox на безголовом сервере. Сервер с приличной видеокартой.

  • Наличие скрипта управления Selenium Python для запуска / остановки рендеринга

  • Пользовательский цикл рендеринга, который будет использовать XPCom API Firefox для подачи <canvas> необработанных пикселей непосредственно в конвейер кодирования

  • Пользовательский цикл рендеринга Javascript, в котором clock не берется из реальных часов, но он передает кадры в средство визуализации со стабильной частотой кадров, которая не соответствует реальному времени

Довольно сложная система, поэтому не вписывается в одно окно ответа : (

Комментарии:

1. Мне любопытно, есть ли у вас какие-либо обновления для этого ответа, теперь, когда прошли годы и что все браузеры немного изменились. Все еще используете это решение?

2. Да, мне удалось решить эту проблему и удалось отобразить WebGL на стороне сервера. Просто запустите цикл анимации шаг за шагом, захватите пиксельное содержимое <canvas> и закодируйте его как необработанные кадры или видео.

Ответ №2:

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

Ответ №3:

Звучит интересно. Я проделал аналогичную вещь с библиотекой QtWebKit, для запуска которой требуется безголовый X-сервер. То, что я делал, — это масштабное преобразование веб-страниц в PDF. Возможно, имеет смысл поискать некоторые инструменты webkit2pdf, чтобы увидеть пример, на основе которого вы можете создать.

Я бы взглянул на библиотеку и объединил ее с другим решением для записи.

Ответ №4:

С точки зрения инструментария у меня был довольно приличный опыт работы с этими инструментами Ruby:

Я понятия не имею о том, как они справляются со звуком, хотя

Комментарии:

1. Вы можете микшировать аудио к видео с помощью GStreamer