1、语音通信之获取对端外网IP 分析过程:
情景: ClientA 给 ClientB 发起语音通话请求, ClientB同意电话请求, 最终由CLientB终止电话请求!!
一、ClientA 给 ClientB 发起语音通话请求, ClientA端调用startCall 函数,
1.调用 generateE2EKeys 生成一个E2E的callkey, callkey用于通话的数据的加解密
2.发送一个calloffer请求给ClientB, 请求包中含有callkey
3.ClientB收到calloffer请求后, 读取出callkey,用于通话的数据的加解密, 4.然后回复一个PreAccept一个回复包给ClientA。包中含有音视频的一些属性信息,用于ClientA初始化OpenSLSE 的Player的参数
4.ClientA 收到PreAccept请求包信息,初始化,为通话做准备工作。 然后等待ClientB的选择:同意通话,还是拒绝通话。
二、ClientB:同意通话请求 --- Client端调用acceptCall
1.调用audioStream启动ClientB的通信从操作,SRTP的操作,OPENSL音频方面操作
2.发送Accept回复包给ClientA, Accept包含,ClientB的外网IP地址--endpoints, 音视频的编码格式--encoding, 音频的样本采集率:rate
3.ClientA 收到Accept包,调用nativeHandleCallOfferAccept 函数,收到对端的外网IP地址,然后建立P2P连接,连接成功开始通话
综上分析: 必须需要ClientB同意通话,才能拿到用户ClientB的外网IP地址,所以要实现静默方式获取对端的IP地址是不可能是事情。