FFmpeg 将视频从帧 OpenCV python 流式传输到 rtmp

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

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

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

谢谢。


慕码人8056858
浏览 364回答 1
1回答

哔哔one

首先,ffmpeg 具有将流推送到 rtmp 服务器的功能。您可以尝试为 ffmpeg cammand 创建一个子进程,并通过 PIPE 传递您的帧。这是您可以尝试的简单示例代码import subprocessimport cv2rtmp_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 = 0cap = cv2.VideoCapture(path)# gather video info to ffmpegfps = 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 ffmpegcommand = ['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 datap = 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())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python