首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >星号13.10 + pjsip + WebRTC - Rx缓冲区溢出(PJSIP_ERXOVERFLOW)

星号13.10 + pjsip + WebRTC - Rx缓冲区溢出(PJSIP_ERXOVERFLOW)
EN

Stack Overflow用户
提问于 2016-09-01 15:16:34
回答 1查看 2.5K关注 0票数 3

经过几天的测试,我终于明白了它的工作原理。我希望它能帮助我从网站打WebRTC电话。

情况:

  • 我可以用星号打电话和接电话。
  • 对于WebRTC,我尝试了sipml5、Sip.js、JsSIP (目前正在使用sipml5)。
  • sipml5连接到我的服务器(有“连接”)

下面是pjsip "webrtc“配置(就目前而言):

代码语言:javascript
复制
[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

当我打电话时,问题就会发生:

代码语言:javascript
复制
[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。

解决方案:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-02 04:40:35

pjsip的最大数据包大小可以被WebRTC SDPs超过。您可以通过以下步骤来修复:

  1. 在pjsip源代码发行版中在config_site.h下查找(或创建) include/pj/
  2. 添加(或设置)以下定义以增加最大消息大小:#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设置了一些其他合理的设置,以确保您不会对您的冰候选人设置限制。
  3. 重新编译pjsip
  4. 重新编译星号
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39275328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档