前面大致学习了pjsip的媒体系统和信令系统
现在进入pisua例子程序的学习,因为这个例子程序可能是我改造的对象
这两天又看了看设计模式的书, 感觉pjsip运用的最多的就是抽象接口和工厂模式,了解设计模式对理解代码很有帮助!
一) 命令行指定的配置文件的处理
今天看了一下,命令行代码的解析,对命令行中的配置文件解析函数看了看
原来配置文件的内容就是把命令行参数写到配置文件里面去了
格式还是和命令行参数的格式是一致的, 使用配置文件的好处是不用每次运行程序都输入命令行参数,还可一加入注释
注释有三种方式, 这个完全是python风格的注释:
1) "" 例子: “这是一段说明文字” 类似c语言的/* 这是一段说明文字 */
2) '' 例子: '这是一段说明文字' 类似c语言的/* 这是一段说明文字 */
3) # 例子: #这是一段说明文字 类似c语言的//这是一段说明文字
read_config_file()函数读取配置文件, 解析出的数据将被“连接到”main函数命令行参数的后面
最终将在后续的命令行参数解析代码段中被解析, 程序启动后,你可以在控制台输入菜单命令f,保存一个配置文件
pjsua的命令行参数这里总结好了: https://blog.csdn.net/zoutian007/article/details/7970160?locationNum=4&fps=1
====================
2) 本地SIP账户添加
3)号码簿联系人添加
=== pjsua的app中pjsua_app_cfg_t结构体提供了一个接口on_config_init, 可以在解析命令行参数后,给移植者提供再次“覆盖”配置参数的机会, 所以我把本地SIP账户添加和号码本联系人添加的代码都放在这个接口里面了,以下是代码的例子:
void on_app_config_init(pjsua_app_config *pjsua_app_conf)
{//SET_TRACE_POINT;
UCI_CONFIG uci_conf;
pjsua_acc_config *cur_acc;
pjsua_buddy_config *cur_buddy;
//get_uci_conf(&uci_conf);
if(1){
pjsua_app_conf->auto_answer = 180;//自动应答震铃
pjsua_app_conf->rtp_cfg.port=4000;//媒体接收地址与端口
pjsua_app_conf->udp_cfg.port = 5068;
pjsua_app_conf->cfg.user_agent = pj_str(" pjsip2.7.2 device"); //SIP头部消息中代理名称
//
pj_log_set_level(pjsua_app_conf->log_cfg.level = 0);
pjsua_app_conf->rtp_cfg.bound_addr = pj_str("192.168.200.1");
pjsua_app_conf->udp_cfg.bound_addr = pj_str("192.168.200.1");
//添加账户信息
pjsua_app_conf->acc_cnt = 1;
cur_acc = &pjsua_app_conf->acc_cfg[0];
cur_acc->id = pj_str("'local'<SIP:[email protected]:5068>"); //请求消息中所携带的contact地址的uri
cur_acc->reg_uri = pj_str("'local'<SIP:192.168.200.1:6060>"); //注册消息中的from/to头域中所使用的uri
cur_acc->use_rfc5626 = PJ_FALSE;
cur_acc->register_on_acc_add = PJ_TRUE; //账户添加时即发送注册消息
cur_acc->reg_retry_interval = 60;
//401/407鉴权相关
cur_acc->cred_count = 1;
cur_acc->cred_info[0].username = pj_str("username");
cur_acc->cred_info[0].scheme = pj_str("Digest");
cur_acc->cred_info[0].realm = pj_str("realm.com");
cur_acc->cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
cur_acc->cred_info[0].data = pj_str("password");
//添加电话本//sip:[email protected]:6060 ---------注意下面3种uri的格式都是可用的,建议使用2/3两种格式
pjsua_app_conf->buddy_cnt=3;
cur_buddy = &pjsua_app_conf->buddy_cfg[0];
cur_buddy->uri = pj_str("sip:[email protected]:6060");
cur_buddy = &pjsua_app_conf->buddy_cfg[1];
cur_buddy->uri = pj_str("<sip:[email protected]:6060>");
cur_buddy = &pjsua_app_conf->buddy_cfg[2];
cur_buddy->uri = pj_str("'acc_lable' <sip:[email protected]:6060>");
}
//release_uci_conf(&uci_conf);
}