ONVIF Ошибка GetStreamUri: устройство возвращает 404 на RTSP-поток
- Метод
GetStreamUriвозвращает URI, но при попытке подключения медиаплеера или VMS сервер RTSP возвращает статусRTSP/1.0 404 Not Foundили404 Stream Not Found. - Видеопоток с камеры не открывается в приложениях реального времени.
- Проблема возникает избирательно для дополнительного субпотока (Sub Stream).
1. Причины возврата 404 на запрос RTSP
Ошибка 404 Not Found генерируется встроенным медиа-сервером (RTSP-демоном) камеры в следующих ситуациях:
- В запросе
GetStreamUriпередан токен профиля (ProfileToken), для которого отключен энкодер видео; - Камера сгенерировала некорректный внутренний путь к RTSP-треку (например,
rtsp://192.168.1.50/Streaming/Channels/102при выключенном втором потоке); - Несоответствие IP-адреса в возвращенном URI реальному адресу за NAT (возврат внутреннего адреса
127.0.0.1или0.0.0.0); - Аварийное падение RTSP-сервера (rtspd) на камере из-за утечки дескрипторов сокетов.
2. Получение корректного RTSP URI через SOAP
Отправьте запрос к сервису Media с явным указанием транспортного протокола (TCP/RTP):
<soapenv:Body>
<trt:GetStreamUri xmlns:trt="http://www.onvif.org/ver10/media/wsdl">
<trt:StreamSetup>
<tt:Stream xmlns:tt="http://www.onvif.org/ver10/schema">RTP-Unicast</tt:Stream>
<tt:Transport xmlns:tt="http://www.onvif.org/ver10/schema">
<tt:Protocol>TCP</tt:Protocol>
</tt:Transport>
</trt:StreamSetup>
<trt:ProfileToken>ProfileToken_1</trt:ProfileToken>
</trt:GetStreamUri>
</soapenv:Body>3. Прямая проверка RTSP через FFplay / VLC
Проверьте прямую отдачу потока в обход ONVIF-стека:
# Тестирование основного потока по TCP
ffplay -rtsp_transport tcp "rtsp://admin:password@192.168.1.50:554/Streaming/Channels/101"
# Тестирование дополнительного субпотока
ffplay -rtsp_transport tcp "rtsp://admin:password@192.168.1.50:554/Streaming/Channels/102"4. Исправление конфигурации потоков на камере
- Войдите в веб-интерфейс камеры: Configuration -> Video/Audio;
- Переключитесь на Sub-Stream и убедитесь, что стоит флаг Enable Sub-Stream;
- Если используется RTSP поверх нестандартного порта (например, 10554), измените порт в веб-интерфейсе и перезагрузите камеру.
Частые вопросы (FAQ)
Почему GetStreamUri возвращает URI с IP-адресом 0.0.0.0?
Некоторые прошивки возвращают относительный URI или шаблон 0.0.0.0. Клиентское ПО обязано автоматически подставить реальный IP-адрес хоста, к которому выполнялся SOAP-запрос.
Что делать, если камера находится за NAT маршрутизатора?
Настройте проброс портов HTTP и RTSP на разные внешние порты и активируйте в камере опцию 'NAT / UPnP Mapping', указав внешний белый IP-адрес.
Почему 404 возникает только после изменения разрешения потока?
При смене разрешения RTSP-сервер камеры перезапускается. Если клиент пытается подключиться мгновенно, поток еще не инициализирован и возвращает 404.
Как авторизоваться в RTSP, если пароль содержит спецсимволы (@, :, /)?
Спецсимволы в строке URL должны быть закодированы по стандарту URL Percent-Encoding (например, '@' заменяется на '%40').