Анализатор 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, чтобы изменить их порядок)