Сначала я попытаюсь объяснить, что именно я хочу сделать:
У меня есть IP-камера, в которой есть круговой буфер, из которого я хочу прочитать данные.Связь между камерой и моим приложением происходит по протоколу RTSP, что означает, что у меня есть TCP-соединение с камерой.Сама камера способна передавать данные по RTP.
Теперь важная часть заключается в том, что, когда камера начинает потоковую передачу, мое приложение должно НЕ считывать данные.В сети есть какой-то пассивный регистратор данных, который отвечает за запись данных.
Проблема в том, что, пока камера выполняет потоковую передачу, гнездо из моего приложения нужно открывать, иначе камерапрекратит потоковую передачу.
Итак, давайте посмотрим, что у меня пока есть:
Я открываю сокет, который подключается к камере и затем отправляет необходимые команды RTSP OPTIONS
, DESCRIBE
,SETUP
, а затем PLAY
.После этого мое гнездо остается открытым, и камера транслируется.
Теперь вот сложная часть:
Как я уже сказал, я не могу проанализировать все данные UDP.Но как я могу определить, когда закончился поток?На wireshark я вижу, что, когда поток заканчивается, я получаю сообщение RTCP
, которое говорит: Sender Report Goodbye
.
Это точка, где я хотел бы закрыть свое гнездо, но как я могу определить, что камера имеетзакончил без разбора каких-либо данных UDP?