From 813b58a4b09b5fbdb8d8aef7a1ae995bb1ed691c Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Wed, 20 Mar 2024 00:27:28 +0300 Subject: [PATCH] CV: Camera->RTMP --- projects/CV/CapToRTMP/__main__.py | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 projects/CV/CapToRTMP/__main__.py diff --git a/projects/CV/CapToRTMP/__main__.py b/projects/CV/CapToRTMP/__main__.py new file mode 100644 index 0000000..5d86e4c --- /dev/null +++ b/projects/CV/CapToRTMP/__main__.py @@ -0,0 +1,42 @@ +import subprocess +import cv2 +rtmp_url = "rtmp://127.0.0.1:1935/stream/pupils_trace" + +# In my mac webcamera is 0, also you can set a video file name instead, for example "/home/user/demo.mp4" +path = 0 +cap = cv2.VideoCapture(path) + +# gather video info to ffmpeg +fps = int(cap.get(cv2.CAP_PROP_FPS)) +width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) +height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + +# command and params for ffmpeg +command = ['ffmpeg', + '-y', + '-f', 'rawvideo', + '-vcodec', 'rawvideo', + '-pix_fmt', 'bgr24', + '-s', "{}x{}".format(width, height), + '-r', str(fps), + '-i', '-', + '-c:v', 'libx264', + '-pix_fmt', 'yuv420p', + '-preset', 'ultrafast', + '-f', 'flv', + rtmp_url] + +# using subprocess and pipe to fetch frame data +p = subprocess.Popen(command, stdin=subprocess.PIPE) + + +while cap.isOpened(): + ret, frame = cap.read() + if not ret: + print("frame read failed") + break + + # YOUR CODE FOR PROCESSING FRAME HERE + + # write to pipe + p.stdin.write(frame.tobytes())