Как транслировать видео с IP-камеры с помощью PyQt5 QtMultimedia?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как транслировать видео с IP-камеры с помощью PyQt5 QtMultimedia?

Сообщение Anonymous »

Задача — передать изображение с 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»