Sip 星号API SDP处理

Sip 星号API SDP处理,sip,asterisk,rtp,sdp,Sip,Asterisk,Rtp,Sdp,我有两个SIP客户端(“A”和“B”)在通用网桥模式下连接到asterisk “A”的视频在“B”上播放,但“B”的视频在“A”上播放而不是。我与wireshark进行了三次检查,确认媒体(音频/视频) 正在到达“A”的ip地址。音频在双方都很好地工作 我最好的猜测是,这个问题与asterisk的内部SDP处理有关 因此,让我们深入研究这个问题 “A”发送以下邀请: INVITE sip:700@192.168.7.227 SIP/2.0 Via: SIP/2.0/UDP 192.168.7

我有两个SIP客户端(“A”和“B”)在通用网桥模式下连接到asterisk

“A”的视频在“B”上播放,但“B”的视频在“A”上播放而不是。我与wireshark进行了三次检查,确认媒体(音频/视频) 正在到达“A”的ip地址。音频在双方都很好地工作

我最好的猜测是,这个问题与asterisk的内部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 
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  
INVITE sip:700@192.168.7.227SIP/2.0
Via:SIP/2.0/UDP 192.168.7.225:10074;分支机构=z9hG4bK-224696310;港口
来自:“danflu portsip”;标签=87652133
致:
联系人:;
呼叫ID:YTc0NDRjNDYtMWRhMS01MzE2LWVlNDEtYmV
CSeq:1354707857邀请
内容类型:应用程序/sdp
内容长度:447
最大前锋:70
授权:Digest username=“danflu portsip”,realm=“asterisk”,nonce=“5ac40c6d”,uri=“sip:700@192.168.7.227,response=“fae8a78ba97 2f6cb0c76846d76f13786”,算法=MD5
用户代理:用于IOS的PortSIP SDK
允许:邀请、确认、取消、选项、再见、参考、通知、消息、注册、订阅、信息
P-首选标识:
支持:100rel
v=0
o=IP4 192.168.7.225中的端口SIP 2013 678901
s=-
c=在IP4 192.168.7.225中
t=0
m=音频20554 RTP/AVP 8 0 97 18
a=时间:20
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:97 SPEEX/8000
a=rtpmap:18 g729/8000
a=fmtp:18附录B=是
a=sendrecv
a=ssrc:258325709 cname:258325709
m=视频29350 RTP/AVP 104
a=rtpmap:104 H264/90000
a=fmtp:104剖面级别id=42801E;打包模式=1
a=sendrecv
a=ssrc:1956389748 cname:1956389748
并从星号接收“200 OK”消息:

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 
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  
SIP/2.0 200正常
Via:SIP/2.0/UDP 192.168.7.225:10010;分支机构=z9hG4bK-282879312接收=192.168.7.225;
rport=10010
来自:“danflu portsip”;标签=539964865
致:;标签=as1b6086b5
呼叫ID:Ote4mjm3nzutmdiznymntm1lwm3mzytogz
CSeq:1074035624邀请
服务器:星号PBX SVN-branch-1.8-r402287M
允许:邀请、确认、取消、选项、再见、参考、订阅、通知、信息、发布
支持:替换、定时器
联系人:
内容类型:应用程序/sdp
内容长度:375
v=0
o=IP4 192.168.7.227中的根826339596 826339596
s=星号PBX SVN-branch-1.8-r402287M
c=在IP4 192.168.7.227中
b=CT:384
t=0
m=音频9540 RTP/AVP 8 0 101
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101电话事件/8000
a=fmtp:101 0-16
a=消声抑制:关闭--
a=时间:20
a=sendrecv
m=视频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,其中有一个函数:

静态int进程\u sdp(结构sip\u pvt*p、结构sip\u请求*req、int t38action)

但我不确定这个SDP处理(删除行等)是由asterisk core还是由sip通道驱动程序执行的


谢谢

星号视频很奇怪。因为星号不能对视频编解码器/流进行转码

只有真正的工作模式-所有视频编解码器均已关闭,所有对等机上仅打开一个编解码器


有关更多信息,请参见

谢谢您的回复。您知道这个SDP“过滤”是由星号“core”执行还是仅由SIP通道驱动程序执行?core对SDP一无所知。没有过滤,只有编解码器。未实现视频转码。已实现首选项,但无法实现工作。重新邀请(在声音开始后开始视频)已实现,但取决于双方的软电话/硬电话。那么,移除SDP线路的是SIP通道驱动程序(chan_SIP.c),对吗?基本上,我需要了解它的内部工作原理,并在那里进行修补。另一种可能是在SIP设备和asterisk之间实现SIP代理,并过滤代理中的所有数据。你还有其他想法、建议吗?谢谢!它可以创建新的邀请。永远不要选择现有的路线。星号不能作为sip代理。如果您需要sip代理,请使用kamailio。