繁体   English   中英

FFmpeg stream 视频从帧 OpenCV Z23EEEB4347BDD265DFC6B7EE9AB3B7 到 rtmp

[英]FFmpeg stream video to rtmp from frames OpenCV python

在工业项目的背景下,我开发了一个实时应用程序来使用 AI 算法检测人。 在本地,我使用 OPENCV 获取并显示使用帧操作的视频。

目标是实现从 Opencv 帧到 rtmp 服务器的 stream 视频

FFmpeg 似乎是一个很好的视角。 然而,stream 经常从.mp4 或几个.jpg 开始在 rtmp 服务器上发布 stream 视频。

谢谢你。

首先 ffmpeg 用于将 stream 推送到 rtmp 服务器。 您可以尝试为 ffmpeg cammand 创建一个子进程,并通过 PIPE 传递您的帧。

这是您可以尝试的简单示例代码

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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM