小编Ηλί*_*δης的帖子

使用 FFmpeg、python 和 opencv 显示流

情况: 我有一个连接到树莓派的 basler 摄像头,我正在尝试使用 FFmpg 将其馈送直播到我的 Windows PC 中的 TCP 端口,以便监视摄像头前面发生的情况。

有效的事情: 我设法在树莓派上设置一个Python脚本,它负责记录帧,将它们输入管道并将它们流式传输到TCP端口。从该端口,我可以使用 FFplay 显示流。

我的问题: FFplay 非常适合快速轻松地测试您前进的方向是否正确,但我想“读取”流中的每一帧,进行一些处理,然后使用 opencv 显示流。那,我还做不到。

最低限度地表示,这是我在树莓派方面使用的代码:

command = ['ffmpeg',
           '-y',
           '-i', '-',
           '-an',
           '-c:v', 'mpeg4',
           '-r', '50',
           '-f', 'rtsp',
           '-rtsp_transport',
           'tcp','rtsp://192.168.1.xxxx:5555/live.sdp']

p = subprocess.Popen(command, stdin=subprocess.PIPE) 

while camera.IsGrabbing():  # send images as stream until Ctrl-C
    grabResult = camera.RetrieveResult(100, pylon.TimeoutHandling_ThrowException)
    
    if grabResult.GrabSucceeded():
        image = grabResult.Array
        image = resize_compress(image)
        p.stdin.write(image)
    grabResult.Release() 

Run Code Online (Sandbox Code Playgroud)

在我的电脑上,如果我在终端上使用以下 FFplay 命令,它就会工作并实时显示流:

ffplay -rtsp_flags listen rtsp://192.168.1.xxxx:5555/live.sdp?tcp

在我的电脑上,如果我使用以下 python 脚本,流就会开始,但它在函数中失败,cv2.imshow因为我不确定如何解码它:

import subprocess
import cv2

command …
Run Code Online (Sandbox Code Playgroud)

python opencv subprocess ffmpeg video-streaming

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

ffmpeg ×1

opencv ×1

python ×1

subprocess ×1

video-streaming ×1