使用PJSIP库的C++应用呼叫报错PJ_ETOOMANY(status=70010)求助
解决PJSIP发起多路呼叫时的PJ_ETOOMANY错误(70010)
错误原因
PJ_ETOOMANY(状态码70010)的核心原因是PJSIP默认配置中,允许同时存在的呼叫(call)对象最大数量被限制为4,当发起第5路及以上呼叫时就会触发这个限制报错。
解决步骤
1. 修改呼叫实例最大数量限制
在初始化PJSIP端点(endpoint)前,调整pjsip_endpoint_cfg结构体中的max_calls参数,设置为你需要的最大呼叫数:
pjsip_endpoint_cfg ep_cfg; pjsip_endpoint_cfg_default(&ep_cfg); // 按需设置最大呼叫数,例如调整为10 ep_cfg.max_calls = 10; // 使用修改后的配置初始化端点 pjsip_endpoint_create(&ep_cfg, &g_endpoint);
2. 检查并调整内存池配置
每个呼叫实例需要占用内存池资源,若内存池容量不足,也可能间接触发类似限制。初始化全局内存池时可调整其容量:
pj_caching_pool cp; pj_pool_factory_init(&cp.factory, NULL); // 增大内存池最大容量,例如设置为1MB cp.factory.max_capacity = 1024 * 1024;
3. 验证媒体会话限制(可选)
如果调整呼叫数后仍报错,需检查媒体会话的最大限制参数max_media_sessions,每个呼叫通常对应一个媒体会话,可同步调整:
ep_cfg.max_media_sessions = ep_cfg.max_calls; // 保持和最大呼叫数一致
注意事项
- 参数设置需结合系统实际资源(内存、CPU),避免过度配置导致资源耗尽;
- 不同PJSIP版本的参数名称或配置位置可能略有差异,请以你使用版本的代码文档为准。
内容的提问来源于stack exchange,提问作者Kotappa Gandudi
相关产品推荐
相关产品推荐

