微信小程序 多人音視頻對話

2022-05-11 15:43 更新

多人音視頻對話

用于實現(xiàn)小程序內(nèi)多人音視頻對話的功能。

申請開通

小程序管理后臺,「開發(fā)」-「接口設(shè)置」中自助開通該組件權(quán)限。相關(guān)接口 wx.joinVoIPChat 和組件 voip-room。

調(diào)用流程

開發(fā)者僅需提供房間唯一標識,即可加入到指定的房間。傳入相同唯一標識的用戶,會進到相同的房間。為了保證前端傳入的 groupId 可信,wx.joinVoIPChat 接口要求傳入簽名。詳見下文 簽名算法。當加入視頻房間時,可結(jié)合 voip-room 組件顯示成員畫面。

前端接口

簽名算法

生成簽名需要傳入四個參數(shù):

參數(shù)名 說明
appId 小游戲的 appId
groupId 游戲房間的唯一標識,由游戲自己保證唯一
nonceStr 隨機字符串,長度應(yīng)小于 128
timeStamp 生成這個隨機字符串的 UNIX 時間戳(精確到秒)

簽名算法為:

signature = hmac_sha256([appId, groupId, nonceStr, timeStamp].sort().join(''), sessionKey)

具體來說,這個算法分為幾個步驟:

  1. 對 appId groupId nonceStr timeStamp 四個值表示成字符串形式,按照字典序排序;
  2. 將排好序的四個字符串拼接在一起;
  3. 使用 session_key 作為 key,使用 hmac_sha256 算法對 2 中的結(jié)果字符串做計算,所得結(jié)果即為 signature

示例:

appId = 'wx20afc706a711eefc'
groupId = '1559129713_672975982'
nonceStr = '8AP6DT9ybtniUJfb'
timeStamp = '1559129714'
session_key = 'gDyVgzwa0mFz9uUP7M6GQQ=='

str = [appId, groupId, nonceStr, timeStamp].sort().join('') = '1559129713_67297598215591297148AP6DT9ybtniUJfbwx20afc706a711eefc'
signature = hmac_sha256('1559129713_67297598215591297148AP6DT9ybtniUJfbwx20afc706a711eefc', sessionKey) = 'b002b824688dd8593a6079e11d8c5e8734fbcb39a6d5906eb347bfbcad79c617'

使用云開發(fā)完成簽名

在云開發(fā)中,無法獲取 session_key,但提供了單獨的函數(shù) cloud.getVoIPSign 來計算簽名。

const cloud = require('wx-server-sdk')
cloud.init()

exports.main = async (event, context) => {
  const signature = cloud.getVoIPSign({
    groupId: 'xxx',
    timestamp: 123,
    nonce: 'yyy'
  })
  return signature
}

人數(shù)限制

每個房間最多同時加入 10 個人。

頻率限制

對于每個小程序,每天最多允許創(chuàng)建 100000 個房間。當所有人退出房間時,房間即被銷毀。此時如果傳入之前用過的 groupId 重新加入房間,會被計算為新開一個房間。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號