Как проверить сетевое устройство на наличие действительного потока RTSP?

Я работаю над проектом, который передает видео/аудио через RTSP с использованием плагина VLC Media Player. Я хотел бы предоставить возможность сканировать сеть на наличие RTSP-камер. Я уверен, что это будет состоять из запроса списка всех сетевых устройств и тестирования порта 554. Обо всем этом я могу позаботиться. Однако, как только я зашел так далеко, как мне проверить устройство через порт 554, чтобы убедиться, что это действующая камера RTSP?

Я предполагаю, что в Winsock должно быть что-то, чтобы иметь возможность сделать это, но как мне проверить соединение через сокет и убедиться, что это действительный поток RTSP, к которому я могу подключиться? Какой бы метод ни использовался, мне не нужно пытаться подключиться через RTSP к каждому, используя какую-либо аутентификацию, я ищу способ более низкого уровня для определения того, действительно ли порт 554 обеспечивает поток RTSP.


person Jerry Dodge    schedule 14.10.2012    source источник
comment
Это TCP ПОРТ 554 или UDP ПОРТ 554? Я не вижу, как вы можете сделать что-либо, кроме как подключиться к сокету. Это все равно, что сказать, есть ли способ более низкого уровня проверить, дома ли кто-то, чем позвонить им и спросить их. Неа. WInSock — это просто уровень сокетов BSD, перенесенный в Windows. Он ничего не знает о RTSP.   -  person Warren P    schedule 14.10.2012
comment
Похоже, доступ к камерам осуществляется через программный уровень (VLC), работающий на компьютере (Windows). Могут ли компьютеры с камерами также запускать многоадресную IP-службу на основе UDP, объявляя, что на этом компьютере есть камера, включая ее собственный IP-адрес в широковещательном сообщении? Многоадресная IP-рассылка может выполняться с помощью компонентов Indy UDP, я сделал клиентская часть (полный исходный код) уже есть.   -  person mjn    schedule 14.10.2012
comment
Грубое предположение. Отправьте OPTIONS * RTSP/1.0 и посмотрите, что вернется. Этот запрос не меняет состояние. Вы уже прочитали RFC?   -  person David Heffernan    schedule 14.10.2012
comment
@WarrenP На самом деле это больше похоже на вопрос. Есть ли способ более низкого уровня проверить, является ли чей-то номер телефона мобильным, домашним телефоном или факсом?   -  person Jerry Dodge    schedule 14.10.2012
comment
@DavidHeffernan Только что попробовал, но ничего не получил.   -  person Jerry Dodge    schedule 14.10.2012
comment
Что ж, вы должны получить ответ. Согласно спецификации протокола.   -  person David Heffernan    schedule 14.10.2012
comment
Используя TTcpClient, я успешно подключаюсь к устройству через порт 554, затем при подключении я отправляю OPTIONS * RTSP/1.0, и в событии OnReceive не приходит ответ.   -  person Jerry Dodge    schedule 14.10.2012
comment
Какой трафик идет между клиентом и сервером? Можете ли вы сопоставить что-нибудь с тем, что вы можете прочитать в RFC?   -  person David Heffernan    schedule 14.10.2012
comment
Я читаю здесь folk.uio.no/meccano/reflector/smallclient.html и утверждает, что RTSP-сервер может вообще не отвечать на запрос DESCRIBE, который должен быть первым запросом при подключении RTSP.   -  person Jerry Dodge    schedule 14.10.2012
comment
@Jerry - вы вместе искали zeroconf и RTSP. Похоже, вы хотите, чтобы это была не процедура проверки порта, а процедура обнаружения zeroconf для RTSP.   -  person Warren P    schedule 16.10.2012


Ответы (1)


Не существует надежного способа сканирования сети на наличие доступных потоков RTSP. Вы все еще можете сделать отличный поиск, учитывая следующее:

  1. Для получения наилучших результатов (в отличие от скорости) вам нужно будет выполнить поиск методом грубой силы по доступным адресам, то есть проверить адреса и маски адаптеров, сгенерировать адреса и попробовать один за другим в нескольких потоках (или асинхронных сокетах).
  2. Вам понадобится порт 554 и/или предоставленный пользователем в интерактивном режиме; реальные устройства (сотни моделей) могут использовать разные порты, даже с настройками по умолчанию.
  3. Вы можете поместить более вероятных кандидатов в начало списка IP-адресов, выполнив поиск в сети реальных адресов с помощью UPnP, ZeroConf
  4. Имея в виду конкретных поставщиков/моделей, вы также можете реализовать поиск для конкретных поставщиков, который обычно включает отправку широковещательного сообщения UDP и прослушивание ответа.
  5. OPTIONS Команда RTSP должна быть достаточно хороша для теста, вы можете использовать интерактивный инструмент RTSP, чтобы увидеть, как он работает. В любом случае нет никаких гарантий, поскольку устройства могут потребовать от вас аутентификации.

В любом случае у вас больше всего шансов с OPTIONS получить обратно что-нибудь значимое. DESCRIBE может уже требовать от вас входа в систему, возможно, вам придется пройти аутентификацию даже для OPTIONS. Тем не менее у вас есть ответ RTSP, который предполагает, что там что-то существует.

Connection to 192.168.0.59:554 using TCP

OPTIONS * RTSP/1.0
CSeq: 1

RTSP/1.0 401 Unauthorized
CSeq: 1
Date: Tue, Oct 16 2012 22:22:53 GMT
WWW-Authenticate: Basic realm="RTSP/RTP stream"

Чтобы выполнить успешную команду DESCRIBE и получить значимые результаты, вам необходимо знать URI ресурса на устройстве, что не всегда очевидно. Лучшие поставщики (которые, очевидно, составляют меньшинство) гибко поддерживают входящие запросы, другие предполагают, что клиент знает о конкретных устройствах. Например,

Connection to 192.168.0.59:554 using TCP

OPTIONS * RTSP/1.0
CSeq: 1

RTSP/1.0 200 OK
CSeq: 1
Date: Tue, Oct 16 2012 22:26:54 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

DESCRIBE rtsp://192.168.0.59/ch0_unicast_secondstream RTSP/1.0
CSeq: 2
Accept: application/sdp

RTSP/1.0 200 OK
CSeq: 2
Date: Tue, Oct 16 2012 22:27:22 GMT
Content-Base: rtsp://192.168.0.59/ch0_unicast_secondstream/
Content-Type: application/sdp
Content-Length: 506

v=0
o=- 1350426392586736 1 IN IP4 192.168.0.59
s=Session of second stream
i=Second Codec Stream
t=0 0
a=tool:LIVE555 Streaming Media v2007.08.03
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:Session of second stream
a=x-qt-text-inf:Second Codec Stream
m=video 0 RTP/AVP 26
c=IN IP4 0.0.0.0
a=control:track1
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
a=rtpmap:97 PCMU/16000
a=control:track2
m=metadata 0 RTP/AVP 98
c=IN IP4 0.0.0.0
a=rtpmap:98 METADATA/64000
a=control:track3

DESCRIBE rtsp://192.168.0.59 RTSP/1.0
CSeq: 3
Accept: application/sdp

RTSP/1.0 404 Stream Not Found
CSeq: 3
Date: Tue, Oct 16 2012 22:27:29 GMT

Обратите внимание, что без знания магии ch0_unicast_secondstream вы не получите от устройства ничего толкового.

person Roman R.    schedule 16.10.2012