ОС: LINUX (как Redhat Enterprise, так и Ubuntu LTS)
В настоящее время я работаю с Gstreamer Pipeline для многоадресной передачи видеоданных различным клиентам. Мой конвейер выглядит следующим образом. rtspsrc location=rtsp://<ip>:<port>/<location>.sdp latency=0 ! udpsink host=225.1.1.1 auto-multicast=true port=5678 sync=false async=false
, Как можно видеть, у меня есть многоадресная группа 225.1.1.1 и порт 5678. Учитывая эту информацию, можно ли получить список текущих подключенных / активных клиентов (IP-адреса и другие атрибуты), если таковые имеются, через (1) Gstreamer API (2) Berkeley Unix Sockets в C / C ++?
Думайте об этом как о мини-инструменте сниффинга (не так сложном, как tshark, ngrep, pcap и т. Д.). Я мог бы использовать комбинацию скриптов bash / Python и tshark с некоторыми фильтрами. Но я предпочитаю код на C ++, если это возможно (без полномочий root было бы здорово!).
В типичном RTSP
Потоковый сценарий, клиент будет вызывать SETUP
команда до PLAY
в котором тип данных и клиентские порты доступны. SETUP
обычно вызывается после DESCRIBE
Ответ получен, т. е. клиент знает свойства источника и приступает к настройке соединения. Таким образом, SETUP может быть хорошим местом, чтобы узнать больше о клиентах.
API / протокол GStreamer Pipeline может предоставить способ: UDP многоадресная рассылка сама по себе этого не делает. Все, что вы можете знать, это то, есть ли какие-либо клиенты или нет, и вы должны написать некоторый необработанный код сокетов для этого (протокол IGMP).