Как стримить изображение с 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_())
Но это также не принесло успеха. На выходе я получаю пустое окно без видеопотока.
Помогите, пожалуйста, разобраться.