@@ -5,14 +5,19 @@ import { Engine } from '@etherealengine/engine/src/ecs/classes/Engine'
55import { MessageTypes } from '@etherealengine/engine/src/networking/enums/MessageTypes'
66import {
77 MediaTagType ,
8+ NetworkState ,
89 screenshareAudioDataChannelType ,
910 screenshareVideoDataChannelType ,
1011 webcamAudioDataChannelType ,
1112 webcamVideoDataChannelType
1213} from '@etherealengine/engine/src/networking/NetworkState'
13- import { getMutableState , useHookstate } from '@etherealengine/hyperflux'
14+ import { getMutableState , State , useHookstate } from '@etherealengine/hyperflux'
1415
15- import { MediaInstanceState } from '../common/services/MediaInstanceConnectionService'
16+ import {
17+ MediaInstanceState ,
18+ useMediaInstance ,
19+ useMediaNetwork
20+ } from '../common/services/MediaInstanceConnectionService'
1621import { MediaStreamState } from '../transports/MediaStreams'
1722import {
1823 createPeerMediaChannels ,
@@ -24,13 +29,14 @@ import {
2429 ProducerExtension ,
2530 SocketWebRTCClientNetwork
2631} from '../transports/SocketWebRTCClientFunctions'
32+ import { NearbyUsersState } from '../transports/UpdateNearbyUsersSystem'
2733import { AuthState } from '../user/services/AuthService'
2834import { NetworkUserState } from '../user/services/NetworkUserService'
29- import { MediaState } from './services/MediaStreamService'
3035
3136export const getMediaChannels = ( network : SocketWebRTCClientNetwork , consumers : ConsumerExtension [ ] ) => {
32- const mediaState = getMutableState ( MediaState )
33- const nearbyLayerUsers = mediaState . nearbyLayerUsers
37+ const nearbyUsersState = getMutableState ( NearbyUsersState )
38+ const mediaStreamState = getMutableState ( MediaStreamState )
39+ const nearbyLayerUsers = nearbyUsersState . nearbyLayerUsers
3440 const selfUserId = getMutableState ( AuthState ) . user . id
3541 const userState = getMutableState ( NetworkUserState )
3642 const channelConnectionState = getMutableState ( MediaInstanceState )
@@ -56,9 +62,9 @@ export const getMediaChannels = (network: SocketWebRTCClientNetwork, consumers:
5662
5763 /** always put own peer first */
5864 const selfPeerID = network ?. peerID ?? 'self'
59- if ( mediaState . isScreenVideoEnabled . value )
65+ if ( mediaStreamState . screenVideoProducer . value != null && ! mediaStreamState . screenShareVideoPaused . value )
6066 mediaChannels . push ( { peerID : selfPeerID , mediaTag : screenshareVideoDataChannelType } )
61- if ( mediaState . isScreenAudioEnabled . value )
67+ if ( mediaStreamState . screenAudioProducer . value != null && ! mediaStreamState . screenShareAudioPaused . value )
6268 mediaChannels . push ( { peerID : selfPeerID , mediaTag : screenshareAudioDataChannelType } )
6369 mediaChannels . push ( { peerID : selfPeerID , mediaTag : webcamVideoDataChannelType } )
6470 mediaChannels . push ( { peerID : selfPeerID , mediaTag : webcamAudioDataChannelType } )
@@ -88,7 +94,7 @@ export const getMediaChannels = (network: SocketWebRTCClientNetwork, consumers:
8894/**
8995 * Sets media stream state for a peer
9096 */
91- const PeerConsumer = ( props : {
97+ const PeerMedia = ( props : {
9298 channel : ConsumerExtension | ProducerExtension
9399 peerID : PeerID
94100 mediaTag : MediaTagType
@@ -128,13 +134,13 @@ const PeerConsumer = (props: {
128134 peerMediaChannelState . audioProducerPaused . set ( true )
129135 peerMediaChannelState . audioProducerGlobalMute . set ( true )
130136 } else {
131- const videoConsumer = network . consumers ? .find (
137+ const videoConsumer = network . consumers . find (
132138 ( c ) =>
133139 c . appData . peerID === peerID &&
134140 c . producerId === producerId &&
135141 c . appData . mediaTag === ( isScreen ? screenshareVideoDataChannelType : webcamVideoDataChannelType )
136142 )
137- const audioConsumer = network . consumers ? .find (
143+ const audioConsumer = network . consumers . find (
138144 ( c ) =>
139145 c . appData . peerID === peerID &&
140146 c . producerId === producerId &&
@@ -159,12 +165,12 @@ const PeerConsumer = (props: {
159165 peerMediaChannelState . audioProducerPaused . set ( false )
160166 peerMediaChannelState . audioProducerGlobalMute . set ( false )
161167 } else {
162- const videoConsumer = network . consumers ? .find (
168+ const videoConsumer = network . consumers . find (
163169 ( c ) =>
164170 c . appData . peerID === peerID &&
165171 c . appData . mediaTag === ( isScreen ? screenshareVideoDataChannelType : webcamVideoDataChannelType )
166172 )
167- const audioConsumer = network . consumers ? .find (
173+ const audioConsumer = network . consumers . find (
168174 ( c ) =>
169175 c . appData . peerID === peerID &&
170176 c . appData . mediaTag === ( isScreen ? screenshareAudioDataChannelType : webcamAudioDataChannelType )
@@ -213,12 +219,12 @@ const PeerConsumer = (props: {
213219 }
214220 }
215221 } else {
216- const videoConsumer = network . consumers ? .find (
222+ const videoConsumer = network . consumers . find (
217223 ( c ) =>
218224 c . appData . peerID === peerID &&
219225 c . appData . mediaTag === ( isScreen ? screenshareVideoDataChannelType : webcamVideoDataChannelType )
220226 )
221- const audioConsumer = network . consumers ? .find (
227+ const audioConsumer = network . consumers . find (
222228 ( c ) =>
223229 c . appData . peerID === peerID &&
224230 c . appData . mediaTag === ( isScreen ? screenshareAudioDataChannelType : webcamAudioDataChannelType )
@@ -304,15 +310,19 @@ const PeerConsumer = (props: {
304310 return null
305311}
306312
307- export const PeerMedia = ( ) => {
308- const mediaState = useHookstate ( getMutableState ( MediaState ) )
313+ export const PeerConsumers = ( ) => {
314+ const nearbyUsersState = useHookstate ( getMutableState ( NearbyUsersState ) )
315+
309316 const mediaStreamState = useHookstate ( getMutableState ( MediaStreamState ) )
310317 const peerMediaChannelState = useHookstate ( getMutableState ( PeerMediaChannelState ) )
311- const network = Engine . instance . mediaNetwork as SocketWebRTCClientNetwork
318+
319+ const networkState = useMediaNetwork ( )
320+ const network = networkState ?. value
312321
313322 // create a peer media stream for each peer with a consumer
314323 useEffect ( ( ) => {
315- const mediaChannels = getMediaChannels ( network , mediaState . consumers . get ( { noproxy : true } ) )
324+ if ( ! network ) return
325+ const mediaChannels = getMediaChannels ( network , network . consumers )
316326 for ( const consumer of mediaChannels ) {
317327 if ( ! peerMediaChannelState . value [ consumer . peerID ] ) {
318328 createPeerMediaChannels ( consumer . peerID )
@@ -325,8 +335,8 @@ export const PeerMedia = () => {
325335 }
326336 }
327337 } , [
328- mediaState . nearbyLayerUsers . length ,
329- mediaState . consumers . length ,
338+ nearbyUsersState . nearbyLayerUsers . length ,
339+ networkState ? .consumers ? .length ,
330340 mediaStreamState . videoStream ,
331341 mediaStreamState . audioStream ,
332342 mediaStreamState . screenAudioProducer ,
@@ -339,14 +349,15 @@ export const PeerMedia = () => {
339349 channel : ConsumerExtension | ProducerExtension
340350 } [ ]
341351
342- mediaChannels . push (
343- ...mediaState . consumers . value . map ( ( media ) => {
344- return { peerID : media . appData . peerID , mediaTag : media . appData . mediaTag , channel : media }
345- } )
346- )
352+ if ( network )
353+ mediaChannels . push (
354+ ...network . consumers . map ( ( media : ConsumerExtension ) => {
355+ return { peerID : media . appData . peerID , mediaTag : media . appData . mediaTag , channel : media }
356+ } )
357+ )
347358
348359 // own peer id
349- const peerID = network ?. peerID ?? 'self'
360+ const peerID = network ?. peerID ?? ( 'self' as PeerID )
350361
351362 if ( mediaStreamState . camVideoProducer . value )
352363 mediaChannels . push ( {
@@ -378,7 +389,7 @@ export const PeerMedia = () => {
378389 { mediaChannels
379390 . filter ( ( { peerID } ) => peerMediaChannelState [ peerID ] . value )
380391 . map ( ( { channel, peerID, mediaTag } ) => (
381- < PeerConsumer channel = { channel } peerID = { peerID } mediaTag = { mediaTag } key = { peerID + '-' + mediaTag } />
392+ < PeerMedia channel = { channel } peerID = { peerID } mediaTag = { mediaTag } key = { peerID + '-' + mediaTag } />
382393 ) ) }
383394 </ >
384395 )
0 commit comments