whatsapp 语音通话基本实现(二)

Whatsapp VoiceCall

github demo
客户端通过websocket连接到服务器,客户端发起语音通话请求,并且完成必要的协商之后,就可以直接将语音数据发送给服务器,服务器接收到对方的语音数据之后也会通过websocket将语音数据转发给客户端。

websocket连接并不是和whatsapp 服务器连接

获取协商秘钥

XMPP 在发起语音通话请求的时候,需要带上一个秘钥,这个秘钥长32字节,通过特殊算法生成。whatsapp 服务器接收到秘钥之后会解密,然后校验时间戳。这个算法需要三个参数:

  1. 自身jid
  2. 对方jid
  3. 时间戳
//发送json 格式命令,获取秘钥
{
   
	"otherjid": "otherjid@whatsapp.com",
	"command": "GetSecret",
	"selfjid": "121312312@whatsapp.com"
}
//服务器回复秘钥, 注意秘钥是经过base64编码, 接收方需要解码,解码之后是32字节的二进制数据
{
   
	"secret": "DTGFOJCrTK+o6GhWfAeUkrq5VN9eHkwfkiDHKOkKRhY=",
	"command": "ResponseSecret"
}

发起XMPP 语音通话请求

当获取到加密秘钥之后,就可以构造xmpp的语音通话请求包,然后将这个包发送给whatsapp 服务器,这样对方手机就会响铃。

1 构造语音通过请求

下面是一个xmpp 语音请求包

    
<call to='xxx@s.whatsapp.net' id='xxx'>
    <offer call-creator='xxx:0@s.whatsapp.net' call-id='xxxx'
                  device_class='2015'>
        <audio rate='16000' enc='opus' />
        <net medium='3' />
        <capability ver='1'>AQT3C84a</capability>
        <enc v='2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值