webRTC远程通话--设置静音

前言

最近在学习基于WebrtcKurento来实现web远程通话,爬了很多的坑,记录下。
音视频通话通常会有切换静音设置的功能,即一端设置静音之后不再有音频内容向对方发送,那么在webrtc中,又当如何实现呢?

思路

1、修改WebRtcPeeroptions
在创建WebRtcPeer时,可以设置配置项options,其中mediaConstraints里可以设置是否使用音视频。

constraints 参数是一个包含了video 和 audio两个成员的MediaStreamConstraints 对象,用于说明请求的媒体类型。必须至少一个类型或者两个同时可以被指定。

{
    audio: false,
    video: true
}

此处设置代表使用视频设备,不使用音频设备。运行之后,确实不再听到web端的音频输入,但是后续如何取消静音又是个问题。

2、MediaStreamTrack
将本地的音视频内容发送到对方,创建WebRtcPeerSendonly(参考Kurento官方文档说明)。

WebRtcPeerSendonly

查看其localVideo里的具体内容,如下:
localVideo的srcObject

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表示流中的单个媒体轨道。通常,这些是音频或视频轨道,但也可以存在其他轨道类型。
MediaStreamTrack.enabled如果为true,则enabled表示允许轨道将其实际媒体呈现到输出。当enabled设置为时false,轨道仅生成空白帧。空的音频帧将每个样本的值设置为0。空的视频帧将每个像素的值设置为黑色。

总结

通过对MediaStream的控制,即设置MediaStreamTrack.enabled来实现静音开关效果的切换。

你可能感兴趣的:(webRTC远程通话--设置静音)