开源库 pjnath的改造,异步接口 修改 为 同步 超时返回 接口

本文介绍如何将开源库pjnath中的异步非阻塞函数转换为同步阻塞函数,特别是pj_ice_strans_create接口。通过在关键回调函数stun_on_status和turn_on_state中设置标志变量,实现在获取到完整网络候选信息后继续执行,避免因网络延迟导致的问题。这种方法提供了一种超时机制,既能防止无限阻塞,又能在满足条件时迅速返回,适用于需要同步操作的场景。
摘要由CSDN通过智能技术生成

提供一种思路,将pjnath非阻塞函数改造为阻塞函数,同样适用其他非阻塞接口。

背景:

开源库有时候提供的接口并不人性化,例如:

pjnath里的pj_ice_strans_create用来创建一个ice,它调用了sess_init_update(用来检测ice的候选candidate的)。

我们知道本机客户端获取的自身candidate一般需要两个以上才能够有效的实现对remote实现negotiationnegotiation成功之后才能进行NAT的数据发送。

其中一个是自己局域网地址信息,另一个是外网的地址信息,前者是实现局域网连接,后者是实现外网NAT的关键。

针对turn类型的server时:

pj_ice_strans_create-》pj_ice_strans_init_ice-》pj_ice_strans_enum_cands

按上面的顺序调用时,获得的candidate只有一个本机地址信息,没有外网地址信息,无法用于NAT negotiatioin。

而我在跟踪时发现是函数是异步所导致的。stun_on_status和turn_on_state是回调函数,收到socket信息后被才调用,因此存在网络延时,不能及时将外网的candidate更新。

stun_on_status中运行到/* Otherwise update the address */ 后面的cand->status = PJ_SUCCESS;对candidate进行了修改。

turn_on_state 的old_state new_state状态改变时会对candidate进行修改,阻塞可选在函数末尾

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值