Материал статьи взят из моего дзен-канал .
Структура пакета RTP
В прошлом статья мы используем ТШарк захваченные пакеты RTP, которыми обмениваются наш приемник и передатчик.Ну а в этом мы раскрасим элементы упаковки в разные цвета и поговорим об их назначении.
Давайте посмотрим на тот же пакет, но с тонированными полями и пояснительными надписями:
Внизу списка расположены байты, составляющие пакет RTP, который, в свою очередь, является полезной нагрузкой пакета UDP (его заголовок обведен черным).
Цветной фон обозначает байты заголовка RTP, а зеленый — блок данных, содержащий полезную нагрузку пакета RTP. Данные там представлены в шестнадцатеричном формате.
В нашем случае это аудиосигнал, сжатый по закону u (mu-law), т.е.
размер одной выборки составляет 1 байт. Поскольку мы использовали частоту дискретизации по умолчанию (8000 Гц), при частоте пакетов 50 Гц каждый пакет RTP должен содержать 160 байт полезной нагрузки.
Мы увидим это, посчитав байты в зеленой области, строк должно быть 10. По стандарту объем данных в полезной нагрузке должен быть кратен четырем, то есть должен содержать целое число четырехбайтовых слов.
Если случилось так, что ваша полезная нагрузка не подчиняется этому правилу, то вам нужно добавить в конец полезной нагрузки байты с нулевыми значениями и установить бит Padding. Этот бит расположен в первом байте заголовка RTP и окрашен в бирюзовый цвет. Обратите внимание, что все байты полезной нагрузки имеют значение 0xFF — так выглядит тишина в формате u-law. Заголовок пакета RTP состоит из 12 обязательных байт, но в двух случаях он может быть длиннее:
- Когда пакет несет аудиосигнал, полученный путем смешивания сигналов от нескольких источников (потоков RTP), то после первых 12 байт заголовка идет таблица со списком идентификаторов источников, полезные данные которых использовались для создания полезных данных этого пакета.
В этом случае в младших четырех битах первого байта заголовка (поле Количество идентификаторов источников, вносящих вклад ) указано количество источников.
Размер поля составляет 4 бита, поэтому таблица может содержать до 15 идентификаторов источника.
Каждый из которых занимает 4 байта.
Эта таблица используется при организации конференц-связи.
- Когда заголовок имеет расширение.
В этом случае устанавливается бит в первом байте заголовка.
Икс .
В расширенном заголовке после таблицы участников (если они есть) идет однословный заголовок расширения, за которым следуют слова расширения.
Расширение — это набор байтов, который можно использовать для передачи дополнительных данных.
Стандарт не определяет формат этих данных — это может быть что угодно.
Например, это могут быть какие-то дополнительные настройки устройства, принимающего RTP-пакеты.
Однако для некоторых приложений были разработаны стандарты расширенных заголовков.
Это делается, например, для оборудования связи в стандарте ED-137 (Стандарты совместимости для компонентов VoIP ATM) .
Ниже приведена каноничная картинка со структурой RTP-заголовка, перед которой я тоже не удержался и раскрасил в такие же цвета.
ВЕР — номер версии протокола (текущая версия 2); п — флаг, который устанавливается в случаях, когда пакет RTP дополняется пустыми байтами в конце; Икс — флаг того, что заголовок расширен; СС — содержит количество идентификаторов CSRC, следующих за постоянным заголовком (после слов 1.3), таблица на рисунке не показана; М — маркер начала кадра или наличия речи в канале (если используется детектор речевой паузы).
Если приемник не содержит детектора речевой паузы, то этот бит должен быть установлен постоянно; ТИП — указывает формат полезной нагрузки; Порядковый номер — номер пакета, используемый для восстановления порядка воспроизведения пакетов, поскольку реальная ситуация такова, что пакеты могут дойти до получателя в другом порядке, чем в том, в котором они были отправлены.
Начальное значение должно быть случайным; это сделано для того, чтобы в случае использования шифрования потока RTP его было сложно взломать.
Это поле также позволяет обнаруживать потери пакетов; Временная метка — отметка времени.
Время измеряется в отсчетах сигнала, т.е.
если пакет содержит 160 отсчетов, то временная метка следующего пакета будет больше на 160. Начальное значение временной метки должно быть случайным; ССРК — идентификатор источника пакета, он должен быть уникальным.
Лучше сгенерировать его случайным образом перед запуском потока RTP. Если вы разрабатываете собственный передатчик или приемник пакетов RTP, вам придется просматривать ваши пакеты не один раз, чтобы повысить производительность.
Я рекомендую вам освоить использование фильтрации пакетов в TShark, она позволяет перехватывать только те пакеты, которые имеют интерес для вас.
В условиях, когда в сети работают десятки RTP-устройств, это очень ценно.
В командной строке TShark параметры фильтрации указываются с помощью опции «-f».
Мы использовали эту опцию, когда хотели перехватывать пакеты с порта 8010: -f "udp port 8010"
Параметры фильтрации — это, по сути, набор критериев, которым должен соответствовать «перехваченный» пакет. Условие может проверять адрес, порт или значение определенного байта в пакете.
Условия можно объединять с помощью логических операций «И», «ИЛИ» и т. д. Очень мощный инструмент. Если вы хотите просматривать динамику изменения полей в пакетном режиме, вам необходимо будет продублировать вывод. ТШарк в файл, как было показано в предыдущей статье, используя передачу вывода ТШарк на входе тройник .
Затем откройте файл журнала, используя меньше, vim или другой инструмент, способный быстро работать с огромными текстовыми файлами и искать строки, можно узнать все нюансы поведения полей пакетов в RTP-потоке.
Если вам необходимо прослушать сигнал, передаваемый потоком RTP, то вам необходимо использовать версию ТШарк с визуальным интерфейсом Вайршарк .
Несложными манипуляциями с мышкой можно прослушать и увидеть осциллограмму сигнала.
Но при одном условии - если он закодирован в формате u-law или a-low. В следующий статья Мы сделаем с вами дуплексный домофон.
Запаситесь парой гарнитур и одним собеседником.
Теги: #*nix #программирование #открытый исходный код #C++ #voip #voip #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer #mediastreamer #mediastreamer
-
Scribd.com Стал Жадным
19 Oct, 24 -
Фсб Готова Закрыть Wikileaks
19 Oct, 24 -
Исправление Интернета. Часть 1
19 Oct, 24 -
В Поисках Идеальной Ос...
19 Oct, 24