11import { useEffect , useRef , useState } from 'react' ;
22import { Transport , Device , Producer } from 'mediasoup-client/lib/types' ;
3- import { ConnectTransportResponse , Tracks , TransportInfo } from '@/types/mediasoupTypes' ;
3+ import { ConnectTransportResponse , TransportInfo } from '@/types/mediasoupTypes' ;
44import { Socket } from 'socket.io-client' ;
55import { checkDependencies } from '@/utils/utils' ;
66import { ENCODING_OPTIONS } from '@/constants/videoOptions' ;
77
88interface UseProducerProps {
99 socket : Socket | null ;
10- tracks : Tracks ;
11- isStreamReady : boolean ;
10+ // tracks: Tracks;
11+ // isStreamReady: boolean;
12+ mediaStream : MediaStream | null ;
13+ isMediaStreamReady : boolean ;
1214 roomId : string ;
1315 device : Device | null ;
1416 transportInfo : TransportInfo | null ;
@@ -23,8 +25,8 @@ interface UseProducerReturn {
2325
2426export const useProducer = ( {
2527 socket,
26- tracks ,
27- isStreamReady ,
28+ mediaStream ,
29+ isMediaStreamReady ,
2830 roomId,
2931 device,
3032 transportInfo,
@@ -70,10 +72,10 @@ export const useProducer = ({
7072 } ;
7173
7274 const createProducer = async ( socket : Socket , transportInfo : TransportInfo ) => {
73- if ( ! transport . current || ! socket || ! tracks ) {
75+ if ( ! transport . current || ! socket || ! mediaStream ) {
7476 const dependencyError = checkDependencies ( 'createProducer' , {
7577 socket,
76- tracks ,
78+ mediaStream ,
7779 transport : transport . current ,
7880 } ) ;
7981 setError ( dependencyError ) ;
@@ -99,28 +101,27 @@ export const useProducer = ({
99101 ) ;
100102 } ) ;
101103
102- ( Object . keys ( tracks ) as Array < keyof Tracks > ) . forEach ( kind => {
103- if ( tracks [ kind ] ) {
104- const producerConfig : Record < string , unknown > = {
105- track : tracks [ kind ] ,
106- } ;
104+ mediaStream . getTracks ( ) . forEach ( track => {
105+ const producerConfig : Record < string , unknown > = {
106+ track : track ,
107+ stopTracks : false ,
108+ } ;
107109
108- if ( kind === 'video' ) {
109- producerConfig [ 'encodings' ] = ENCODING_OPTIONS ;
110- producerConfig [ 'codecOptions' ] = {
111- videoGoogleStartBitrate : 1000 ,
112- } ;
113- }
114-
115- transport
116- . current ! . produce ( producerConfig )
117- . then ( producer => setProducers ( prev => new Map ( prev ) . set ( kind , producer ) ) ) ;
110+ if ( track . kind === 'video' ) {
111+ producerConfig [ 'encodings' ] = ENCODING_OPTIONS ;
112+ producerConfig [ 'codecOptions' ] = {
113+ videoGoogleStartBitrate : 1000 ,
114+ } ;
118115 }
116+
117+ transport . current ! . produce ( producerConfig ) . then ( producer => {
118+ setProducers ( prev => new Map ( prev ) . set ( track . kind , producer ) ) ;
119+ } ) ;
119120 } ) ;
120121 } ;
121122
122123 useEffect ( ( ) => {
123- if ( ! socket || ! device || ! roomId || ! tracks || ! isStreamReady || ! transportInfo ) {
124+ if ( ! socket || ! device || ! roomId || ! mediaStream || ! isMediaStreamReady || ! transportInfo ) {
124125 return ;
125126 }
126127
@@ -134,7 +135,7 @@ export const useProducer = ({
134135 transport . current = null ;
135136 }
136137 } ;
137- } , [ socket , device , roomId , transportInfo , isStreamReady ] ) ;
138+ } , [ socket , device , roomId , transportInfo , isMediaStreamReady ] ) ;
138139
139140 return {
140141 transport : transport . current ,
0 commit comments