Как стримить изображение с IP камеры с помощью PyQt5 QtMultimedia?

Стоит задача стримить изображение с 5 IP-камер с помощью QtMultimedia из фреймворка PyQt5. Первоначально пробовал использовать OpenCV, но параллельная трансляция 5 видеопотоков снижала фпс. Решили попробовать QtMultimedia в попытках повысить производительность.

Для начала я пробовал подключиться к 1-2 камерам и в дальнейшем масштабировать это решение. Имя подопытного: D-Link DCS-931L. Подключаю камеру к сети через tp-link.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QMainWindow, QMessageBox, QPushButton
from PyQt5.QtMultimedia import QCamera, QCameraInfo
from PyQt5.QtMultimediaWidgets import QCameraViewfinder
from PyQt5.QtCore import QUrl


class DualCameraApp(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Dual Camera App')
        self.setGeometry(100, 100, 800, 600)

        self.camera1 = QCamera(QCameraInfo.defaultCamera())
        #self.camera2 = QCamera(QCameraInfo.availableCameras()[1])

        self.viewfinder1 = QCameraViewfinder()
        #self.viewfinder2 = QCameraViewfinder()

        self.camera1.setViewfinder(self.viewfinder1)
        #self.camera2.setViewfinder(self.viewfinder2)

        self.camera1.start()
        #self.camera2.start()


        layout = QVBoxLayout()
        layout.addWidget(self.viewfinder1)
        #layout.addWidget(self.viewfinder2)
        self.setLayout(layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DualCameraApp()
    window.show()
    sys.exit(app.exec_())

Для работы с камерами использую класс QCamera. Для подключения камеры использую класс QCameraInfo. У него есть методы defaultCamera() и availableCameras(). Первый метод дает системную камеру по умолчанию, а второй дает список камер в системе.

Проблема: эти методы не дают доступа к IP-камерами. Итого я могу подключиться только к своей камере в ноутбуке.

Дальше я смог получить ссылку на видеопоток и попробовал подключить с помощью ссылки

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QCamera
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtCore import QUrl


class VideoPlayer(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("IP Camera Video Stream")
        self.setGeometry(100, 100, 800, 600)

        video_widget = QVideoWidget()
        layout = QVBoxLayout()
        layout.addWidget(video_widget)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

        media_player = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        media_player.setVideoOutput(video_widget)

        url = "http://admin:[email protected]/video.cgi"
        media_content = QMediaContent(QUrl(url))
        media_player.setMedia(media_content)
        media_player.play()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    player = VideoPlayer()
    player.show()
    sys.exit(app.exec_())

Но это также не принесло успеха. На выходе я получаю пустое окно без видеопотока.

Помогите, пожалуйста, разобраться.


Ответы (0 шт):