Кодирование и потоковая передача непрерывных файлов изображений в формате PNG в виде потокового видео в веб-браузере. - PullRequest
3 голосов
/ 14 марта 2012

У меня есть приложение Open GL, которое рендерит анимационную симуляцию, выводит несколько файлов изображений PNG в секунду и сохраняет эти файлы на диск. Я хочу транслировать эти файлы изображений в виде потокового видео по протоколу HTTP, чтобы я мог просматривать анимационное видео из веб-браузера. У меня уже есть надежный сервер сокетов, который обрабатывает соединение от websocket, и я могу обрабатывать все рукопожатия и часть кодирования / декодирования сообщений. Моя серверная программа и прикладная программа OpenGL написаны на C ++.

Несколько вопросов в уме:

  1. Каков наилучший способ для потоковой передачи этого вывода анимации OpenGL и просмотра его из моего веб-браузера? Кадры видеоизображения динамически (непрерывно) генерируются приложением OpenGL в виде файлов изображений PNG. Веб-браузер должен отображать видео, соответствующее выводу на дисплей Open GL (с минимальным временем ожидания).

  2. Как можно программно кодировать эти файлы изображений PNG в виде непрерывного (живого) видео с помощью C / C ++ (без необходимости вручную передавать файлы изображений в программное обеспечение потокового сервера, например, Flash Media Live Encoder)? Какой формат видео я должен производить?

  3. Должен ли я отправлять / получать данные анимации с помощью веб-сокета, или есть ли другие способы лучше? (как и в случае вызова JQuery Ajax, я просто придумываю это, но, пожалуйста, проведите меня через правильный способ реализации этого). Будет здорово, если потоковое видео будет работать в разных браузерах.

  4. Поддерживает ли тег HTML5 видео потоковое видео в реальном времени или он работает только для полного видеофайла, который существует по определенному URL / каталогу (не для потокового видео)?

  5. Существуют ли какие-либо примеры кода (учебное пособие) для выполнения потоковой передачи живого видео, где у вас есть приложение C / C ++ / Java, создающее несколько кадров изображения, и есть веб-браузер, использующий этот вывод в качестве потокового видео ? Я едва мог найти учебники по этой теме после нескольких часов поиска в Google.

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Вы определенно хотите прекратить вывод файлов PNG на диск и вместо этого вводить кадры данных изображения в видеокодер. Хорошая ставка - использовать libav / ffmpeg. Затем вам нужно будет инкапсулировать закодированное видео в дружественный к сети формат. Я бы порекомендовал x264 в качестве кодировщика и формат потока MPEG4 или MPEG2TS.

Для просмотра видео в веб-браузере вам необходимо выбрать формат потоковой передачи. HLS в HTML5 поддерживается Safari, но, к сожалению, не намного. Для широкой поддержки клиентов вам потребуется использовать плагин, такой как flash или медиаплеер.

Самый простой способ сделать это - использовать Wowza для перезапуска на стороне сервера. Программа GL будет транслировать MPEG2 TS в Wowza, а затем подготовит потоки для HLS, RTMP (flash), RTSP и Microsoft Smooth Streaming (Silverlight). Wowza стоит около 1000 долларов. Вы можете настроить RTMP-поток, используя Red5, который является бесплатным. Или вы можете использовать RTSP для VLC, но клиенты RTSP ужасны.

К сожалению, в настоящее время уровень стандартизации для веб-видео очень низок, а инструменты для видео довольно громоздки. Это большое дело, но вы можете получить взлом с помощью ffmpeg / libav. Подтверждением концепции может быть запись кадров изображения в формате YUV420p в канал, который прослушивает ffmpeg, и выбор выходного потока, который можно прочитать с помощью клиента RTSP, такого как VLC, Quicktime или Windows Media Player.

0 голосов
/ 14 марта 2012

Большинство видео в реальном времени - это MPEG2 для внутреннего использования, заключенное в RTMP (Flash) или HLS (Apple). Вероятно, есть способ визуализировать ваш OpenGL в кадры и конвертировать их в MPEG2 в виде живого потока, но я точно не знаю, как (возможно, FFMPEG?). Как только это будет сделано, вы можете передать поток через Flash Media Live Encoder (это бесплатно) и транслировать его на Flash-клиенты напрямую, используя RTMP, или принудительно опубликовать его на Wowza Media Server, чтобы упаковать его для Flash, Http Live Streaming (Cupertino), Smooth Потоковое для Silverlight.

По сути, вы можете объединить некоторые решения COTS в конвейер и играть на стандартном плеере, не обрабатывая сокеты и мелкие вещи самостоятельно.

...