webRTC遠(yuǎn)程通話--設(shè)置靜音

前言

最近在學(xué)習(xí)基于Webrtc、Kurento來實(shí)現(xiàn)web遠(yuǎn)程通話,爬了很多的坑,記錄下。
音視頻通話通常會(huì)有切換靜音設(shè)置的功能,即一端設(shè)置靜音之后不再有音頻內(nèi)容向?qū)Ψ桨l(fā)送,那么在webrtc中,又當(dāng)如何實(shí)現(xiàn)呢?

思路

1、修改WebRtcPeeroptions
在創(chuàng)建WebRtcPeer時(shí),可以設(shè)置配置項(xiàng)options,其中mediaConstraints里可以設(shè)置是否使用音視頻。

constraints 參數(shù)是一個(gè)包含了video 和 audio兩個(gè)成員的MediaStreamConstraints 對(duì)象,用于說明請(qǐng)求的媒體類型。必須至少一個(gè)類型或者兩個(gè)同時(shí)可以被指定。

{
    audio: false,
    video: true
}

此處設(shè)置代表使用視頻設(shè)備,不使用音頻設(shè)備。運(yùn)行之后,確實(shí)不再聽到web端的音頻輸入,但是后續(xù)如何取消靜音又是個(gè)問題。

2、MediaStreamTrack
將本地的音視頻內(nèi)容發(fā)送到對(duì)方,創(chuàng)建WebRtcPeerSendonly(參考Kurento官方文檔說明)。

WebRtcPeerSendonly

查看其localVideo里的具體內(nèi)容,如下:
localVideo的srcObject

srcObject在此處是MediaStream對(duì)象(當(dāng)然也可以是MediaSource,'Blob',或者'File'對(duì)象)。MediaStream.getTracks()返回流中所有的MediaStreamTrack列表。
遍歷流中的每個(gè)音頻軌道,然后設(shè)置enabled為true或false,來控制麥克風(fēng)靜音或者取消靜音。

var tracks = stream.getTracks();  //stream為MediaStream
tracks.forEach(item => {
    if (item.kind === 'audio') {
        item.enabled = status;
    }
});
MediaStreamTrack

MediaStreamTrack表示流中的單個(gè)媒體軌道。通常,這些是音頻或視頻軌道,但也可以存在其他軌道類型。
MediaStreamTrack.enabled如果為true,則enabled表示允許軌道將其實(shí)際媒體呈現(xiàn)到輸出。當(dāng)enabled設(shè)置為時(shí)false,軌道僅生成空白幀。空的音頻幀將每個(gè)樣本的值設(shè)置為0??盏囊曨l幀將每個(gè)像素的值設(shè)置為黑色。

總結(jié)

通過對(duì)MediaStream的控制,即設(shè)置MediaStreamTrack.enabled來實(shí)現(xiàn)靜音開關(guān)效果的切換。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容