rtp协议的一些问题。
rtp是通过udp承载的,怎么养判断 udp承载的数据是rtp的?
[解决办法]
RTP定义在RFC1889中,每个RTP信息包被封装在UDP消息段中,然后再封装在IP数据包中。
其中RTP信息包标题域包含:
Payload Type Field,Sequence Number Field,Timestamp Field 和 Synchronization Source Identifier Field 等,具体可以参考RFC1889
根据这些值,可以判断出UDP消息段是否为RTP消息。
[解决办法]
以下讨论基于使用SIP+RTP的情况:
通信双方在发RTP包前,先会发SIP INVITE消息,
这个INVITE消息里面一般会在数据尾部加上SDP(Session Description Protocol)信息,
INVITE消息用来描述会话的主叫者,被叫者,callid, 时间戳等等,
而SDP用来描述或约定owner,用来传送音频的RTP端口号,用来传送视频的RTP端口号,支持的媒体类型等等。
可见,只要通过SIP INVITE消息中的SDP信息, 就可以确定双方约定好的下面将要开始传送RTP报文的端口号了。
打个比方, 如果发送INVITE消息的源IP为aaa, 目的IP为bbb, owner地址为ccc, 音频RTP端口是pa, 视频RTP端口是pv,
那么接下来你应该对UDP报文进行过滤了,
如果符合:
源IP=ccc, 目的IP=bbb, UDP源端口=pa/pv, 那么, 那就是你要的RTP报文了。
说的可能不太清楚,你可以结合 wireshark来分析的,它的statistic菜单中有VoIP和RTP的分析,很不错。