Название: Отображение потока MJPEG от нескольких IP-камер Отправлено: torwig от Апрель 08, 2014, 19:42 Добрый вечер.
Есть 5 IP-камер. Делаю вывод изображений от всех камер в 1 окне. Для отдельно взятой камеры создал класс(потомок QWidget), который содержит QLabel, создаю отдельный поток, в который передаю указатель на этот виджет. В потоке использую QTcpSocket, отправляю запрос камере, получаю поток данных MJPEG. К сигналу readyRead подсоединил слот: Код: QByteArray readed = socket->readAll(); Код: int pos1 = buffer.indexOf("\r\n\r\n"); Код: label->setPixmap(QPixmap::fromImage(image)); Вопросы такие: Можно ли как-то уменьшить загрузку процессора, особенно под Windows? Почему такая загрузка ЦП? Возможно, следует использовать другой подход, алгоритм и т.п.? Рад буду выслушать любые ваши предложения, критику и уточняющие вопросы. Название: Re: Отображение потока MJPEG от нескольких IP-камер Отправлено: OKTA от Апрель 08, 2014, 20:00 Бывает процессор загружен из-за того, что сетевая карта под дикой нагрузкой работает. А картиночки большие?
Название: Re: Отображение потока MJPEG от нескольких IP-камер Отправлено: torwig от Апрель 08, 2014, 21:05 Не думаю, что сетевая карта загружена так сильно. Картинки 640х480, FPS 30.
Если закомментировать Код: QMetaObject::invokeMethod(surface, "setNewImage", Qt::QueuedConnection, Q_ARG(QImage, image_)); Название: Re: Отображение потока MJPEG от нескольких IP-камер Отправлено: qtdevel от Июль 04, 2014, 00:01 Нужно использовать OpenGL для отрисовки, при этом данные переводить в пространство YUV, формировать текстуры и создавать шейдер. Задача, мягко говоря, нетривиальная.
У меня так 5 камер показывает, при этом загрузка 9-11% на мощном компе. А до этого делал тоже через QImage, и загрузка одной камеры на компе, где я разрабатывал, была 80%, а с OpenGL все камеры около 43%. |