Реализовать IP-камеру

У нас есть устройство с аналоговой камерой. У нас есть карта, которая сэмплирует его и оцифровывает. Все это делается в директксе. На данный момент замена оборудования невозможна, но нам нужно кодировать так, чтобы мы могли видеть этот видеопоток в режиме реального времени, независимо от каких-либо изменений оборудования или базовой операционной системы, которые произойдут в будущем.

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

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

Во-первых, это хорошая идея или плохая?

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

Как вы рекомендуете мне справиться с этим? Существуют ли какие-либо кроссплатформенные библиотеки для такой вещи?

Спасибо.

edit: я готов принять предложения о чем-то другом, а не о том, что указано выше.


person San Jacinto    schedule 24.09.2009    source источник


Ответы (2)


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

Изменить:

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

person Caleb Huitt - cjhuitt    schedule 24.09.2009
comment
Я понимаю, откуда вы это взяли, но локальное аппаратное ускорение может быть на другом устройстве или на том же устройстве. Прямо сейчас он спускается через USB на дисплей. Если мы отбросим идею сокетов, что хорошо, знаете ли вы о каких-либо LGPL или проприетарных кросс-платформенных библиотеках, которые помогут сделать это в Qt? - person San Jacinto; 25.09.2009
comment
Кроме того, пожалуйста, добавьте пробел или что-то в свой ответ, чтобы я мог +1. это говорит, что голосование слишком старо, чтобы изменить. - person San Jacinto; 25.09.2009

Вы смотрели QVision? Это фреймворк на основе Qt для управления видео и его обработкой. Вам не нужна обработка, но я думаю, что она будет делать то, что вы хотите.

person plinth    schedule 25.09.2009