Задача — передать изображение с 5 IP-камер с помощью QtMultimedia из фреймворка PyQt5. Изначально пробовал использовать OpenCV, но параллельная трансляция 5 видеопотоков снижала fps. Мы решили попробовать 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_())
Я использую класс Camera для работы с камерами. Я использую класс QCameraInfo для подключения камеры. Он имеет методы defaultCamera() и доступные Cameras(). Первый метод дает системную камеру по умолчанию, а второй дает список камер в системе.
Проблема: эти методы не разрешают доступ к 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)
self.media_player = QMediaPlayer(self, QMediaPlayer.VideoSurface)
self.media_player.setVideoOutput(video_widget)
# http://IP/h264.flv - with sound?
url = "http://admin:admin1@192.168.1.141/video.cgi"
self.media_content = QMediaContent(QUrl(url))
self.media_player.setMedia(self.media_content)
self.media_player.play()
if __name__ == '__main__':
app = QApplication(sys.argv)
player = VideoPlayer()
player.show()
sys.exit(app.exec_())
Но это тоже не увенчалось успехом. На выходе я получаю пустое окно без видеопотока.
Помогите, пожалуйста, разобраться.
Обновление:моя попытка переписать код на PyQt6
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt6.QtMultimedia import QMediaPlayer
from PyQt6.QtMultimediaWidgets import QVideoWidget
from PyQt6.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)
self.container = QWidget()
self.container.setLayout(layout)
self.setCentralWidget(self.container)
url = "rtsp://admin:admin1@192.168.1.157/play1.sdp"
self.media_player = QMediaPlayer(self)
self.media_player.setSource(QUrl(url))
self.video_widget = QVideoWidget()
self.media_player.setVideoOutput(self.video_widget)
# self.video_widget.show()
self.media_player.play()
if __name__ == '__main__':
app = QApplication(sys.argv)
player = VideoPlayer()
player.show()
sys.exit(app.exec())
Подробнее здесь: https://stackoverflow.com/questions/779 ... multimedia
Как транслировать видео с IP-камеры с помощью PyQt5 QtMultimedia? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение