Advertisement
Mr_hEx

display video though RTSP

Aug 11th, 2024 (edited)
1,407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.73 KB | None | 0 0
  1. #After fuzzing using this code => https://pastebin.com/7MdwVwu2
  2. #will find the path and use it to display video though this below code
  3. #with find root password on video stream
  4. import sys
  5. import cv2
  6. from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QDesktopWidget, QComboBox
  7. from PyQt5.QtCore import QThread, Qt, pyqtSignal, pyqtSlot
  8. from PyQt5.QtGui import QImage, QPixmap
  9.  
  10. class VideoThread(QThread):
  11.     change_pixmap_signal = pyqtSignal(QImage)
  12.  
  13.     def __init__(self, url, resolution):
  14.         super().__init__()
  15.         self.url = url
  16.         self.resolution = resolution
  17.         self._run_flag = True
  18.  
  19.     def run(self):
  20.         cap = cv2.VideoCapture(self.url)
  21.        
  22.         # Set capture parameters for the selected resolution
  23.         cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('H', '2', '6', '4'))
  24.         cap.set(cv2.CAP_PROP_FRAME_WIDTH, self.resolution[0])
  25.         cap.set(cv2.CAP_PROP_FRAME_HEIGHT, self.resolution[1])
  26.        
  27.         while self._run_flag:
  28.             ret, cv_img = cap.read()
  29.             if ret:
  30.                 rgb_image = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)
  31.                 h, w, ch = rgb_image.shape
  32.                 bytes_per_line = ch * w
  33.                 convert_to_qt_format = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
  34.                 self.change_pixmap_signal.emit(convert_to_qt_format)
  35.         cap.release()
  36.  
  37.     def stop(self):
  38.         self._run_flag = False
  39.         self.wait()
  40.  
  41. class App(QWidget):
  42.     def __init__(self):
  43.         super().__init__()
  44.         self.setWindowTitle("Ultra HD RTSP Player")
  45.         self.resolutions = {
  46.             "1080p (1920x1080)": (1920, 1080),
  47.             "4K (3840x2160)": (3840, 2160),
  48.             "8K (7680x4320)": (7680, 4320)
  49.         }
  50.         self.current_resolution = self.resolutions["4K (3840x2160)"]  # Default to 4K
  51.         self.init_ui()
  52.  
  53.     def init_ui(self):
  54.         self.image_label = QLabel(self)
  55.         self.image_label.resize(*self.current_resolution)
  56.        
  57.         self.resolution_combo = QComboBox(self)
  58.         self.resolution_combo.addItems(self.resolutions.keys())
  59.         self.resolution_combo.setCurrentText("4K (3840x2160)")
  60.         self.resolution_combo.currentTextChanged.connect(self.change_resolution)
  61.        
  62.         vbox = QVBoxLayout()
  63.         vbox.addWidget(self.resolution_combo)
  64.         vbox.addWidget(self.image_label)
  65.         self.setLayout(vbox)
  66.  
  67.         self.thread = VideoThread("rtsp://127.0.0.1:554/mpeg4", self.current_resolution)
  68.         self.thread.change_pixmap_signal.connect(self.update_image)
  69.         self.thread.start()
  70.  
  71.         self.center_window()
  72.  
  73.     def center_window(self):
  74.         qtRectangle = self.frameGeometry()
  75.         centerPoint = QDesktopWidget().availableGeometry().center()
  76.         qtRectangle.moveCenter(centerPoint)
  77.         self.move(qtRectangle.topLeft())
  78.  
  79.     @pyqtSlot(QImage)
  80.     def update_image(self, qt_img):
  81.         scaled_img = qt_img.scaled(self.image_label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
  82.         self.image_label.setPixmap(QPixmap.fromImage(scaled_img))
  83.  
  84.     def change_resolution(self, resolution_text):
  85.         self.current_resolution = self.resolutions[resolution_text]
  86.         self.image_label.resize(*self.current_resolution)
  87.         self.thread.stop()
  88.         self.thread = VideoThread("rtsp://127.0.0.1:554/mpeg4", self.current_resolution)
  89.         self.thread.change_pixmap_signal.connect(self.update_image)
  90.         self.thread.start()
  91.         self.center_window()
  92.  
  93.     def closeEvent(self, event):
  94.         self.thread.stop()
  95.         event.accept()
  96.  
  97. if __name__ == "__main__":
  98.     app = QApplication(sys.argv)
  99.     a = App()
  100.     a.show()
  101.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement