在pjsua2中设置来电显示号码需要以下步骤:
- 创建一个继承自
MyCall
的自定义呼叫类:
class MyCall : public Call {
public:
// 构造函数
MyCall(Account &acc, int call_id = PJSUA_INVALID_ID)
: Call(acc, call_id) {}
// 处理来电事件
virtual void onIncomingCall(OnIncomingCallParam ¶m) {
CallInfo ci = getInfo();
// 设置来电显示号码
ci.remote_info = "1234567890";
// 更新呼叫信息
this->setInfo(ci);
// 调用基类的处理方法
Call::onIncomingCall(param);
}
};
- 在
Account
类中重写onIncomingCall
方法,创建自定义的呼叫类对象:
class MyAccount : public Account {
public:
// 构造函数
MyAccount() {}
// 处理来电事件
virtual void onIncomingCall(OnIncomingCallParam ¶m) {
// 创建自定义的呼叫类对象
MyCall *call = new MyCall(*this, param.callId);
// 应答来电
CallOpParam callParam;
callParam.statusCode = PJSIP_SC_OK;
call->answer(callParam);
}
};
- 在主函数中创建自定义的账户类对象,并初始化pjsua2库:
int main() {
// 初始化pjsua2
Endpoint ep;
ep.libCreate();
// 创建自定义的账户类对象
MyAccount acc;
// 添加SIP账户
AccountConfig cfg;
cfg.idUri = "sip:your_username@sip.example.com";
cfg.regConfig.registrarUri = "sip:sip.example.com";
cfg.sipConfig.authCreds.push_back(AuthCredInfo("digest", "*", "your_username", 0, "your_password"));
acc.create(cfg);
// 启动pjsua2
ep.libStart();
// 进入事件循环
ep.libHandleEvents(0);
// 销毁pjsua2
ep.libDestroy();
return 0;
}
在上述代码中,我们通过重写MyCall
类中的onIncomingCall
方法,在接收到来电事件时设置了来电显示号码为"1234567890"。然后在MyAccount
类中重写了onIncomingCall
方法,创建了自定义的呼叫类对象,并通过调用answer
方法应答来电。最后,在主函数中初始化pjsua2库,创建自定义的账户类对象,并进入事件循环以处理来电事件。