typedef struct pjmedia_sdp_rtcp_attr { unsigned port; pj_str_t net_type; pj_str_t addr_type; pj_str_t addr; } pjmedia_sdp_rtcp_attr;这是初始化的rtcp属性,我想让他在sdp属性中消失,用上面那个函数实现,用C++编写
时间: 2023-11-17 12:06:42 浏览: 147
如果你想使用上面提到的 `pjmedia_sdp_attr_remove_all` 函数将具有特定名称的属性从属性数组中移除,你可以按照以下步骤进行操作:
1. 首先,确定你的属性数组是 `pjmedia_sdp_attr` 类型的指针数组,即 `pjmedia_sdp_attr* attr_array[]`。
2. 创建一个变量 `unsigned count` 来存储属性数组的长度。
3. 使用 `pjmedia_sdp_attr_remove_all` 函数来移除具有特定名称的属性,传入参数 `&count`(传递指针以便在函数内部更新属性数量)、属性数组 `attr_array` 和要移除的属性名称。
4. 检查函数返回的移除属性的数量,你可以根据需要进行进一步处理。
以下是一个示例的 C++ 代码片段,展示了如何使用上述步骤来移除具有特定名称的属性:
```cpp
// 定义属性结构体
typedef struct pjmedia_sdp_rtcp_attr
{
unsigned port;
pj_str_t net_type;
pj_str_t addr_type;
pj_str_t addr;
} pjmedia_sdp_rtcp_attr;
// 创建一个属性数组
pjmedia_sdp_rtcp_attr* attr_array[] = { ... }; // 假设已经定义并初始化了数组
// 获取属性数组的长度
unsigned count = sizeof(attr_array) / sizeof(attr_array[0]);
// 移除具有特定名称的属性
unsigned removed_count = pjmedia_sdp_attr_remove_all(&count, (pjmedia_sdp_attr**)attr_array, "rtcp");
// 输出移除的属性数量
std::cout << "Removed " << removed_count << " attributes" << std::endl;
```
请注意,由于 `pjmedia_sdp_rtcp_attr` 是你自定义的结构体类型,它与 `pjmedia_sdp_attr` 并不完全相同。在调用 `pjmedia_sdp_attr_remove_all` 时,需要将 `attr_array` 强制转换为 `pjmedia_sdp_attr**` 类型的指针数组,以便与函数参数匹配。在 C++ 中使用 C 库时,需要小心处理类型兼容性。
阅读全文