本事象はFirefox 57,58にて発生していた問題であり、現行版では解消されております。
SFURoomに対して、Firefox 57,58 で参加中に、他の参加者が入退室を繰り返すと、Firefoxでstreamを受信できなくなる事象が発生しています。
ワークアラウンドをお伝えします。
この事象は、1回目の入室と2回目以降の入室で、MedisStreamTrack idが同じ場合に発生いたします。その為、再入室する前にstream.clone()
し、同idを変更することで回避できます。
以下、その実装例です。古いstreamについてはメモリリークの原因になる可能性があるため、再生中の場合は、該当のvideoエレメントのsrcObjectプロパティに新しいstreamオブジェクトを割り当ててください。streamオブジェクト自体は、track.stop()
で全てのトラックを停止させてください。
function cloneAndDeactivateStream(stream) {
const newStream = stream.clone();
// If you have assigned the stream to a video element, you need to assign it the new stream.
// e.g. videoElem.srcObject = newStream;
stream.getTracks().forEach(track => track.stop());
return newStream;
}
localStream = cloneAndDeactivateStream(localStream);
room = peer.joinRoom(roomName, {mode: 'sfu', stream: localStream});
コメント
0件のコメント
記事コメントは受け付けていません。