From a7180512dc9a5ae6a68cbb5ad752b48e605f0ac7 Mon Sep 17 00:00:00 2001 From: Jianjun Zhu Date: Thu, 21 Mar 2019 16:01:05 +0800 Subject: [PATCH] Fix stream stop event on Firefox. --- src/sdk/p2p/peerconnection-channel.js | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/sdk/p2p/peerconnection-channel.js b/src/sdk/p2p/peerconnection-channel.js index 448e52d9..17d266e8 100644 --- a/src/sdk/p2p/peerconnection-channel.js +++ b/src/sdk/p2p/peerconnection-channel.js @@ -972,6 +972,22 @@ class P2PPeerConnectionChannel extends EventDispatcher { }; } + // Returns all MediaStreams it belongs to. + _getStreamByTrack(mediaStreamTrack) { + const streams = []; + for (const [id, info] of this._remoteStreamInfo) { + if (!info.stream || !info.stream.mediaStream) { + continue; + } + for (const track of info.stream.mediaStream.getTracks()) { + if (mediaStreamTrack === track) { + streams.push(info.stream.mediaStream); + } + } + } + return streams; + } + _areAllTracksEnded(mediaStream) { for (const track of mediaStream.getTracks()) { if (track.readyState === 'live') { @@ -1061,9 +1077,12 @@ class P2PPeerConnectionChannel extends EventDispatcher { }); if (this._isUnifiedPlan()) { for (const track of info.mediaStream.getTracks()) { - track.addEventListener('ended', () => { - if (self._areAllTracksEnded(info.mediaStream)) { - self._onRemoteStreamRemoved(info.stream); + track.addEventListener('ended', (event) => { + const mediaStreams = this._getStreamByTrack(event.target); + for (const mediaStream of mediaStreams) { + if (this._areAllTracksEnded(mediaStream)) { + this._onRemoteStreamRemoved(mediaStream); + } } }); }