@@ -11,6 +11,7 @@ import {
1111 SESSION_CLOSE_CODE ,
1212 type SessionId ,
1313} from "#src/models/session.ts" ;
14+ import { Recorder } from "#src/models/recorder.ts" ;
1415import { getWorker , type RtcWorker } from "#src/services/rtc.ts" ;
1516
1617const logger = new Logger ( "CHANNEL" ) ;
@@ -52,6 +53,7 @@ interface ChannelCreateOptions {
5253 key ?: string ;
5354 /** Whether to enable WebRTC functionality */
5455 useWebRtc ?: boolean ;
56+ useRecording ?: boolean ;
5557}
5658interface JoinResult {
5759 /** The channel instance */
@@ -86,6 +88,8 @@ export class Channel extends EventEmitter {
8688 public readonly sessions = new Map < SessionId , Session > ( ) ;
8789 /** mediasoup Worker handling this channel */
8890 private readonly _worker ?: RtcWorker ;
91+ /** Manages the recording of this channel, undefined if the feature is disabled */
92+ private recorder ?: Recorder ;
8993 /** Timeout for auto-closing empty channels */
9094 private _closeTimeout ?: NodeJS . Timeout ;
9195
@@ -101,7 +105,7 @@ export class Channel extends EventEmitter {
101105 issuer : string ,
102106 options : ChannelCreateOptions = { }
103107 ) : Promise < Channel > {
104- const { key, useWebRtc = true } = options ;
108+ const { key, useWebRtc = true , useRecording = true } = options ;
105109 const safeIssuer = `${ remoteAddress } ::${ issuer } ` ;
106110 const oldChannel = Channel . recordsByIssuer . get ( safeIssuer ) ;
107111 if ( oldChannel ) {
@@ -111,7 +115,7 @@ export class Channel extends EventEmitter {
111115 const channelOptions : ChannelCreateOptions & {
112116 worker ?: Worker ;
113117 router ?: Router ;
114- } = { key } ;
118+ } = { key, useRecording : useWebRtc && useRecording } ;
115119 if ( useWebRtc ) {
116120 channelOptions . worker = await getWorker ( ) ;
117121 channelOptions . router = await channelOptions . worker . createRouter ( {
@@ -182,6 +186,8 @@ export class Channel extends EventEmitter {
182186 const now = new Date ( ) ;
183187 this . createDate = now . toISOString ( ) ;
184188 this . remoteAddress = remoteAddress ;
189+ this . recorder = config . recording . enabled && options . useRecording ? new Recorder ( this ) : undefined ;
190+ this . recorder ?. todo ( ) ;
185191 this . key = key ? Buffer . from ( key , "base64" ) : undefined ;
186192 this . uuid = crypto . randomUUID ( ) ;
187193 this . name = `${ remoteAddress } *${ this . uuid . slice ( - 5 ) } ` ;
0 commit comments