Mr_hEx icon

display video though RTSP

Mr_hEx | PRO | 08/12/24 12:29:29 AM UTC (Edited) | 0 ⭐ | 1632 👁️ | Never ⏰ | []
Python |

3.73 KB

|

None

|

0 👍

/

0 👎

#After fuzzing using this code => https://pastebin.com/7MdwVwu2
#will find the path and use it to display video though this below code
#with find root password on video stream 
import sys
import cv2
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QDesktopWidget, QComboBox
from PyQt5.QtCore import QThread, Qt, pyqtSignal, pyqtSlot
from PyQt5.QtGui import QImage, QPixmap
 
class VideoThread(QThread):
    change_pixmap_signal = pyqtSignal(QImage)
 
    def __init__(self, url, resolution):
        super().__init__()
        self.url = url
        self.resolution = resolution
        self._run_flag = True
 
    def run(self):
        cap = cv2.VideoCapture(self.url)
        
        # Set capture parameters for the selected resolution
        cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('H', '2', '6', '4'))
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, self.resolution[0])
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, self.resolution[1])
        
        while self._run_flag:
            ret, cv_img = cap.read()
            if ret:
                rgb_image = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)
                h, w, ch = rgb_image.shape
                bytes_per_line = ch * w
                convert_to_qt_format = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
                self.change_pixmap_signal.emit(convert_to_qt_format)
        cap.release()
 
    def stop(self):
        self._run_flag = False
        self.wait()
 
class App(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Ultra HD RTSP Player")
        self.resolutions = {
            "1080p (1920x1080)": (1920, 1080),
            "4K (3840x2160)": (3840, 2160),
            "8K (7680x4320)": (7680, 4320)
        }
        self.current_resolution = self.resolutions["4K (3840x2160)"]  # Default to 4K
        self.init_ui()
 
    def init_ui(self):
        self.image_label = QLabel(self)
        self.image_label.resize(*self.current_resolution)
        
        self.resolution_combo = QComboBox(self)
        self.resolution_combo.addItems(self.resolutions.keys())
        self.resolution_combo.setCurrentText("4K (3840x2160)")
        self.resolution_combo.currentTextChanged.connect(self.change_resolution)
        
        vbox = QVBoxLayout()
        vbox.addWidget(self.resolution_combo)
        vbox.addWidget(self.image_label)
        self.setLayout(vbox)
 
        self.thread = VideoThread("rtsp://127.0.0.1:554/mpeg4", self.current_resolution)
        self.thread.change_pixmap_signal.connect(self.update_image)
        self.thread.start()
 
        self.center_window()
 
    def center_window(self):
        qtRectangle = self.frameGeometry()
        centerPoint = QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)
        self.move(qtRectangle.topLeft())
 
    @pyqtSlot(QImage)
    def update_image(self, qt_img):
        scaled_img = qt_img.scaled(self.image_label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
        self.image_label.setPixmap(QPixmap.fromImage(scaled_img))
 
    def change_resolution(self, resolution_text):
        self.current_resolution = self.resolutions[resolution_text]
        self.image_label.resize(*self.current_resolution)
        self.thread.stop()
        self.thread = VideoThread("rtsp://127.0.0.1:554/mpeg4", self.current_resolution)
        self.thread.change_pixmap_signal.connect(self.update_image)
        self.thread.start()
        self.center_window()
 
    def closeEvent(self, event):
        self.thread.stop()
        event.accept()
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    a = App()
    a.show()
    sys.exit(app.exec_())

Comments