【问题标题】:cv2.videoCapture only return "Port missing in uri"cv2.videoCapture 仅返回“uri 中缺少端口”
【发布时间】:2021-04-26 05:38:07
【问题描述】:

首先,感谢您的关注。 我正在尝试使用 opencv 和 ip 摄像头进行流式传输,但它只返回“[tcp @ 000001d5fce13580] uri 中缺少端口”。我已经在 VLC 上进行了测试,也已经在 J​​avaCV 上进行了测试,并且两者都适用。我已经检查了 MPEG 并且没问题。有没有人经历过这个并且可以提供帮助?

我和:

  • WIN10
  • OpenCV 4.5.1

代码:

import numpy as np
import cv2


def runCam():
    print(cv2.getBuildInformation())
    video_src = "rtsp://admin:myPWCam@192.168.1.223:554/Streaming/channels/1/"
    cap = cv2.VideoCapture(video_src, cv2.CAP_FFMPEG)

    while True:
        ret, frame = cap.read()
        try:
            cv2.resizeWindow('Stream IP Camera OpenCV', 120300, 800)
            cv2.imshow('Stream IP Camera OpenCV', frame)
        except Exception as ex:
            template = "An exception of type {0} occurred. Arguments:\n{1!r}"
            message = template.format(type(ex).__name__, ex.args)
            print(message)
            break

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()


runCam()

OPENCV 构建信息:https://gist.github.com/nathancn/745f543e3a6cd13d012855759bd0940d

我使用海康威视网络摄像机型号 DS-2CD2621G0-IS

错误返回:

【问题讨论】:

  • 也许你需要明确地把端口。大多数来自相机的 rtsp 使用端口 554(除非有人更改它)。所以你可以试试:“rtsp://admin:myPWCam@192.168.1.223:554/Streaming/channels/1/”你也可以试试80端口
  • @api55 这个脚本是我从 uri 中删除端口的最后一个测试。放置门的备忘录属于此错误。
  • @api55 并在相机上配置了554端口并允许外部访问。
  • 您也可以在视频捕获调用中不使用 cv2.CAP_FFMPEG 进行尝试吗? ffmpeg 有时会很奇怪和挑剔。
  • 如果删除 cv2.CAP_FFMPEG 结果:gist.github.com/nathancn/84470e3e0f1f50d543169290580506bd

标签: python opencv stream video-capture


【解决方案1】:

已解决

问题出在我的密码上,由于某种原因,当密码包含“#”时,opencv 的 VideoCapture 会混淆。当我在 javacv 和 VLC 中测试它并且它工作时,我没有用另一个密码测试它并且浪费了很多时间:(但是现在我发现我更改了密码并且它已经工作了。我希望它可以帮助那些有同样问题的人要注意特殊密码字符。

【讨论】:

    【解决方案2】:

    如果你的密码中包含!"#$%&'()*+,-./:;<=>?@[\]^_{|}~这样的字符,那么问题可能出在OpenCV库的cv2.VideoCapture()上。

    您可以尝试使用imutils 库来解决这个问题。这对我有用。

    from imutils.video import VideoStream
    cap = VideoStream(video_src).start()
    

    所以您的代码可能如下所示:

    import numpy as np
    import cv2
    from imutils.video import VideoStream
    
    def runCam():
        print(cv2.getBuildInformation())
        video_src = "rtsp://admin:myPWCam@192.168.1.223:554/Streaming/channels/1/"
        cap = VideoStream(video_src).start()
    
        while True:
            frame = cap.read()
            try:
                cv2.resizeWindow('Stream IP Camera OpenCV', 120300, 800)
                cv2.imshow('Stream IP Camera OpenCV', frame)
            except Exception as ex:
                template = "An exception of type {0} occurred. Arguments:\n{1!r}"
                message = template.format(type(ex).__name__, ex.args)
                print(message)
                break
    
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    
        cap.release()
        cv2.destroyAllWindows()
    
    runCam()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2017-07-10
      相关资源
      最近更新 更多