diff --git a/server/src/services/hls.service.ts b/server/src/services/hls.service.ts index 5237371f9b..ac2ff98537 100644 --- a/server/src/services/hls.service.ts +++ b/server/src/services/hls.service.ts @@ -80,15 +80,12 @@ export class HlsService extends BaseService { } async getSegment(auth: AuthDto, assetId: string, sessionId: string, variantIndex: number, filename: string) { - const t0 = performance.now(); await this.requireAccess({ auth, permission: Permission.AssetView, ids: [assetId] }); - const t1 = performance.now(); const session = await this.videoStreamRepository.getSession(sessionId); if (!session) { throw new NotFoundException('Session not found'); } - const t2 = performance.now(); const variantDir = StorageCore.getHlsVariantFolder({ ownerId: auth.user.id, sessionId, variantIndex }); const path = join(variantDir, filename); @@ -102,25 +99,11 @@ export class HlsService extends BaseService { this.websocketRepository.serverSend('HlsHeartbeat', { sessionId, variantIndex, segmentIndex }); if (await this.storageRepository.checkFileExists(path, constants.R_OK)) { - this.logger.log( - `[TIMING] getSegment(cached) session=${sessionId} variant=${variantIndex} file=${filename} ` + - `auth=${(t1 - t0).toFixed(1)}ms session=${(t2 - t1).toFixed(1)}ms ` + - `total=${(performance.now() - t0).toFixed(1)}ms`, - ); return response; } - const t3 = performance.now(); this.websocketRepository.serverSend('HlsSegmentRequest', { sessionId, assetId, variantIndex, segmentIndex }); await this.pendingSegments.wait(this.getSegmentKey({ sessionId, variantIndex, segmentIndex })); - const t4 = performance.now(); - - this.logger.log( - `[TIMING] getSegment(wait) session=${sessionId} variant=${variantIndex} file=${filename} ` + - `auth=${(t1 - t0).toFixed(1)}ms session=${(t2 - t1).toFixed(1)}ms ` + - `existsCheck=${(t3 - t2).toFixed(1)}ms wait=${(t4 - t3).toFixed(1)}ms ` + - `total=${(t4 - t0).toFixed(1)}ms`, - ); return response; } diff --git a/server/src/services/transcoding.service.ts b/server/src/services/transcoding.service.ts index 5e3a625289..506be153ce 100644 --- a/server/src/services/transcoding.service.ts +++ b/server/src/services/transcoding.service.ts @@ -165,12 +165,9 @@ export class TranscodingService extends BaseService { } private async startTranscode(session: Session, variantIndex: number, startSegment: number) { - const t0 = performance.now(); const { ffmpeg } = await this.getConfig({ withCache: true }); - const t1 = performance.now(); const asset = await this.videoStreamRepository.getForTranscoding(session.assetId); - const t2 = performance.now(); if (!asset) { this.logger.error(`Asset ${session.assetId} not found for HLS transcoding`); return; @@ -223,7 +220,6 @@ export class TranscodingService extends BaseService { await this.failSession(session, `Failed to start transcode: ${error?.message ?? 'unknown error'}`); return; } - const t3 = performance.now(); const args = config.getHlsCommand( { initFilename: 'init.mp4', @@ -241,19 +237,11 @@ export class TranscodingService extends BaseService { asset.videoStream, asset.audioStream ?? undefined, ); - const t4 = performance.now(); this.logger.log( `Starting HLS transcode for asset ${session.assetId} variant ${variantIndex} with command: ffmpeg ${args.join(' ')}`, ); const process = this.processRepository.spawn('ffmpeg', args, { stdio: ['ignore', 'ignore', 'pipe'] }); - const t5 = performance.now(); - this.attachProcessHandlers(process, session, variantIndex, t5); - this.logger.log( - `[TIMING] startTranscode session=${session.id} variant=${variantIndex} startSegment=${startSegment} ` + - `getConfig=${(t1 - t0).toFixed(1)}ms getAsset=${(t2 - t1).toFixed(1)}ms ` + - `config=${(t3 - t2).toFixed(1)}ms args=${(t4 - t3).toFixed(1)}ms ` + - `spawn=${(t5 - t4).toFixed(1)}ms total=${(t5 - t0).toFixed(1)}ms`, - ); + this.attachProcessHandlers(process, session, variantIndex); return process; } @@ -262,9 +250,8 @@ export class TranscodingService extends BaseService { return this.onSessionEnd({ sessionId: session.id }); } - private attachProcessHandlers(process: ChildProcess, session: Session, variantIndex: number, spawnTime: number) { + private attachProcessHandlers(process: ChildProcess, session: Session, variantIndex: number) { let stderr = ''; - let firstSegmentLogged = false; const variantDir = StorageCore.getHlsVariantFolder({ ownerId: session.ownerId, sessionId: session.id, @@ -284,13 +271,6 @@ export class TranscodingService extends BaseService { return; } const segmentIndex = Number.parseInt(match[1]); - if (!firstSegmentLogged) { - firstSegmentLogged = true; - this.logger.log( - `[TIMING] firstSegmentVisible session=${session.id} variant=${variantIndex} ` + - `segmentIndex=${segmentIndex} sinceSpawn=${(performance.now() - spawnTime).toFixed(1)}ms`, - ); - } session.lastCompletedSegment = segmentIndex; this.websocketRepository.serverSend('HlsSegmentResult', { sessionId: session.id,