2015-07-10 21 views
6

this article göre, yeniden müzakere firefox V38 uygulanan ve yenilerini yaratmadan aynı peerconnections akışları kaldırmak ekleyebilir, ancak ben bu iddiayı destekleyecek herhangi bir çalışma demoları bulamıyorum ve ne zaman iki kullanıcıları ben audio kendi akışında birini değiştirerek, video modunda chating, denedim, ben hata alıyorum:WebRTC: firefox'taki Yenilenmesi

NotSupportedError: removeStream not yet implemented

this aynı söyler, ama this yeniden anlaşma olaylar desteklenir söyler, ama removeStream değil yeniden müzakerenin önemli bir parçası mı? Windows 7'de firefox sürüm 39'u kullanıyorum. Kafam karıştı, yeniden müzakere henüz itfaiyede desteklenmiyor değil mi?

cevap

3

Tekil parçalar için, tüm akışın yerini almak yerine replaceTrack kullanmayı deneyin. Bu örnekte, pc1 eşdüzey bağlantınız ve üzerinde değiştirmek üzere yeni bir akış newStream varsayar. Göndericileri alın ve parçaları yeni akıştan uygun parçalarla değiştirin. Çalışma örneği here.

Promise.all(pc1.getSenders().map(sender => 
    sender.replaceTrack((sender.track.kind == "audio")? 
         newStream.getAudioTracks()[0] : 
         newStream.getVideoTracks()[0]))) 
.then(() => log("Flip!")) 
.catch(failed); 

Ayrıca ilk bağlantısından bu, not: bu örnek çağırır

function screenShare() { 
    let screenConstraints = {video: {mediaSource: "screen"}}; 

    navigator.mediaDevices.getUserMedia(screenConstraints) 
    .then(stream) { 
     stream.getTracks().forEach(track) { 
      screenStream = stream; 
      screenSenders.push(pc1.addTrack(track, stream)); 
     }); 
    }); 
} 

Bildirim o pc1.addTrack değil

Ve tersten aynı içinde pc1.addStream, kaldırılması için - pc1.removeTrack:

function stopScreenShare() { 
    screenStream.stop(); 
    screenSenders.forEach(sender) { 
     pc1.removeTrack(sender); 
    }); 
} 
6

Yeniden görüşme , Firefox'ta desteklenen'dir. the spec uygulandığı zaman yeniden müzakere yoluyla addTrack ve removeTrack değiştirildi çünkü

Firefox sadece removeStream hiç uygulanmamış (bazı çıkartılmasının çok aceleci olduğunu düşündüren, bu yüzden geri gelebilir). Firefox zaten desteklediği için addStream hala geriye dönük uyumluluk için çalışıyor.

removeTrack'un RTCRtpSender'u addTrack döndürdüğünden, API'nin bir drop-in olmaması için dikkatlice çeker.

bir polyfill şöyle görünecektir:

mozRTCPeerConnection.prototype.removeStream = function(stream) { 
    this.getSenders().forEach(sender => 
     stream.getTracks().includes(sender.track) && this.removeTrack(sender)); 
} 

parça birden akışları ait olabilir çünkü parçalara hareket, kullanıcılara daha fazla esneklik sağlamak için yapıldığını ve bir dere içinde tüm parçalar üzerinden gönderilen edilmesine gerek yoktur PeerConnection (veya aynı PeerConnection).

Firefox'ta çalışan bir yeniden görüşme örneği için bu answer to a different question'a bakın.

İlgili konular