为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2023-02-22 15:27:39
在 indistural 项目的背景下,我开发了一个实时应用程序来检测带有 AI 算法的人。在本地,我获取并显示带有 OPENCV 操作帧的视频。目标是实现从Opencv帧到rtmp服务器的流视频FFmpeg 似乎是一个很好的视角。但是,通常流从 .mp4 或几个 .jpg 开始在 rtmp 服务器上发布流视频。谢谢。
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

首先,ffmpeg 具有将流推送到 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())


查看完整回答
反对 回复 2023-02-22
  • 1 回答
  • 0 关注
  • 362 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信