Node.js中Twilio Video音视频静音功能conference.js配置方法
问题背景
- 参照Twilio官方Serverless指南搭建了Twilio视频通话应用,参考模板为Twilio video call app using the Serverless guide,当前视频通话功能运行完全正常。
- 提问者为Node.js初学者,想要在应用中实现音频、视频的静音/取消静音功能,咨询需要在conference.js文件的什么位置添加对应实现代码。
项目搭建操作流程
- 初始化新项目,执行命令:
twilio serverless:init example --template=video && cd example
- 借助Twilio CLI启动服务,执行命令:
twilio serverless:start
- 访问
https://localhost:3000/index.html即可测试应用
ℹ️ 可查看开发者控制台与终端输出排查错误,操作前请确保已完成环境变量配置。
部署方法
可在项目文件夹内执行对应命令部署函数与静态资源,更多规则可参考官方文档。
通过Twilio CLI执行部署命令:
twilio serverless:deploy
解答
首先需要说明:音视频的静音/取消静音是前端侧的本地媒体轨道控制逻辑,和后端服务逻辑无关,你不需要修改functions目录下存放的服务端conference.js文件,改动后端代码也无法实现静音效果。
如果你项目里前端侧的逻辑文件也命名为conference.js(存放在assets静态资源目录下),按以下两个位置插入代码即可实现功能:
- 第一个插入位置:代码中加入房间成功、拿到
room实例的回调块内部。在这里把本地发布的音频、视频轨道存到全局变量里,方便后续按钮触发控制,参考代码:
// 脚本最外层提前声明可全局访问的轨道变量 let localAudioTrack = null let localVideoTrack = null // 以下逻辑写在成功加入房间的回调中 room.localParticipant.tracks.forEach(publication => { const track = publication.track if (track.kind === 'audio') localAudioTrack = track if (track.kind === 'video') localVideoTrack = track })
- 第二个插入位置:页面DOM加载完成的代码块里。在这里给麦克风、摄像头控制按钮绑定点击事件,调用SDK自带的轨道启停方法即可:
// 麦克风静音/取消静音逻辑 document.getElementById('mic-btn').addEventListener('click', function() { if (!localAudioTrack) return if (localAudioTrack.isEnabled) { localAudioTrack.disable() this.textContent = '取消静音' } else { localAudioTrack.enable() this.textContent = '麦克风静音' } }) // 摄像头关/开逻辑 document.getElementById('camera-btn').addEventListener('click', function() { if (!localVideoTrack) return if (localVideoTrack.isEnabled) { localVideoTrack.disable() this.textContent = '开启摄像头' } else { localVideoTrack.enable() this.textContent = '关闭摄像头' } })
提示:直接调用
disable()方法不会断开和房间的媒体连接,只是暂停向对端发送音视频数据,对端会收到静音状态/黑帧画面,是官方推荐的实现方式,比反复取消发布、重新发布轨道的性能好很多。
内容的提问来源于stack exchange,提问作者Ankit Sharma
相关产品推荐
相关产品推荐

