@@ -12,6 +12,7 @@ import {
1212 type SessionId ,
1313 type SessionInfo
1414} from "#src/models/session.ts" ;
15+ import { Recorder } from "#src/models/recorder.ts" ;
1516import { getWorker , type RtcWorker } from "#src/services/rtc.ts" ;
1617
1718const logger = new Logger ( "CHANNEL" ) ;
@@ -53,6 +54,7 @@ interface ChannelCreateOptions {
5354 key ?: string ;
5455 /** Whether to enable WebRTC functionality */
5556 useWebRtc ?: boolean ;
57+ useRecording ?: boolean ;
5658}
5759interface JoinResult {
5860 /** The channel instance */
@@ -87,6 +89,8 @@ export class Channel extends EventEmitter {
8789 public readonly sessions = new Map < SessionId , Session > ( ) ;
8890 /** mediasoup Worker handling this channel */
8991 private readonly _worker ?: RtcWorker ;
92+ /** Manages the recording of this channel, undefined if the feature is disabled */
93+ private recorder ?: Recorder ;
9094 /** Timeout for auto-closing empty channels */
9195 private _closeTimeout ?: NodeJS . Timeout ;
9296
@@ -102,7 +106,7 @@ export class Channel extends EventEmitter {
102106 issuer : string ,
103107 options : ChannelCreateOptions = { }
104108 ) : Promise < Channel > {
105- const { key, useWebRtc = true } = options ;
109+ const { key, useWebRtc = true , useRecording = true } = options ;
106110 const safeIssuer = `${ remoteAddress } ::${ issuer } ` ;
107111 const oldChannel = Channel . recordsByIssuer . get ( safeIssuer ) ;
108112 if ( oldChannel ) {
@@ -112,7 +116,7 @@ export class Channel extends EventEmitter {
112116 const channelOptions : ChannelCreateOptions & {
113117 worker ?: Worker ;
114118 router ?: Router ;
115- } = { key } ;
119+ } = { key, useRecording : useWebRtc && useRecording } ;
116120 if ( useWebRtc ) {
117121 channelOptions . worker = await getWorker ( ) ;
118122 channelOptions . router = await channelOptions . worker . createRouter ( {
@@ -183,6 +187,8 @@ export class Channel extends EventEmitter {
183187 const now = new Date ( ) ;
184188 this . createDate = now . toISOString ( ) ;
185189 this . remoteAddress = remoteAddress ;
190+ this . recorder = config . recording . enabled && options . useRecording ? new Recorder ( this ) : undefined ;
191+ this . recorder ?. todo ( ) ;
186192 this . key = key ? Buffer . from ( key , "base64" ) : undefined ;
187193 this . uuid = crypto . randomUUID ( ) ;
188194 this . name = `${ remoteAddress } *${ this . uuid . slice ( - 5 ) } ` ;
0 commit comments