Я использую SharpPCap, который основан на WinPCap для получения трафика UDP. Моя конечная цель должна получить аудиоданные от H.323 и сохранить те телефонные разговоры как файлы WAV. Но первая вещь является первой - я должен выяснить то, что мои пакеты UDP пересекают NIC.
SharpPCap обеспечивает класс UdpPacket, который предоставляет мне доступ к PayloadData сообщения. Но я не уверен, что делает с этими данными. Это - Байт [] массив, и я не знаю, как пойти об определении, если это - пакет RTCP или RTP.
Я Погуглил эту тему, но нет очень там. Любая справка ценится.
Посмотрите на определения пакетов 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.
С его помощью вы увидите, что не так уж много можно сделать, чтобы определить, содержит ли пакет RTP/RTCP. Лучше всего, как уже предлагалось другими пользователями, пронюхать переговоры медиапотока. Вторым лучшим вариантом будет некое сопоставление шаблонов в последовательности пакетов: первые два бита будут равны 10, затем следующие два бита будут постоянными, затем биты с 9 по 15 будут постоянными, затем 16 -> 31 будут увеличиваться, и так далее.
Я бы посмотрел на детекторы пакетов в Wireshark, которые могут декодировать большинство распространенных протоколов.
Я считаю, что вам нужно посмотреть на пакеты SIP, которые идут до пакетов RTP.
На сайте Pcap.Net есть обсуждение этого вопроса.