修复无法显示转码进度的问题
This commit is contained in:
29
server.js
29
server.js
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user