经过几天的测试,我终于明白了它的工作原理。我希望它能帮助我从网站打WebRTC电话。
情况:
下面是pjsip "webrtc“配置(就目前而言):
[webrtc]
type=endpoint
transport=transport-udp
context=webrtc
disallow=all
allow=alaw
allow=ulaw
dtls_cert_file=/etc/letsencrypt/live/example.org/fullchain.pem
dtls_private_key=/etc/letsencrypt/live/example.org/privkey.pem
auth=webrtc
aors=webrtc
use_avpf=yes
direct_media=no
[webrtc]
type=aor
contact=sip:webrtc@example.org:5060
max_contacts=1000
outbound_proxy=sip:example.org
[webrtc]
type=auth
auth_type=userpass
username=webrtc
password=psswd
realm=example.org当我打电话时,问题就会发生:
[Sep 1 17:50:37] ERROR[7760] pjproject: sip_endpoint.c Error processing packet from 127.0.0.1:57928: Rx buffer overflow (PJSIP_ERXOVERFLOW) [code 171062]:
INVITE sip:1@example.org SIP/2.0
Via: SIP/2.0/WSS df7jal23ls0d.invalid;branch=z9hG4bKX7Ng7L0OKRBkpUqGlHPV4GfxO0I7d93i;rport
From: <sip:webrtc@example.org>;tag=ypLlm1BDxPkn8aTTkVJL
To: <sip:1@example.org>
Contact: <sips:webrtc@df7jal23ls0d.invalid;rtcweb-breaker=no;click2call=no;transport=wss>;+g.oma.sip-im;language="en,fr"
Call-ID: 30f526f4-3c4f-e96f-391d-39290b9dc983
CSeq: 60845 INVITE
Content-Type: application/sdp
Content-Length: 3621
Max-Forwards: 70
User-Agent: IM-client/OMA1.0 sipML5-v1.2016.03.04
Organization: Doubango Telecom
v=0
o=- 8456797239022316000 2 IN IP4 127.0.0.1
s=Doubango Telecom - chrome
t=0 0
a=group:BUNDLE audio
a=msid-semantic: WMS gVGmhQ6UmwynNn99UhRNBJJjcV5AqYkpNF3M
m=audio 47942 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
c=IN IP4 ...
...
a=ice-ufrag:B0dVeWHjfVOT/n0s
a=ice-pwd:BP5DshTjqBa4CqBiZSb8ZpNp
a=fingerprint:sha-256 5B:41:25:27:9E:AD:F2:E9:F2:0A:D6:26:CF:FA:5A:C7:F3:7B:B6:35:32:9A:CF:04:35:2B:07:DB:A1:8F:2E:FD
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtp为什么会这样?任务很简单:只需对最简单的星号扩展(Playback(demo-congrats))进行webrtc调用即可
PS:我用Nginx代理/ws,这就是为什么在Error processing packet from 127.0.0.1:57928中它是127.0.0.1。
解决方案:
vim third-party/pjproject/patches/config_site.h
/* #define PJSIP_MAX_PKT_LEN 6000 */
#define PJ_ICE_MAX_CAND 32
#define PJ_ICE_MAX_CHECKS (PJ_ICE_MAX_CAND * 16)
#define PJSIP_MAX_PKT_LEN 12288
./configure --with-pjproject-bundled
make
make install发布于 2016-09-02 04:40:35
pjsip的最大数据包大小可以被WebRTC SDPs超过。您可以通过以下步骤来修复:
config_site.h下查找(或创建) include/pj/#define PJSIP_MAX_PKT_LEN 12288。文件的完整示例可能如下所示:
如果__PJ_CONFIG_SITE_H__ #定义__PJ_CONFIG_SITE_H__ #定义PJ_ICE_MAX_CAND 32 #定义PJ_ICE_MAX_CHECKS (PJ_ICE_MAX_CAND * 16) #定义PJSIP_MAX_PKT_LEN 12288 #endif /* __PJ_CONFIG_SITE_H__ */
注意:我还为WebRTC设置了一些其他合理的设置,以确保您不会对您的冰候选人设置限制。https://stackoverflow.com/questions/39275328
复制相似问题