Синтаксис строки состояния (Status-Line):
Status-Line = RTSP-Version SP Status-Code SP Reason-Phrase CRLF
Код состояния 451 (Parameter Not Understood — Параметр не понят) информирует о том, что Получатель запроса не поддерживает один или несколько параметров, содержащихся в запросе. При возврате этого сообщения об ошибке агент ДОЛЖЕН вернуть тело сообщения, содержащее ошибочные параметры. (раздел 17.4.15 из RFC 7826)
Остальные коды состояний ответа перечислены в таблице.
Ссылки на документы
Скачать оригинальный документ на английском языке RFC 7826 — Real-Time Streaming Protocol Version 2.0
Читать полную версию документа на русском языке RFC 7826 — Потоковый протокол в реальном времени (RTSP), версия 2.0
Не забывайте про поля общих заголовков RTSP 2.0, которые могут применяться как в запросах так и в ответах.
Помните о полях заголовков запросов RTSP 2.0. Изучите методы RTSP 2.0 с которыми применяются коды состояний ответа.
Общие заголовки RTSP 2.0 — это заголовки, которые могут использоваться как в запросах, так и в ответах. Общие заголовки RTSP 2.0 перечислены в таблице […]
Поле заголовка ответа «Proxy-Authenticate» ДОЛЖНО быть включено как часть ответа 407 (Proxy Authentication Required). Поле-значение состоит из запроса, который указывает схему аутентификации […]
Аннотация В разделе 1.1.1 RFC 3986 синтаксис URI определяется как «федеративная и расширяемая система именования, в которой спецификация каждой «схемы» может дополнительно […]
Общие заголовки RTSP 2.0 — это заголовки, которые могут использоваться как в запросах, так и в ответах. Общие заголовки RTSP 2.0 перечислены в таблице […]
Hello,
I am upgrading a project from Gstreamer 1.16.2 to the latest and greatest. However, I am using rtsp streams integrated via Milestone Xprotect (popular VMS) ONVIF bridge plugin (this plugin exposes onvif enabled rtsp urls). I’ve noticed that these streams are now failing during this upgrade. This issue I believe helped remedy some other issues i saw with /vod/ rtsp streams, but with live rtsp streams (which playback in vlc and older gst versions fine), I am now receiving a fatal Error (451): Parameter Not Understood
error. I’ve attached logs of the following command in both versions.
GST_DEBUG=rtspsrc:6 gst-launch-1.0 rtspsrc location=»rtsp://username:pw@192.168.7.235:554/live/96813dab-2c0d-4308-b031-4fb1f668d9cf» protocols=tcp ! decodebin ! fakesink > rtspsrc_issue.log 2>&1
Since this requires a milestone server to test, I realize it may be difficult to address. I’m happy to coordinate with some temporarily if they’d like to test on my server (I can expose a public IP to a specific person for a short window if needed).
Gst 1.16.2: rtspsrc_issue_gst_1_16.log
Latest build of main
branch as of last Friday: rtspsrc_issue.log
Thanks
Matt
0
1
Всем доброго времени суток.
Есть система видеонаблюдения на Ubuntu 14.04 и zoneminder. Подцеплено 14 китайских IP камер.
Три камеры имеют поток вида:
rtsp://192.168.2.xxx/live0.264
Ещё три камеры — поток:
rtsp://192.168.2.xxx:8554/live0.264
И восемь камер с потоком:
rtsp://192.168.2.xxx:554/user=admin&password=tlJwpbo6&channel=1&stream=0.sdp?real_stream
Так вот, первые шесть камер показывают видео в ZM, а последние восемь не показывают. Просто пустой квадрат.
Почему?
Помогите, пожалуйста, разобраться.
Кстати, в VLC потоки всех трёх видов прекрасно работают.
If the stream on the link does not exist, creating VideoCapture
object on that link would still be successful but you will not be able to process on the object.
You code’s control flow just might be going in and checking if (cap.isOpened()== True)
but there is no else
block to handle what would happen if if (cap.isOpened() != True)
. So just try adding an else
block to display the error message.
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
If this doesn’t work: following might solve the issue:
One of the main issues is that every camera manufacturer uses their
own protocol (RTSP URI formatting). Finding the correct URL for your
IP-camera can be frustrating and time-intensive. When found you can
try to open it with VLC, and afterwards with Kerberos.io.Depending on the format of the RTSP URI things can go wrong, for
example when using a format like above. To solve the problem you’ll
need to add an question mark «?» at the end of the url.
As example original link might be:
rtsp://192.168.2.109:554/user=admin&password=mammaloe&channel=1&stream=0.sdp
So with ?
it would be:
rtsp://192.168.2.109:554/user=admin&password=mammaloe&channel=1&stream=0.sdp?
Source
Thanks for the reply. With the ffplay test I get the following result
fplay version n4.4 Copyright (c) 2003-2021 the FFmpeg developers
built with gcc 10.2.0 (GCC)
configuration: —prefix=/usr —disable-debug —disable-static —disable-stripping —enable-amf —enable-avisynth —enable-cuda-llvm —enable-lto —enable-fontconfig —enable-gmp —enable-gnutls —enable-gpl —enable-ladspa —enable-libaom —enable-libass —enable-libbluray —enable-libdav1d —enable-libdrm —enable-libfreetype —enable-libfribidi —enable-libgsm —enable-libiec61883 —enable-libjack —enable-libmfx —enable-libmodplug —enable-libmp3lame —enable-libopencore_amrnb —enable-libopencore_amrwb —enable-libopenjpeg —enable-libopus —enable-libpulse —enable-librav1e —enable-librsvg —enable-libsoxr —enable-libspeex —enable-libsrt —enable-libssh —enable-libtheora —enable-libv4l2 —enable-libvidstab —enable-libvmaf —enable-libvorbis —enable-libvpx —enable-libwebp —enable-libx264 —enable-libx265 —enable-libxcb —enable-libxml2 —enable-libxvid —enable-libzimg —enable-nvdec —enable-nvenc —enable-shared —enable-version3
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
rstp://192.168.1.7:554/user=admin: Protocol not found
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
^C
[1] Done ffplay rstp://192.168.1.7:554/user=admin
Further research shows that ffplay (and ffmpeg) view rstp as a demuxer and need more command line options. I tried the following
ffplay -rtsp_transport tcp -f rtsp rstp://192.168.1.XX:554/user=admin&password=XXXXXXXXXXXX&channel=1&stream=0.sdp?real_stream—rtp-caching=100
This returns
ffplay version n4.4 Copyright (c) 2003-2021 the FFmpeg developers
built with gcc 10.2.0 (GCC)
configuration: —prefix=/usr —disable-debug —disable-static —disable-stripping —enable-amf —enable-avisynth —enable-cuda-llvm —enable-lto —enable-fontconfig —enable-gmp —enable-gnutls —enable-gpl —enable-ladspa —enable-libaom —enable-libass —enable-libbluray —enable-libdav1d —enable-libdrm —enable-libfreetype —enable-libfribidi —enable-libgsm —enable-libiec61883 —enable-libjack —enable-libmfx —enable-libmodplug —enable-libmp3lame —enable-libopencore_amrnb —enable-libopencore_amrwb —enable-libopenjpeg —enable-libopus —enable-libpulse —enable-librav1e —enable-librsvg —enable-libsoxr —enable-libspeex —enable-libsrt —enable-libssh —enable-libtheora —enable-libv4l2 —enable-libvidstab —enable-libvmaf —enable-libvorbis —enable-libvpx —enable-libwebp —enable-libx264 —enable-libx265 —enable-libxcb —enable-libxml2 —enable-libxvid —enable-libzimg —enable-nvdec —enable-nvenc —enable-shared —enable-version3
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
[rtsp @ 0x7f51a4000c80] method DESCRIBE failed: 401 Unauthorized0
rstp://192.168.1.7:554/user=admin: Server returned 401 Unauthorized (authorization failed)
So I am getting somewhere. Where can I put the ffmpeg arguments in cctv-viewer?