import subprocess
import cv2
import numpy as np
# Пробуем HLS поток, который MediaMTX раздает параллельно с WHEP на порту 8888
# Либо WebRTC WHEP / RTSP
STREAM_URL = "http://10.10.10.10:8888/cam/index.m3u8"
# Разрешение камеры робота (обычно 640x480 или 1280x720)
WIDTH = 640
HEIGHT = 480
# Команда для ffmpeg: забирает поток и выплевывает сырые BGR24 байты в stdout
cmd = [
'ffmpeg',
'-loglevel', 'quiet',
'-i', STREAM_URL,
'-f', 'image2pipe',
'-pix_fmt', 'bgr24',
'-vcodec', 'rawvideo',
'-'
]
print(f"Запуск ffmpeg для потока: {STREAM_URL}...")
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=10**7)
frame_size = WIDTH * HEIGHT * 3
while True:
raw_frame = process.stdout.read(frame_size)
if len(raw_frame) != frame_size:
print("Не удалось прочитать кадр или поток завершен.")
break
# Превращаем байты в изображение для OpenCV
frame = np.frombuffer(raw_frame, dtype=np.uint8).reshape((HEIGHT, WIDTH, 3))
cv2.imshow("RoboMarvel Stream via FFmpeg", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
process.kill()
cv2.destroyAllWindows()