首页 > 代码库 > 终极方法,pjsip发起多方对讲出错Too many objects of the specified type (PJ_ETOOMANY)

终极方法,pjsip发起多方对讲出错Too many objects of the specified type (PJ_ETOOMANY)

http://blog.csdn.net/zhangjm_123/article/details/26727221

——————————————————————————————————————————————————————————————————————————————

Pjsip提供发起多方对讲功能,允许开发者通过setMaxCalls(int calls)方法设定要发起多少方对讲,最多不能超过32方。但也许很多人发现最多只能设置4方对讲,即使设置了10方对讲 setMaxCalls(10)也不起作用。原因是在我们编译pjsip的时候,pjsip官方在提供给我们的pjproject源代码中做了限制(可能 是其它原因吧),其中一个很重要的常量PJSUA_MAX_CALLS被设成了4,即最大呼叫数量为4. 

我们只要修改一下pjproject\pjlib\include\pj\config_site_sample.h和pjproject\pjsip\src\pjsua-lib\pjsua_core.c源文件中的几行代码即可。


其中config_site_sample.h中这行代码中的4就是限定了发起多方对讲的最大值,所以只要把这个4改成你想要的值就行了。但最好不要超过32,官方文档是这样规定的,最好按照要求去做,否则可能会出现一些意想不到的错误。
 
  1. #define PJSUA_MAX_CALLS     4  
在上面的config_site_sample.h源文件中出现多处#define PJSUA_MAX_CALLS   4 ,这可能是和不同的平台有关,反正如果你的程序不涉及到不同平台需要限定发起多方对讲的最大值的话,全部都设成同一个值就行了。如:设置最大发起对讲为16方,#define PJSUA_MAX_CALLS   16。


另外,还需要修改一下pjsua_core.c文件:

 
  1. cfg->max_calls = ((PJSUA_MAX_CALLS) < 4) ? (PJSUA_MAX_CALLS) : 4;  
把4改为你想要设定的值,如:cfg->max_calls = ((PJSUA_MAX_CALLS) < 16) ? (PJSUA_MAX_CALLS) : 16;

改完这两个文件之后,保存,重新编译一次pjsip。编译完成之后,setMaxCalls(int calls)方法就起作用了,但int calls传过去的参数不能大于你设定的最大值。

终极方法,pjsip发起多方对讲出错Too many objects of the specified type (PJ_ETOOMANY)