#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