修复无法显示转码进度的问题

This commit is contained in:
2026-04-10 01:05:15 +08:00
parent 23c052bc76
commit cc40f1920c

View File

@@ -997,8 +997,20 @@ const startHlsTranscode = async (bucket, key, seg, requestedEncoder, requestedDe
ffmpegCommand.outputOptions(hlsOptions).output(m3u8Path);
ffmpegCommand.on('error', (err) => {
console.error(`[HLS] FFmpeg Error for ${progressKey}:`, err.message);
const broadcastRoomId = `${baseProgressKey}${subtitleSuffix}`;
const broadcastKey = subtitleIndex && subtitleIndex !== '-1' ? `${key}-sub${subtitleIndex}` : key;
const failedState = {
status: 'failed',
percent: 0,
details: `FFmpeg Error: ${err.message}`,
mp4Url: null
};
progressMap[broadcastRoomId] = failedState;
broadcastWs(broadcastRoomId, { type: 'progress', key: broadcastKey, progress: failedState });
hlsProcesses.delete(progressKey);
});
ffmpegCommand.on('progress', (progress) => {
const timemarkSeconds = parseTimemarkToSeconds(progress.timemark || '0');
const absoluteSeconds = startTime + (isFinite(timemarkSeconds) ? timemarkSeconds : 0);
@@ -1024,10 +1036,13 @@ const startHlsTranscode = async (bucket, key, seg, requestedEncoder, requestedDe
};
const broadcastRoomId = `${baseProgressKey}${subtitleSuffix}`;
const broadcastKey = subtitleIndex && subtitleIndex !== '-1' ? `${key}-sub${subtitleIndex}` : key;
progressMap[broadcastRoomId] = progressState;
broadcastWs(broadcastRoomId, { type: 'progress', key: broadcastKey, progress: progressState });
if (!isPersistent) {
console.log(`[FFmpeg] ${progressKey} | ${progress.timemark} | ${sanitizeNumber(progress.currentFps) ?? '-'}fps | ${sanitizeNumber(progress.currentKbps) ?? '-'}kbps | ${percent}%`);
}
@@ -1037,14 +1052,18 @@ const startHlsTranscode = async (bucket, key, seg, requestedEncoder, requestedDe
console.log(`[FFmpeg] ${progressKey} HLS transcode completed.`);
const broadcastRoomId = `${baseProgressKey}${subtitleSuffix}`;
const broadcastKey = subtitleIndex && subtitleIndex !== '-1' ? `${key}-sub${subtitleIndex}` : key;
const finishedState = {
status: 'finished',
percent: 100,
details: isPersistent ? '预切片完成' : '处理完成'
};
progressMap[broadcastRoomId] = finishedState;
broadcastWs(broadcastRoomId, {
type: 'progress',
key: broadcastKey,
progress: {
status: 'finished',
percent: 100,
details: isPersistent ? '预切片完成' : '处理完成'
}
progress: finishedState
});
hlsProcesses.delete(progressKey);
});