Если поток по ссылке не существует, создание объекта VideoCapture
по этой ссылке все равно будет успешным, но вы не сможете обработать объект.
Вы управляете потоком кода, который, возможно, входит и проверяет if (cap.isOpened()== True)
, но нет блока else
для обработки того, что произойдет, если if (cap.isOpened() != True)
. Поэтому просто попробуйте добавить блок else
, чтобы отобразить сообщение об ошибке.
for x in feedList:
print("[INFO] Checking Link..." + x)
cap=cv2.VideoCapture(x)
try:
# Check if camera opened successfully
if (cap.isOpened()== True):
streamlink = x
print("[INFO] FOUND! Stream Link..." + x)
break
# Else is important to display error message on the screen if can.isOpened returns false
else
print("[NO STREAM]" + x)
except socket.error:
print("[NO STREAM]" + x)
except:
print("[FAILED]" + x)
pass
Если это не сработает: решение проблемы может быть выполнено в следующих случаях:
One из основных проблем является то, что каждый производитель камер использует свой собственный протокол (форматирование RTSP URI). Поиск правильного URL для вашей IP-камеры может быть разочаровывающим и затратным по времени. Когда найден, вы можете попробовать открыть его с помощью VL C, а затем с помощью Kerberos.io.
В зависимости от формата URI RTSP, вещи могут go ошибаться, например, при использовании формата, подобного выше , Для решения проблемы вам необходимо добавить знак вопроса "?" в конце URL.
В качестве примера можно привести исходную ссылку:
rtsp://192.168.2.109:554/user=admin&password=mammaloe&channel=1&stream=0.sdp
Таким образом, с ?
это будет:
rtsp://192.168.2.109:554/user=admin&password=mammaloe&channel=1&stream=0.sdp?
Источник