У меня есть приложение OpenGL, визуализированные изображения которого необходимо передавать через Интернет мобильным клиентам. Раньше достаточно было просто записать рендеринг в видеофайл, который уже работает, а теперь это нужно распространить на последующий стриминг.
Что сейчас работает:
- Визуализировать сцену в объект фреймбуфера OpenGL
- Захват содержимого FBO с помощью NvIFR
- Закодируйте его в H.264 с помощью NvENC (ЦП туда и обратно не требуется)
- Загрузите закодированный кадр в память хоста в виде байтового массива
- Добавить этот кадр в видео файл
Ни один из этих шагов пока не задействует FFmpeg или любую другую библиотеку. Теперь я хочу заменить последний шаг на «Потоковую передачу байтового массива текущего кадра через Интернет», и я предполагаю, что использование FFmpeg и FFserver было бы разумным выбором для этого. Я прав? Если нет, что было бы правильным способом?
Если да, то как мне подойти к этому в моем коде C ++? Как уже отмечалось, кадр уже закодирован. Кроме того, нет звука или другого материала, просто закодированный кадр H.264 в виде массива байтов, который обновляется нерегулярно и должен быть преобразован в устойчивый видеопоток. Я предполагаю, что это будет работа FFmpeg и что последующая потоковая передача через FFserver будет простой оттуда. Я не знаю, как в первую очередь передавать мои данные в FFmpeg, поскольку все найденные мной учебники FFmpeg (при неполном поиске) работают с файлом или устройством веб-камеры / захвата в качестве источника данных, а не с изменчивыми данными в основная память.
Упомянутый выше файл, который я уже могу создать, представляет собой файловый поток C ++, к которому я добавляю каждый отдельный кадр, что означает, что разные частоты кадров видео и рендеринга обрабатываются неправильно. Об этом тоже нужно позаботиться в какой-то момент.
Может ли кто-нибудь указать мне правильное направление? Могу ли я пересылать данные из моего приложения в FFmpeg для создания правильного видеопотока без записи на жесткий диск? Учебники очень ценятся. Кстати FFmpeg / FFserver не является обязательным. Если у вас есть лучшая идея для потоковой передачи содержимого фреймбуфера OpenGL, я очень хочу знать.