gpt4 book ai didi

opencv - 如何将 cv2.VideoWriter 帧流式传输到 RTSP 服务器

转载 作者:行者123 更新时间:2023-12-04 22:46:15 27 4
gpt4 key购买 nike

环境:Docker、Ubuntu 20.04、OpenCV 3.5.4、FFmpeg 4.2.4
我目前正在阅读 cv2.VideoCapture 的输出 session 使用 CV_FFMPEG backend 并使用 cv2.VideoWriter 成功地将其实时写入文件.我这样做的原因是在输入上绘制边界框并将其保存到新的输出中。
问题是我在 headless 环境(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 服务器?
任何想法将不胜感激!谢谢你。

最佳答案

经过大量搜索,我终于想出了如何在子进程中使用 FFmpeg 来做到这一点。希望这对其他人有帮助!

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

关于opencv - 如何将 cv2.VideoWriter 帧流式传输到 RTSP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69379674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com