mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-03 01:39:37 +02:00
Ensure ffmpeg is killed
This commit is contained in:
parent
3e69a6ce19
commit
1a5c4ff11d
3 changed files with 21 additions and 7 deletions
|
@ -119,7 +119,9 @@ export class FFmpegCommandWrapper {
|
||||||
return new Promise<void>((res, rej) => {
|
return new Promise<void>((res, rej) => {
|
||||||
let shellCommand: string
|
let shellCommand: string
|
||||||
|
|
||||||
this.command.on('start', cmdline => { shellCommand = cmdline })
|
this.command.on('start', cmdline => {
|
||||||
|
shellCommand = cmdline
|
||||||
|
})
|
||||||
|
|
||||||
this.command.on('error', (err: Error & { stdout?: string, stderr?: string }, stdout, stderr) => {
|
this.command.on('error', (err: Error & { stdout?: string, stderr?: string }, stdout, stderr) => {
|
||||||
if (silent !== true) this.logger.error('Error in ffmpeg.', { err, stdout, stderr, shellCommand, ...this.lTags })
|
if (silent !== true) this.logger.error('Error in ffmpeg.', { err, stdout, stderr, shellCommand, ...this.lTags })
|
||||||
|
@ -166,12 +168,14 @@ export class FFmpegCommandWrapper {
|
||||||
// Run encoder builder depending on available encoders
|
// Run encoder builder depending on available encoders
|
||||||
// Try encoders by priority: if the encoder is available, run the chosen profile or fallback to the default one
|
// Try encoders by priority: if the encoder is available, run the chosen profile or fallback to the default one
|
||||||
// If the default one does not exist, check the next encoder
|
// If the default one does not exist, check the next encoder
|
||||||
async getEncoderBuilderResult (options: EncoderOptionsBuilderParams & {
|
async getEncoderBuilderResult (
|
||||||
streamType: 'video' | 'audio'
|
options: EncoderOptionsBuilderParams & {
|
||||||
input: string
|
streamType: 'video' | 'audio'
|
||||||
|
input: string
|
||||||
|
|
||||||
videoType: 'vod' | 'live'
|
videoType: 'vod' | 'live'
|
||||||
}) {
|
}
|
||||||
|
) {
|
||||||
if (!this.availableEncoders) {
|
if (!this.availableEncoders) {
|
||||||
throw new Error('There is no available encoders')
|
throw new Error('There is no available encoders')
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,4 +30,10 @@ export class FFmpegContainer {
|
||||||
|
|
||||||
return this.commandWrapper.runCommand({ silent: !logError })
|
return this.commandWrapper.runCommand({ silent: !logError })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
forceKill () {
|
||||||
|
if (!this.commandWrapper) return
|
||||||
|
|
||||||
|
this.commandWrapper.getCommand().kill('SIGKILL')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,8 +303,10 @@ export async function muxToMergeVideoFiles (options: {
|
||||||
|
|
||||||
logger.info(`Muxing files for video ${video.url}`, { inputs: inputsToLog, ...lTags(video.uuid) })
|
logger.info(`Muxing files for video ${video.url}`, { inputs: inputsToLog, ...lTags(video.uuid) })
|
||||||
|
|
||||||
|
const ffmpegContainer = new FFmpegContainer(getFFmpegCommandWrapperOptions('vod'))
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await new FFmpegContainer(getFFmpegCommandWrapperOptions('vod')).mergeInputs({
|
await ffmpegContainer.mergeInputs({
|
||||||
inputs,
|
inputs,
|
||||||
output,
|
output,
|
||||||
logError: false,
|
logError: false,
|
||||||
|
@ -329,6 +331,8 @@ export async function muxToMergeVideoFiles (options: {
|
||||||
}
|
}
|
||||||
|
|
||||||
throw err
|
throw err
|
||||||
|
} finally {
|
||||||
|
ffmpegContainer.forceKill()
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
for (const destination of tmpDestinations) {
|
for (const destination of tmpDestinations) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue