From abd6b16a850a0bf958b719ad7a75739d9735c005 Mon Sep 17 00:00:00 2001 From: Jon Date: Mon, 12 Jul 2021 19:29:18 +0100 Subject: [PATCH] updated track provider as per ENG-2175 --- dailyjs/shared/contexts/TracksProvider.js | 52 +++++++++++++++-------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/dailyjs/shared/contexts/TracksProvider.js b/dailyjs/shared/contexts/TracksProvider.js index 6f48f1d..8740ec6 100644 --- a/dailyjs/shared/contexts/TracksProvider.js +++ b/dailyjs/shared/contexts/TracksProvider.js @@ -53,7 +53,9 @@ export const TracksProvider = ({ children }) => { ); const pauseVideoTrack = useCallback((id) => { - // Ignore undefined, local or screenshare + /** + * Ignore undefined, local or screenshare. + */ if ( !id || isLocalId(id) || @@ -74,27 +76,36 @@ export const TracksProvider = ({ children }) => { const resumeVideoTrack = useCallback( (id) => { - // Ignore undefined, local or screenshare + /** + * Ignore undefined, local or screenshare. + */ if (!id || isLocalId(id) || isScreenId(id)) return; - const videoTrack = callObject.participants()?.[id]?.tracks?.video; - if (!videoTrack?.subscribed) { + + const subscribe = () => { + if (videoTrack?.subscribed) return; callObject.updateParticipant(id, { setSubscribedTracks: true, }); - return; - } - if ( - rtcpeers.getCurrentType() !== 'sfu' || - !rtcpeers.soup.implementationIsAcceptingCalls - ) { - return; - } - const consumer = rtcpeers.soup?.findConsumerForTrack(id, 'cam-video'); - if (!consumer) { - rtcpeers.soup.setResumeOnSubscribeForTrack(id, 'cam-video', true); - } else { - rtcpeers.soup.resumeConsumer(consumer); + }; + + switch (rtcpeers.getCurrentType()) { + case 'peer-to-peer': + subscribe(); + break; + case 'sfu': { + if (!rtcpeers.soup.implementationIsAcceptingCalls) return; + const consumer = rtcpeers.soup?.findConsumerForTrack(id, 'cam-video'); + if (!(consumer && consumer.appData)) { + rtcpeers.soup.setResumeOnSubscribeForTrack(id, 'cam-video', true); + subscribe(); + } else { + rtcpeers.soup.resumeConsumer(consumer); + } + break; + } + default: + break; } }, [callObject] @@ -132,6 +143,13 @@ export const TracksProvider = ({ children }) => { pauseVideoTrack(id); } + /** + * Fast resume tracks. + */ + if (shouldSubscribe && !shouldPause) { + resumeVideoTrack(id); + } + if ( isLocalId(id) || isScreenId(id) ||