javascript - 当 mediaStreamTrack.enabled 被修改时,如何接收通知/事件?

标签 javascript webrtc mediastreamsource

我正在使用 getUserMedia 来访问网络摄像头。我有一个功能可以打开和关闭视频,执行以下操作:

  var videoTracks = this.stream.getVideoTracks();
  if (videoTracks.length === 0) {
    trace('No local video available.');
    return;
  }

  trace('Toggling video mute state.');
  for (var i = 0; i < videoTracks.length; ++i) {
    videoTracks[i].enabled = !videoTracks[i].enabled;
  }

  trace('Video ' + (videoTracks[0].enabled ? 'unmuted.' : 'muted.'));

enabled的值改变时如何接收事件?我尝试使用Object.observe,但它不起作用。

最佳答案

据我所知,当 enabled 属性更改时,当前没有触发/调用任何事件。

来自here :

Also, there is no "onmuted" and "onunmuted" event defined or fired in the WebRTC native implementations.

您可能必须自己构建此机制:

Keep in mind that you're disabling a media track locally; it will not fire any event on target users side. If you disabled video track; then it will cause "blank-video" on target-users side.

You can manually fire events like "onmuted" or "onmediatrackdisabled" by using socket that was used for signaling. You can send/emit messages like:

yourSignalingSocket.send({
    isMediaStreamTrackDisabled: true,
    mediaStreamLabel: stream.label
});

根据spec这最终应该成为 MediaStreamTrack 接口(interface)的一部分:

onmute of type EventHandler,

This event handler, of type mute, must be supported by all objects implementing the MediaStreamTrack interface.

我尝试在 Chrome (43) 中将一个函数分配给轨道的 onmute,但它从未被调用 ( looks like this is not implemented yet )。

关于javascript - 当 mediaStreamTrack.enabled 被修改时,如何接收通知/事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30547073/

相关文章:

javascript - 使用 Javascript 将图像替换为下一张图像和上一张图像

ios - 在 WebRTC for iOS 中测量麦克风电平

ios - IOS 11 中的 Safari WebRTC 支持

c# - 自定义 MediaStreamSource 和 MediaElement.Naturalduration 属性

mediastreamsource - H.264 视频播放(使用 MediaStreamSource)在 WP7 模拟器上遇到 3100 MediaError

javascript - Jest 期望异常不适用于异步

javascript - 响应图像 slider 居中图像

javascript - 使用 jQuery 滚动到一个元素

ios - iOs 13 上的 Chrome 78 未定义 navigator.mediaDevices

google-chrome - Web RTC 流的音频电平表