情况: 我有一个连接到树莓派的 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)