Pregunta

Estoy utilizando SharpPCap que se construye en WinPCap a capturar tráfico UDP. Mi objetivo final es capturar los datos de audio de H.323 y salvar a esas conversaciones telefónicas como archivos WAV. Pero primero es lo primero - que tiene que averiguar lo que mis paquetes UDP están cruzando la NIC.

SharpPCap proporciona una clase UdpPacket que me da acceso a la PayloadData del mensaje. Pero estoy seguro de qué hacer con estos datos. Es una matriz Byte [] y no sé cómo hacer para determinar si se trata de un paquete RTP o RTCP.

He buscado en Google este tema, pero no hay mucho por ahí. Cualquier ayuda es apreciada.

¿Fue útil?

Solución

Look en las definiciones de RTP y RTCP paquetes en 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             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

No se reproducirá la leyenda de todo lo anterior - es bastante larga - pero echar un vistazo a Sección 5.1 .

Con eso en la mano verá que no hay mucho que se puede hacer para determinar si a paquete contiene RTP / RTCP. Lo mejor de todo sería la de aspiración, como otros críticos han sugerido, los medios de la corriente de negociación. Segundo mejor habría algún juego sort've patrón sobre una secuencia de paquetes: los dos primeros bits serán 10, seguido por los dos bits próximo es constante, seguido por los bits 9 a 15 siendo constante, entonces 16 -> 31 incrementando, y así sucesivamente.

Otros consejos

Me gustaría ver los detectores de paquetes en Wireshark, que puede decodificar los protocolos más comunes disponibles.

Creo que hay que buscar en los paquetes SIP que se presentan ante los paquetes RTP.

Hay una discusión sobre este tema en Pcap.Net sitio .

Si communucations se realizan sobre RTSP, echar un vistazo en el puerto UDP que se negocia durante la configuración.

El puerto UDP le dirá si es RTP o RTCP (también digno de mención que RTP se hace generalmente a través de los números de puerto RTCP pares y en impar).

Por último, si usted se está comunicando a través de RTSP se puede tomar la lista de números de carga útil desde el archivo SDP de la describen y compruebe el tipo de carga útil en la cabecera RTP para decirle al códec que necesita para descifrar la carga útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top