Анализатор rtp, написанный на C++ в среде linux

Мне нужно написать (C++, linux) rtp анализатор, например:http://mmlab.disi.unitn.it/wiki/index.php/Analyzer. Но я не могу понять некоторые технические моменты, такие как то, как сервер, который получает udp-дейтаграммы, определяет, что одна udp-дейтаграмма закончилась, а другая udp-дейтаграмма запущена, и как он идентифицирует udp-дейтаграммы, содержащие rtp. Было бы здорово увидеть код анализатора, но я его не нашел. Не могли бы вы помочь мне найти ответы на мои вопросы (интересно узнать, как это можно реализовать через сокеты). Большое спасибо, я буду очень признателен!

1 ответ

Если я правильно понимаю ваш вопрос, вы можете выполнить следующие действия:

  • Напишите серверную программу на C++, используя одну из библиотек сокетов, и создайте сокет UDP.
  • Прослушайте порт, на который ваш клиент отправляет пакеты RTP.
  • Пока вы слушаете указанный порт UDP, вы будете получать пакеты UDP один за другим.
  • Когда вы получаете пакет UDP, анализируйте поле длины, которое является 2-байтовым полем и начинается с 4-го байта.
  • Длина - 8 (размер заголовка UDP в байтах) - это то, что вы ищете, и фактически размер пакета RTP.
  • Получите RTP-пакет, получив биты между 8-м байтом UDP-пакета и его длину.
  • Затем у вас есть RTP-пакет, вы также можете проанализировать его таким же образом, посмотрев, как он выглядит в RFC3550 от IETF.

(Также полезно указать, что UDP-пакеты могут поступать не по порядку, и вы можете использовать поле порядкового номера в заголовке RTP, чтобы изменить их порядок)

Другие вопросы по тегам