pjsua REGISTER发送的CALL ID中有空格,怎么清除
时间: 2024-10-09 10:05:45 浏览: 45
在PJSUA中,当你发送REGISTER请求时,CALL ID通常应该是一个由数字、字母组成并且不包含特殊字符(包括空格)的字符串。如果你发现CALL ID中含有空格或其他非标准字符,这可能是由于你在配置过程中输入了无效的值或者是自动填充了不符合规范的内容。
为了避免这个问题,你应该确保在配置CALL ID时只使用ASCII字符,并且遵循RFC 3261中关于CALL ID的规定。这里提供一种修改CALL ID格式的方式:
1. 在设置CALL ID时,先删除可能存在的空格或者其他非数字、字母的字符。例如,在构建User-Agent头中,你可以手动构造CALL ID:
```cpp
const char* call_id = "my_custom_call_id";
pj_str_t user_agent;
user_agent = pj_str("SIP/2.0/PJSUA; User-Agent=" PJ_GET_VERSION_STRING " Call-ID: " call_id);
```
2. 如果你使用的是自定义的CALL ID生成函数,确保它返回的字符串不包含空格。
3. 使用`pjmedia_endpt_set_call_id()`函数来设置CALL ID,确保传入的是清理过的字符串:
```cpp
pj_status_t status = pjmedia_endpt_set_call_id(endpt, call_id, sizeof(call_id));
```
务必检查并确认生成的CALL ID满足所有SIP和PJSUA的要求,因为不正确的CALL ID可能会导致注册失败或连接问题。
阅读全文