@@ -36,6 +36,7 @@ import * as ConnectionQualityEvents
36
36
import * as E2ePingEvents from './service/e2eping/E2ePingEvents' ;
37
37
import { createGetUserMediaEvent } from './service/statistics/AnalyticsEvents' ;
38
38
import * as RTCStatsEvents from './modules/RTCStats/RTCStatsEvents' ;
39
+ import { VideoType } from './service/RTC/VideoType' ;
39
40
40
41
const logger = Logger . getLogger ( __filename ) ;
41
42
@@ -90,6 +91,13 @@ interface IJitsiMeetJSOptions {
90
91
}
91
92
}
92
93
94
+ interface ICreateLocalTrackFromMediaStreamOptions {
95
+ stream : MediaStream ,
96
+ sourceType : string ,
97
+ mediaType : MediaType ,
98
+ videoType ?: VideoType
99
+ }
100
+
93
101
/**
94
102
* The public API of the Jitsi Meet library (a.k.a. {@code JitsiMeetJS}).
95
103
*/
@@ -421,6 +429,31 @@ export default {
421
429
} ) ;
422
430
} ,
423
431
432
+ /**
433
+ * Manually create JitsiLocalTrack's from the provided track info, by exposing the RTC method
434
+ *
435
+ * @param {Array<ICreateLocalTrackFromMediaStreamOptions> } tracksInfo - array of track information
436
+ * @returns {Array<JitsiLocalTrack> } - created local tracks
437
+ */
438
+ createLocalTracksFromMediaStreams ( tracksInfo ) {
439
+ return RTC . createLocalTracks ( tracksInfo . map ( ( trackInfo ) => {
440
+ const tracks = trackInfo . stream . getTracks ( )
441
+ . filter ( track => track . kind === trackInfo . mediaType ) ;
442
+
443
+ if ( ! tracks || tracks . length === 0 ) {
444
+ throw new JitsiTrackError ( JitsiTrackErrors . TRACK_NO_STREAM_TRACKS_FOUND , null , null ) ;
445
+ }
446
+
447
+ if ( tracks . length > 1 ) {
448
+ throw new JitsiTrackError ( JitsiTrackErrors . TRACK_TOO_MANY_TRACKS_IN_STREAM , null , null ) ;
449
+ }
450
+
451
+ trackInfo . track = tracks [ 0 ] ;
452
+
453
+ return trackInfo ;
454
+ } ) ) ;
455
+ } ,
456
+
424
457
/**
425
458
* Create a TrackVADEmitter service that connects an audio track to an VAD (voice activity detection) processor in
426
459
* order to obtain VAD scores for individual PCM audio samples.
0 commit comments