События MediaStream, активные и неактивные, не запускаются в удаленном одноранговом соединении WebRTC

У меня есть пульт MediaStream объект, полученный удаленным WebRTC Peer Connection,

Я хочу проверить, когда пульт MediaStream становится неактивным (независимо от причины).

Я прочитал, что для этого я должен использовать события active а также inactive из 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);
}

Два сообщения никогда не показываются.

Я также попробовал:

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);
}

Но поведение такое же.

Я не понимаю, почему два события не вызваны.

Я использую Google Chrome 52.0.2743.116 м

1 ответ

Нет, он работает правильно, просто вы не можете напрямую написать функцию для этого события (согласно документации, которая сейчас удалена). Вы также можете войти в свой event.stream Объект в консоли и увидеть детали. Вы должны вызвать предопределенную функцию и передать столько аргументов, сколько захотите.

Я сделал быстрый код, чтобы проверить, как вызвать эти события.

HTML

<video src="" autoplay id="video"></video>

JavaScript

var video = document.getElementById('video')

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

navigator.getUserMedia({video:true, audio:false}, function (stream) {
  stream.onactive = myfun();
  video.src = window.URL.createObjectURL(stream);
}, function (error) {
  console.log(error);
})

Другие вопросы по тегам