From fee1576e96a3e8c362c10bceb9cfd13daa074ab4 Mon Sep 17 00:00:00 2001 From: CN-JS-HuiBai Date: Sat, 4 Apr 2026 01:04:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ffmpeg=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/server.js b/server.js index 1fe4359..9ac3d8d 100644 --- a/server.js +++ b/server.js @@ -586,6 +586,39 @@ app.get('/api/hls/segment.ts', async (req, res) => { console.error('HLS FFmpeg Error:', err.message); }); + ffmpegCommand.on('progress', (progress) => { + const timemarkSeconds = parseTimemarkToSeconds(progress.timemark || '0'); + const absoluteSeconds = startTime + (isFinite(timemarkSeconds) ? timemarkSeconds : 0); + const totalDuration = parseFloat(sourceMetadata?.format?.duration || 0); + + let percent = 0; + if (totalDuration > 0) { + percent = Math.min(Math.max(Math.round((absoluteSeconds / totalDuration) * 100), 0), 100); + } + + const progressState = { + status: 'transcoding', + percent, + frame: progress.frames || null, + fps: progress.currentFps || null, + bitrate: progress.currentKbps || null, + timemark: progress.timemark || null, + absoluteSeconds, + duration: totalDuration || null, + startSeconds: startTime, + details: `处理进度 ${percent}%`, + mp4Url: null + }; + progressMap[progressKey] = progressState; + broadcastWs(progressKey, { type: 'progress', key, progress: progressState }); + + console.log(`[FFmpeg] ${progressKey} | ${progress.timemark} | ${progress.currentFps}fps | ${progress.currentKbps}kbps | ${percent}%`); + }); + + ffmpegCommand.on('end', () => { + console.log(`[FFmpeg] ${progressKey} HLS transcode completed.`); + }); + ffmpegCommand.run(); currentProcess = { command: ffmpegCommand, currentSeg: seg }; hlsProcesses.set(progressKey, currentProcess);