首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将cv2.视频写入器帧流到和RTSP服务器

如何将cv2.视频写入器帧流到和RTSP服务器
EN

Stack Overflow用户
提问于 2021-09-29 15:51:52
回答 1查看 2.9K关注 0票数 3

环境: Docker,Ubuntu20.04,OpenCV 3.5.4,FFmpeg 4.2.4

我目前正在使用cv2.VideoCapture后端读取CV_FFMPEG会话的输出,并成功地将该输出实时写入使用cv2.VideoWriter的文件中。我这样做的原因是在输入上绘制边框并将其保存到一个新的输出中。

问题是我是在无头环境(Docker容器)中这样做的。我想实时查看正在写入cv2.VideoWriter的内容。

例如,我知道有一些方法可以通过使用XQuartz传递我的显示,这样我就可以使用cv2.imshow。但我真正想做的是将这些帧写入RTSP服务器。所以不仅我的主人可以“看”,其他的主人也可以看。

在视频发布后,我可以使用这个命令轻松地将视频流到我的RTSP服务器。

ffmpeg -re -stream_loop -1 -i output.mp4 -c copy -f rtsp rtsp://rtsp_server_host:8554/stream

在框架进入上述命令时,是否有管道传输这些帧?cv2.VideoWriter本身可以将帧写入RTSP服务器吗?

任何想法都将不胜感激!谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-09-29 21:09:20

经过大量的搜索,我终于找到了如何在子进程中使用FFmpeg来完成这个任务。希望这能帮到别人!

代码语言:javascript
复制
def open_ffmpeg_stream_process(self):
    args = (
        "ffmpeg -re -stream_loop -1 -f rawvideo -pix_fmt "
        "rgb24 -s 1920x1080 -i pipe:0 -pix_fmt yuv420p "
        "-f rtsp rtsp://rtsp_server:8554/stream"
    ).split()
    return subprocess.Popen(args, stdin=subprocess.PIPE)


def capture_loop():
    ffmpeg_process = open_ffmpeg_stream_process()
    capture = cv2.VideoCapture(<video/stream>)    
    while True:
        grabbed, frame = capture.read()
        if not grabbed:
            break
        ffmpeg_process.stdin.write(frame.astype(np.uint8).tobytes())
    capture.release()
    ffmpeg_process.stdin.close()
    ffmpeg_process.wait()
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69379674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档