我想处理USB摄像机的实时输入帧,同时通过rtmp协议流式传输原始帧。我已经分别实现了这两个功能,图像处理功能使用(el instanceof Element)
获取帧,流处理使用子进程运行命令cv2.VideoCapture(1)
。
当我将它们放在一起时,我意识到它们使用相同的硬件,即/ dev / video1。因此,只有这两个功能之一可以工作。
我知道我只需要访问一次相机,并为处理和流式传输提供帧。我试图从opencv获取帧,并通过ffmpeg和rtmp流传输每个帧。这是我尝试的代码:
ffmpeg -s 640x480 -i /dev/video1 -f flv -q 0 -an rtmp://xxxxxxxx
但这不起作用。
由于我的Jetson TX2具有gstreamer的硬件加速功能,因此任何想法如何使用ffmpeg和rtmp来流化单个帧(由opencv读取),或者使用ffmpeg来获取python甚至gstreamer中的输入帧。
答案 0 :(得分:0)
我通过使用线程和全局变量解决了这个问题。第一个线程从opencv获取实时帧,并使用ffmpeg通过rtmp流帧。第二个线程从全局变量'frame'获取帧,然后对该帧进行一些处理。