3

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,但它不起作用。

4

1 回答 1

4

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

这里

此外,在 WebRTC 本机实现中没有定义或触发“onmuted”和“onunmuted”事件。

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

请记住,您正在本地禁用媒体轨道;它不会在目标用户端触发任何事件。如果您禁用了视频轨道;那么它会在目标用户端导致“空白视频”。

您可以使用用于信令的套接字手动触发诸如“onmuted”或“onmediatrackdisabled”之类的事件。您可以发送/发送消息,例如:

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

根据规范,这最终应该是 MediaStreamTrack 接口的一部分:

EventHandler 类型的 onmute,

实现 MediaStreamTrack 接口的所有对象都必须支持此静音类型的事件处理程序。

我尝试在 Chrome (43) 中为轨道分配一个函数,onmute但它从未被调用(看起来这还没有实现)。

于 2015-06-01T11:04:40.197 回答