前言
最近在学习基于Webrtc
、Kurento
来实现web远程通话,爬了很多的坑,记录下。
音视频通话通常会有切换静音设置的功能,即一端设置静音之后不再有音频内容向对方发送,那么在webrtc中,又当如何实现呢?
思路
1、修改WebRtcPeer
的options
在创建WebRtcPeer
时,可以设置配置项options
,其中mediaConstraints
里可以设置是否使用音视频。
constraints 参数是一个包含了video 和 audio两个成员的MediaStreamConstraints 对象,用于说明请求的媒体类型。必须至少一个类型或者两个同时可以被指定。
{
audio: false,
video: true
}
此处设置代表使用视频设备,不使用音频设备。运行之后,确实不再听到web端的音频输入,但是后续如何取消静音又是个问题。
2、MediaStreamTrack
将本地的音视频内容发送到对方,创建WebRtcPeerSendonly
(参考Kurento官方文档说明)。
查看其
localVideo
里的具体内容,如下:srcObject
在此处是MediaStream
对象(当然也可以是MediaSource
,'Blob',或者'File'对象)。MediaStream.getTracks()
返回流中所有的MediaStreamTrack列表。
遍历流中的每个音频轨道,然后设置enabled为true或false,来控制麦克风静音或者取消静音。
var tracks = stream.getTracks(); //stream为MediaStream
tracks.forEach(item => {
if (item.kind === 'audio') {
item.enabled = status;
}
});
MediaStreamTrack
表示流中的单个媒体轨道。通常,这些是音频或视频轨道,但也可以存在其他轨道类型。
MediaStreamTrack.enabled
如果为true,则enabled表示允许轨道将其实际媒体呈现到输出。当enabled设置为时false,轨道仅生成空白帧。空的音频帧将每个样本的值设置为0。空的视频帧将每个像素的值设置为黑色。
总结
通过对MediaStream
的控制,即设置MediaStreamTrack.enabled
来实现静音开关效果的切换。