OpenGL рендерит передачу в режиме реального времени - PullRequest
3 голосов
/ 19 августа 2010

Я экспериментирую с разработкой инструмента для удаленного рендеринга OpenGL на C ++.Основная идея:

  1. Клиент выдает команды OpenGL, как будто это обычное приложение
    • Эти команды фактически отправляются по сети на внешний сервер
    • Сервервыполняет рендеринг, используя некоторую внеэкранную технику
    • После этого сервер передает клиенту один кадр по сети
    • Клиент отображает кадр на экране.
    • Цикл.

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

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

Я на правильном пути по этому поводу?Правильно ли здесь использовать библиотеку потокового видео?Если вы так думаете, что является хорошей библиотекой для этой задачи (на C или C ++, предпочтительно на C ++)?

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 21 августа 2010

У вас есть два решения.

Раствор 1

  • Удаленно запускать приложение
  • Перехватывать вызовы openGL
  • Переадресация их в сеть
  • Выпуск вызовов openGL локально

-> сложный, особенно при работе с буферами и текстурами; настоящий код openGL выполняется локально, что может быть не тем, что нужно, но решать только вам. Более того, он прозрачен для удаленного приложения (без изменения исходного кода, без перестройки). Почти нет сетевого общения.

Решение 2: что вы описали, с плюсами и минусами.

Если вы выберете Решение 2, пока не беспокойтесь о скорости. У вас будет достаточно проблем с openGL, поверьте мне.

Начало в синхронном режиме: рендеринг, выборка, отправка, рендеринг, выборка, отправка Затем асинхронный режим: рендеринг, начало выборки, рендеринг, конец выборки, начало отправки, рендеринг и т. Д. Это будет достаточно сложно, я думаю

1 голос
/ 23 августа 2010

В зависимости от разрешения, которое вам необходимо поддерживать, и скорости вашей локальной сети, возможна потоковая передача данных без сжатия.

Для 24-битного кадра 1280x1024 требуется 30 Мбит, а для гигабитного Ethernet это означает теоретические несжатые 33 кадра в секунду.

Если этого недостаточно, добавить простое сжатие RLE самостоятельно довольно просто.

0 голосов
/ 19 августа 2010

Представьте, что вам нужно потратить $ на обеих машинах, чтобы обеспечить им надлежащую вычислительную мощность.Вы могли бы избежать этого и упростить разработку клиента, если бы вы централизовали все связанные с графикой задачи на одном компьютере.Работа клиента будет заключаться только в отправке / получении / отображении данных, а сервер может сосредоточиться на обработке графики (OpenGL) и отправке данных (в виде кадров) обратно клиенту.

Узкое место, на которое вы ссылаетесь, зависит от нескольких факторов на вашей стороне: размера изображений и частоты кадров, которые вам необходимо отправить / получить / отобразить.

Вот некоторые изинтересные темы, которые я прочитал, и, надеюсь, они пролят свет на эту тему:

Потоковое видео с использованием c ++

Как передавать потоковое видео и воспроизводитьэто?

...