c行和o行中的%s分别代表什么
扫描二维码
随时随地手机看文章
SDP(Session Description Protocol)的结构
SDP用于描述多媒体会话的详细信息,常用于SIP、WebRTC等协议中。这两行是SDP中的两个关键字段:o行(origin)和c行(connection information)。
o行和c行的具体含义。根据SDP规范
1. o行格式是:o=
username:通常为“-”表示没有用户名。
sess-id:会话标识符,通常是一个数字,比如例子中的20013。
sess-version:会话版本,当会话数据变化时递增,例子中也是20013。
nettype:网络类型,通常是IN(Internet)。
addrtype:地址类型,IPv4或IPv6。
unicast-address:主机的IP地址。
示例o行是:o=-20013 20013 IN IP4 %s,这里的第一个%s应该对应的是unicast-address,即主机的IP地址。
2. c行格式是:c=
nettype:同样为IN。
addrtype:IPv4或IPv6。
connection-address:连接地址,通常是发送媒体的IP地址。
实例的c行是:c=IN IP4 %s,这里的第二个%s应该是媒体流的IP地址。
这两个%s是否分别对应主机IP和媒体IP
有时候,这两个IP可能相同,特别是在设备只有一个IP的情况下。但在某些情况下,比如存在NAT或不同网络接口,这两个IP可能不同。例如,主机可能使用内网IP,而媒体流需要NAT后的公网IP。可能是在构造SDP时,需要动态填入这两个IP地址。可能他们从配置或网络接口获取这些IP,然后格式化到SDP中。
实际应用场景
正在开发一个SIP客户端,需要与FreeSWITCH通信,因此正确设置SDP中的IP地址至关重要,否则媒体流(如音频、视频)可能无法正确传输。如果这两个IP填错了,可能会导致媒体无法建立连接。这两个%s是否代表不同的IP,或者是否有其他参数需要填充。比如,是否有可能第二个%s代表端口或其他信息?根据SDP规范,c行的connection-address通常是IP地址,可能包含端口,但格式通常是IP地址,端口在媒体行的m字段中指定。例如:m=audio 1234 RTP/AVP 0,这里的1234是端口。
o行的第一个%s是origin的unicast-address(主机IP),c行的第二个%s是connection-address(媒体流IP)。用户需要确保这两个IP地址正确,特别是在NAT环境下可能需要使用公网IP或STUN获取的外部地址。
如果是本地测试,可能都用本地IP;如果部署在公网,可能需要配置为公网IP,或者使用动态发现的方法。
常见场景
局域网直连:
localIP := "192.168.1.100"
mediaIP := localIP // 使用同一IP
NAT穿透(公网场景):
localIP := "192.168.1.100" // 内网IP
mediaIP := getPublicIP() // 通过STUN获取公网IP(例如 "203.0.113.5")
服务器中转:
localIP := "192.168.1.100" // 客户端IP
mediaIP := "media.freeswitch.org" // 媒体服务器域名或IP