GStreamer rtsp管道冻结在cv2.VideoCapture中,可能与音频通道有关

时间:2019-08-07 10:44:27

标签: python-3.x gstreamer rtsp

我正在将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)我也尝试添加!排队!插件在各种地方和组合。没有任何帮助...

0 个答案:

没有答案