我有两个SIP客户端("A"和"B")在通用网桥模式下连接到星号。
"A"的视频在"B"上播放,但"B"的视频不在"A"上播放。我用wireshark三重检查媒体(音频/视频)到达"A"的 IP 地址。音频在两端都运行良好。
我最好的猜测是这个问题与星号的内部SDP处理有关。
因此,让我们深入研究这个问题。
"A"发送以下邀请:
INVITE sip:700@192.168.7.227 SIP/2.0
Via: SIP/2.0/UDP 192.168.7.225:10074;branch=z9hG4bK-224696310;rport
From: "danflu-portsip"<sip:danflu-portsip@192.168.7.227>;tag=87652133
To: <sip:700@192.168.7.227>
Contact: <sip:danflu-portsip@192.168.7.225:10074;transport=udp>;
Call-ID: YTc0NDRjNDYtMWRhMS01MzE2LWVlNDEtYmV
CSeq: 1354707857 INVITE
Content-Type: application/sdp
Content-Length: 447
Max-Forwards: 70
Authorization: Digest username="danflu-portsip",realm="asterisk",nonce="5ac40c6d",uri="sip:700@192.168.7.227",response="fae8a78ba97 2f6cb0c76846d76f13786",algorithm=MD5
User-Agent: PortSIP SDK for IOS
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, REGISTER, SUBSCRIBE, INFO
P-Preferred-Identity: <sip:danflu-portsip@192.168.7.227>
Supported: 100rel
v=0
o=portsip 2013 678901 IN IP4 192.168.7.225
s=-
c=IN IP4 192.168.7.225
t=0 0
m=audio 20554 RTP/AVP 8 0 97 18
a=ptime:20
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:97 SPEEX/8000
a=rtpmap:18 g729/8000
a=fmtp:18 annexb=yes
a=sendrecv
a=ssrc:258325709 cname:258325709
m=video 29350 RTP/AVP 104
a=rtpmap:104 H264/90000
a=fmtp:104 profile-level-id=42801E; packetization-mode=1
a=sendrecv
a=ssrc:1956389748 cname:1956389748
并收到来自Asterisk的"200 OK"消息:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.7.225:10010;branch=z9hG4bK-282879312 received=192.168.7.225;
rport=10010
From: "danflu-portsip"<sip:danflu-portsip@192.168.7.227>;tag=539964865
To: <sip:9993@192.168.7.227>;tag=as1b6086b5
Call-ID: OTE4MjM3NzUtMDIzNy1mNTM1LWM3MzYtOGZ
CSeq: 1074035624 INVITE
Server: Asterisk PBX SVN-branch-1.8-r402287M
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Contact: <sip:9993@192.168.7.227:5060>
Content-Type: application/sdp
Content-Length: 375
v=0
o=root 826339596 826339596 IN IP4 192.168.7.227
s=Asterisk PBX SVN-branch-1.8-r402287M
c=IN IP4 192.168.7.227
b=CT:384
t=0 0
m=audio 9540 RTP/AVP 8 0 101
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
m=video 7450 RTP/AVP 104
a=rtpmap:104 H264/90000
a=sendrecv
请注意,这些行:
a=fmtp:104 配置文件级别 id=42801E;数据包化模式=1
和
a=ssrc:1956389748 cname:1956389748
只是在响应中消失了,我真的认为这就是视频不起作用的原因。
所以,我的问题:
我可以使用什么API来自定义此行为,以便在Asterisk从两端处理SDP时不会删除上述行?如果没有官方的 API,我可以在哪里查看代码?所以我也许可以为我的具体情况写一个补丁?
我查看了chan_sip.c,有一个函数:
static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action)
但我不确定这种 SDP 处理(删除行等)是由星号核心还是由 sip 通道驱动程序执行的。
谢谢
星号视频是非常奇怪的事情。因为星号不对视频编解码器/流进行转码。
只有真正的工作模式 - 所有视频编解码器都关闭,所有对等体上只有一个编解码器打开。
有关更多信息,请参阅 voip-info.org 上的星号视频