Код: Выделить всё
ffmpeg -re -stream_loop -1 -i .\2099536-hd_1920_1080_30fps.mp4 -f mpegts udp://127.0.0.1:51234?localaddr=127.0.0.1
Код: Выделить всё
ffplay udp://127.0.0.1:51234
Код: Выделить всё
from PyQt6 import QtGui, QtWidgets, QtCore
from ffpyplayer.player import MediaPlayer
import time
from threading import Thread
class VideoDisplayWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.player = None
self.layout = QtWidgets.QVBoxLayout(self)
self.video_frame_widget = QtWidgets.QLabel()
self.layout.addWidget(self.video_frame_widget)
self.frame_rate = 30
self.latest_frame = QtGui.QPixmap()
self.timer = QtCore.QTimer()
self.timer.setTimerType(QtCore.Qt.TimerType.PreciseTimer)
self.timer.timeout.connect(self.nextFrameSlot)
self.timer.start(int(1000.0/self.frame_rate))
self.play()
self.setLayout(self.layout)
def play(self):
play_thread = Thread(target=self._play, daemon=True)
play_thread.start()
def _play(self):
player = MediaPlayer("udp://127.0.0.1:51234")
val = ''
while val != 'eof':
frame, val = player.get_frame()
if val != 'eof' and frame is not None:
img, t = frame
# display img
w = img.get_size()[0]
h = img.get_size()[1]
data = img.to_bytearray()[0]
qimage = QtGui.QImage(data, w, h, QtGui.QImage.Format.Format_RGB888)
self.latest_frame = QtGui.QPixmap.fromImage(qimage)
time.sleep(0.001)
def nextFrameSlot(self):
self.video_frame_widget.setPixmap(self.latest_frame)
if __name__ == "__main__":
current_port = 51234
app = QtWidgets.QApplication([])
player = VideoDisplayWidget()
player.show()
exit(app.exec())
Код: Выделить всё
from ffpyplayer.player import MediaPlayer
import time
from pathlib import Path
import numpy as np
import cv2
player = MediaPlayer("udp://127.0.0.1:51234")
val = ''
while val != 'eof':
frame, val = player.get_frame()
if val != 'eof' and frame is not None:
img, t = frame
# display img
w = img.get_size()[0]
h = img.get_size()[1]
arr = np.uint8(np.array(img.to_bytearray()[0]).reshape(h,w,3)) # h - height of frame, w - width of frame, 3 - number of channels in frame
arr = cv2.cvtColor(arr, cv2.COLOR_BGR2RGB)
cv2.imshow('test', arr)
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
Подробнее здесь: https://stackoverflow.com/questions/787 ... ayer-frame
Мобильная версия