如何在 webrtc 中将麦克风静音/取消静音

Posted

技术标签:

【中文标题】如何在 webrtc 中将麦克风静音/取消静音【英文标题】:How to mute/unmute mic in webrtc 【发布时间】:2016-06-01 10:33:29 【问题描述】:

我从这里读到如何在 webrtc:WebRTC Tips & Tricks 中为本地流静音/取消静音麦克风

当我启动我的本地流麦克风时,默认情况下是启用的,所以当我设置 audioTracks[0].enabled=false 时,它​​会在我的本地流中静音一个麦克风,但是当我将它设置回 true 时,它​​启用取消静音。这是我的本地流静音/取消静音代码:

 getLocalStream(function (stream,enable) 
        if (stream) 
            for (var i = 0; i < stream.getTracks().length; i++) 
                var track = stream.getAudioTracks()[0];
                if (track)
                    track.enabled = enable;
                //track.stop();
            
        
    );

有人可以建议我如何在本地流中取消麦克风静音。

【问题讨论】:

【参考方案1】:

我假设您的方法getLocalStream 实际上是调用navigator.getUserMedia。在这种情况下,当您这样做时,您将获得另一个流,而不是原始流。使用你应该做的原始流

mediaStream.getAudioTracks()[0].enabled = true; // or false to mute it.

您也可以查看https://***.com/a/35363284/1210071

【讨论】:

【参考方案2】:

有 2 个属性 enabledmutedenabled是用来设置的,muted在远端(对方)是只读的(我试过了,设置muted不行,基本上不能改值)

stream.getAudioTracks()[0].enabled = true; //远程会得到muted的变化

【讨论】:

w3c.github.io/mediacapture-main/#track-muted -- 静音不是你能控制的 -- 或者不应该能控制。 @PhilippHancke 是的,你是对的,我试过muted 它是只读的,我也更新了我的答案。非常感谢您让我知道。【参考方案3】:

啊,有一个好方法可以做到这一点:

mediaStream.getVideoTracks()[0].enabled = !(mediaStream.getVideoTracks()[0].enabled);

【讨论】:

【参考方案4】:

您应该阅读并设置“启用”值。 “启用”值用于“静音”。 “静音”值是一个只读值,与流当前是否无法播放有关。

MediaStreamTrack 接口上的 enabled 属性是一个布尔值,如果允许轨道呈现源流,则为 true,否则为 false。这可用于有意使轨道静音。启用后,轨道的数据会从源输出到目标;否则,输出空帧。

在音频的情况下,禁用的轨道会生成静音帧(即,每个样本的值为 0 的帧)。对于视频轨道,每一帧都完全用黑色像素填充。

enabled 的值,本质上代表了典型用户对轨道静音状态的看法,而 muted 属性表示轨道暂时无法输出数据的状态,例如帧在运输途中丢失了。

https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/enabled

【讨论】:

【参考方案5】:

第 1 步)调用 jquery.min.js

第 2 步)使用下面的代码,

A) 静音

$("video").prop('muted','true');

B) 取消静音

$("video").prop('muted','');

像 youtube 一样的单个图标静音和取消静音

function enablemute(thisimag)  
  if($(thisimag).attr('src')=='images/mute.png')
     
    $("video").prop('muted','');
    $(thisimag).prop('src','images/unmute.png');
  
  else
  
      //alert('her');
    $("video").prop('muted','true');
    $(thisimag).prop('src','images/mute.png');
   
 

上面的函数 enablemute 应该从 onclick 调用

【讨论】:

他正在谈论在他的本地流上静音音频/视频,以便远程对等方可以在音频或视频上接收我 你能解释更多吗 所以,我们正在通过线路发送视频/音频流,静音音频或视频,您只需在您的浏览器上获得的媒体对象上执行此操作......并且您的 webrtc 对等连接对象已经接收音频或视频静音流发送到其他对等方 你有没有测试过远程端发生的事情。 是的,我已经测试过了,但是当这个操作不正确时......远程端什么都不会静音或取消静音.....当我们静音音频流时,这意味着远程端没有接收到音频流根本......而且它不是遥控器可以接收并选择不播放它不,这将是一般带宽和资源的不良使用

以上是关于如何在 webrtc 中将麦克风静音/取消静音的主要内容,如果未能解决你的问题,请参考以下文章

Swift AVAudioEngine - 如何使本地麦克风静音

如何使用 Auriotouch 将麦克风的音频输入静音并仅识别设备的内部音频

在 Windows 7 上静音麦克风

Unity - 麦克风检查是不是静音

使用 NAudio 录制音频并在麦克风输入静音时写入文件

使用网络音频 api 检查所选麦克风是不是已静音