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

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.outputOptions(hlsOptions).output(m3u8Path);
ffmpegCommand.on('error', (err) => { ffmpegCommand.on('error', (err) => {
console.error(`[HLS] FFmpeg Error for ${progressKey}:`, err.message); 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) => { ffmpegCommand.on('progress', (progress) => {
const timemarkSeconds = parseTimemarkToSeconds(progress.timemark || '0'); const timemarkSeconds = parseTimemarkToSeconds(progress.timemark || '0');
const absoluteSeconds = startTime + (isFinite(timemarkSeconds) ? timemarkSeconds : 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 broadcastRoomId = `${baseProgressKey}${subtitleSuffix}`;
const broadcastKey = subtitleIndex && subtitleIndex !== '-1' ? `${key}-sub${subtitleIndex}` : key; const broadcastKey = subtitleIndex && subtitleIndex !== '-1' ? `${key}-sub${subtitleIndex}` : key;
progressMap[broadcastRoomId] = progressState;
broadcastWs(broadcastRoomId, { type: 'progress', key: broadcastKey, progress: progressState }); broadcastWs(broadcastRoomId, { type: 'progress', key: broadcastKey, progress: progressState });
if (!isPersistent) { if (!isPersistent) {
console.log(`[FFmpeg] ${progressKey} | ${progress.timemark} | ${sanitizeNumber(progress.currentFps) ?? '-'}fps | ${sanitizeNumber(progress.currentKbps) ?? '-'}kbps | ${percent}%`); 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.`); console.log(`[FFmpeg] ${progressKey} HLS transcode completed.`);
const broadcastRoomId = `${baseProgressKey}${subtitleSuffix}`; const broadcastRoomId = `${baseProgressKey}${subtitleSuffix}`;
const broadcastKey = subtitleIndex && subtitleIndex !== '-1' ? `${key}-sub${subtitleIndex}` : key; const broadcastKey = subtitleIndex && subtitleIndex !== '-1' ? `${key}-sub${subtitleIndex}` : key;
broadcastWs(broadcastRoomId, {
type: 'progress', const finishedState = {
key: broadcastKey,
progress: {
status: 'finished', status: 'finished',
percent: 100, percent: 100,
details: isPersistent ? '预切片完成' : '处理完成' details: isPersistent ? '预切片完成' : '处理完成'
} };
progressMap[broadcastRoomId] = finishedState;
broadcastWs(broadcastRoomId, {
type: 'progress',
key: broadcastKey,
progress: finishedState
}); });
hlsProcesses.delete(progressKey); hlsProcesses.delete(progressKey);
}); });