我正在将python + gstreamer连接到DVR rtsp提要,以使用opencv2进行图像处理。 在cv2.VideoCapture上使用gstreamer管道时,连接冻结(可能正在等待信号)。 rtsp提要由h264视频(我要处理)和pcma音频(我要丢弃)组成。
这是函数-它冻结在cv2.VideoCapture行:
def simple_test2():
rtsp_path = 'rtsp://admin:XXXX@10.0.0.50:554/cam/realmonitor?channel=1&subtype=0'
rtsp_path2 = 'rtspsrc location="{}" ! decodebin name=dcd dcd. ! videoconvert ! appsink max-buffers=1 drop=true dcd. ! audioconvert ! fakesink '.format(rtsp_path)
logging.info('connecting to {} : {} '.format(cc['name'],rtsp_path2))
vcap = cv2.VideoCapture(rtsp_path2)
for i in range(2):
logging.info('read frame #%s' % i )
succ, frame = vcap.read()
if succ:
logging.info('%s got frame %d : %s open? %s' % (cc['name'], i, str(frame.shape[0:2]),str(vcap.isOpened())))
else:
logging.info('%s fail frame %d open? %s' % (cc['name'], i,str(vcap.isOpened())))
time.sleep(1)
vcap.release()
进一步调查:
1)很奇怪-在gst-launch中运行相同的管道可以!
gst-launch-1.0 -v rtspsrc location="rtsp://admin:XXXX@10.0.0.50:554/cam/realmonitor?channel=2&subtype=0" ! decodebin name=dcd dcd. ! videoconvert ! appsink max-buffers=1 drop=true dcd. ! audioconvert ! fakesink
返回源源不断的日志消息
2)如果我使用更简单的管道,则在代码中例如:
rtspsrc location="{}" ! decodebin ! videoconvert ! appsink max-buffers=1 drop=true
我最终收到与音频垫无法链接的事实有关的连接错误,这就是为什么我尝试使用假接收器丢弃音频的原因。其他方法将不胜感激
3)我也尝试添加!排队!插件在各种地方和组合。没有任何帮助...