MediaStream 事件 active 和 inactive 不会在远程 WebRTC Peer Connection 中触发

Ale*_*o C 6 html html5-video webrtc mediastream

我有一个由 remote 获得的远程 MediaStream对象WebRTC Peer Connection

我想检查遥控器何时 MediaStream 变为非活动状态(由于原因而独立)。

我已阅读,为了这个目的,我应该使用的事件activeinactive的的MediaStream对象。

但是这两个事件永远不会被触发:即使我为这两个事件设置了特定的处理程序,也永远不会执行这些处理程序。

这是我的实现:

function onRemoteStream(event) {
    event.stream.addEventListener("active", function(){
    console.log('The video is active');
    }, false);
    event.stream.addEventListener("inactive", function(){
        console.log('The video is not active');
    }, false);
    remoteVideo.src = window.URL.createObjectURL(event.stream);
}
Run Code Online (Sandbox Code Playgroud)

这两条消息永远不会显示。

我也试过:

function onRemoteStream(event) {
    event.stream.onactive = function(){
        console.log('The video is active');
    };
    event.stream.oninactive = function(){
        console.log('The video is not active');
    }
    remoteVideo.src = window.URL.createObjectURL(event.stream);
}
Run Code Online (Sandbox Code Playgroud)

但行为是一样的。

我不明白为什么没有触发这两个事件。

我正在使用谷歌浏览器 52.0.2743.116 m

Apa*_*hah 1

不,它工作正常,只是您不能直接为该事件编写函数(根据现已删除的文档)。您还可以event.stream在控制台中记录您的对象并查看详细信息。您必须使用预定义的属性onactiveoninactive

我编写了一个快速代码来测试如何触发这些事件。

超文本标记语言

<video src="" autoplay id="video"></video>
Run Code Online (Sandbox Code Playgroud)

JavaScript

var video = document.getElementById('video')

function onactive() {
  console.log("on active event");
}

function oninactive() {
  console.log("on inactive event");
}

navigator.getUserMedia({video:true, audio:false}, function (stream) {
  stream.onactive = onactive;
  stream.oninactive = oninactive;

  video.src = window.URL.createObjectURL(stream);
}, function (error) {
  console.log(error);
})
Run Code Online (Sandbox Code Playgroud)