2.注册并认证之后,打开“产品与方案”,选择“实时音视频”,创建一个应用,即可获取七牛云 appid。
3.再通过 appid 栏目,生成临时 roomtoken(即 token)。另外,对于appid、roomtoken等相关概念的介绍可查阅基本概念文档。
<script src="qnweb.js"></script>(2)设计客户端用户页面
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>堆代码 duidaima.com</title> <script src="qnweb.js"></script> <script src="VideoCall.js"></script> <style> #localtracks, #remotetracks { width: 320px; height: 240px; background: #000; } </style> </head> <body> <label>请输入 RoomToken </label> <input id="roomtoken" type="text" /> <button onclick="joinRoom()">加入房间</button> <p>本地视频</p> <div id="localtracks"></div> <p>远端视频</p> <div id="remotetracks"></div> </body> </html>(3)实现音视频通话逻辑
async function joinRoom() { // 堆代码 duidaima.com // 创建QNRTCClient对象 const client = QNRTC.createClient(); // 需要先监听对应事件再加入房间 autoSubscribe(client); const roomTokenInput = document.getElementById("roomtoken"); const roomToken = roomTokenInput.value; await client.join(roomToken); await publish(client); } async function publish(client) { // 返回一组audio track 与 video track const localTracks = await QNRTC.createMicrophoneAndCameraTracks(); await client.publish(localTracks); // 获取页面上的一个元素作为播放画面的父元素 const localElement = document.getElementById("localtracks"); // 遍历本地采集的 Track 对象 for (const localTrack of localTracks) { console.log(localTrack) // 如果这是麦克风采集的音频 Track,我们就不播放它。 if (localTrack.isAudio()) continue; // 调用 Track 对象的 play 方法在这个元素下播放视频轨 localTrack.play(localElement, { mirror: true }); } }(4)订阅远端音视频track
async function subscribe(client, tracks) { // 传入 Track 对象数组调用订阅方法发起订阅,异步返回成功订阅的 Track 对象。 const remoteTracks = await client.subscribe(tracks); const remoteElement = document.getElementById("remotetracks"); // 遍历返回的远端 Track,调用 play 方法完成在页面上的播放 for (const remoteTrack of [...remoteTracks.videoTracks, ...remoteTracks.audioTracks]) { remoteTrack.play(remoteElement); } }(5)事件监听
function autoSubscribe(client) { // 添加事件监听,当房间中出现新的 Track 时就会触发,参数是 trackInfo 列表 client.on("user-published", (userId,tracks) => { subscribe(client, tracks) .then(() => console.log("subscribe success!")) .catch(e => console.error("subscribe error", e)); }); }至此,音视频通话简易demo已完成,可以尝试运行查看效果。
async function checkSystem(){ const result = await QNRTC.checkSystemRequirements(); if (result.ok) { console.log("test ok!"); } else { console.log("test fail", result.reason); } }并在index.html文件中增加对应 button 进行函数调用。
<div> <button onclick="checkSystem()">checkSystem</button> </div>3.3 demo展示
当用户点击checkSystem 按钮时,可以在控制台过滤“test ok! ”查看检测信息。(如下图右侧控制台信息);当点击加入房间时,客户端开始采集麦克风和摄像头并进行发布,同时当远端用户加入时,会实时监测并订阅远端音视频 track。至此,音视频通话demo实现完毕。
小结:
本文详细介绍了web平台如何集成七牛云SDK实现语音视频通话功能,通过少量代码,实现了简易音视频Demo。