Ошибка сокета с RTP-пакетами - PullRequest
0 голосов
/ 25 ноября 2010

Я пытаюсь построить анализатор метрик RTP-пакетов в C, но я столкнулся со странной проблемой, я сокращаю детали реализации для простоты раскрытия:

Поскольку пакеты RTP содержатся в UDP, мой сокет инициализируется со следующими параметрами:

sock_domain = AF_INET;
sock_type = SOCK_DGRAM;
sock_proto = IPPROTO_UDP;

и связан с этими параметрами:

socket_addr.sin_family = AF_INET;
socket_addr.sin_port = 10000; // My server is streaming on 10000
socket_addr.sin_addr.s_addr = INADDR_ANY;

и присоединился к многоадресной группе:

mgroup_req.imr_multiaddr.s_addr = inet_addr("224.1.0.1"); // Multicast group of the stream
mgroup_req.imr_interface.s_addr = INADDR_ANY;

установить группу многоадресной рассылки, из которой я получаю:

mgroup_addr.sin_family = socket_addr.sin_family;
mgroup_addr.sin_port = socket_addr.sin_port;
mgroup_addr.sin_addr.s_addr = mgroup_req.imr_multiaddr.s_addr;

получение пакетов с функцией recvfrom:

errcode = recvfrom(sockfd, &recvbuff, IPMAXSIZE, 0, (struct sockaddr *)&mgroup_addr, &mgroup_addr_len)

Что-то идет не так, хотя я могу получать стандартные пакеты UDP, адресованные многоадресной группе 224.1.0.1, пакеты RTP не принимаются в первый раз, но их повторная отправка делает свое дело.

Сценарий 1:

Я отправляю n UDP-пакеты: они правильно получены

Сценарий 2:

Я отправляю n RTP-пакетов: ничего не происходит

Я снова отправляю те же n RTP-пакеты: они правильно получены

Какое бы количество n пакетов не было ... так странно, но это правда.

редактирование: На стороне анализатора я запускаю анализатор, который показывает оба пакета, поэтому сообщения поступают на сторону анализатора, это не проблема, связанная с отправителем.

Вопрос:

код точно такой же (читай: тот же исполняемый файл) для сценария RTP И сценария UDP. Что я делаю не так?

Примечания:

RTP-библиотеки управления или высокоуровневые RTP-библиотеки - нет-нет, я ДОЛЖЕН работать на этом уровне абстракции из-за метрик, которые мне нужно проанализировать.

Кроме того, анализатор сетевых показателей запрещен, я ДОЛЖЕН сделать это с помощью своего собственного кода.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2010

Проблема была связана с платой, на которой я работал, она была установлена ​​(не мой код) для перенаправления пакетов RTP непосредственно в декодер MPEG. Оказывается, что пакеты в декодере не должны пересылаться в ядро. Еще нужно понять, почему двойная отправка работала.

0 голосов
/ 26 ноября 2010

Я не уверен, что вам нужно снова назвать адрес группы mcast в качестве адреса recvfrom, поскольку вы уже присоединились к группе. Является ли получение пакетов из других мест подлинной проблемой? Я бы просто использовал recv ().

...