Как определить, является ли пакет RTP / RTCP? - PullRequest
11 голосов
/ 26 мая 2010

Я использую SharpPCap, который построен на WinPCap для захвата трафика UDP. Моя конечная цель - захватить аудиоданные с H.323 и сохранить эти телефонные разговоры в виде файлов WAV. Но первое - первое - мне нужно выяснить, какие мои UDP-пакеты пересекают сетевую карту.

SharpPCap предоставляет класс UdpPacket, который дает мне доступ к PayloadData сообщения. Но я не уверен, что делать с этими данными. Это массив Byte [], и я не знаю, как определить, является ли он пакетом RTP или RTCP.

Я гуглил эту тему, но там не так много. Любая помощь приветствуется.

Ответы [ 4 ]

5 голосов
/ 11 июля 2010

Посмотрите определения для пакетов RTP и RTCP в RFC 3550 :

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC   |M|     PT      |       sequence number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           timestamp                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           synchronization source (SSRC) identifier            |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|            contributing source (CSRC) identifiers             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Я не буду воспроизводить легенду для всего вышеперечисленного - она ​​довольно длинная - но взгляните на Раздел 5.1 .

Имея это в виду, вы увидите, что вы мало что можете сделать, чтобы определить, содержит ли a пакет RTP / RTCP. Лучше всего было бы понюхать, как предлагали другие авторы, переговоры о медиа потоке. Вторым наилучшим вариантом будет сопоставление шаблонов по последовательности пакетов: первые два бита будут равны 10, затем следующие два бита будут постоянными, затем биты 9–15 будут постоянными, затем 16 -> 31 с увеличением и и так далее.

2 голосов
/ 26 мая 2010

Я бы посмотрел на детекторы пакетов в Wireshark, которые могут декодировать наиболее распространенные доступные протоколы.

0 голосов
/ 12 января 2015

Если обмен данными осуществляется через RTSP, взгляните на порт udp, который был согласован при установке.

порт udp сообщит вам, является ли он RTP или RTCP (также стоит отметить, что RTP обычно выполняется для четных номеров портов и RTCP для нечетных).

наконец, если вы общаетесь через RTSP, вы можете взять список номеров полезных данных из файла SDP из DESCRIBE, а затем проверить тип полезных данных в заголовке RTP, чтобы сообщить кодеку, что вам нужно декодировать полезные данные.

0 голосов
/ 29 мая 2010

Полагаю, вам нужно взглянуть на пакеты SIP, предшествующие пакетам RTP.

На этом сайте Pcap.Net обсуждается .

...