Fix HLS audio desync on some videos

This commit is contained in:
Chocobozzz 2024-06-12 09:04:00 +02:00
parent f65920b2ca
commit 0adbc73eb9
No known key found for this signature in database
GPG Key ID: 583A612D890159BE

View File

@ -112,8 +112,8 @@ export class FFmpegVOD {
return this.ended
}
private async buildWebVideoCommand (options: TranscodeVODOptions) {
const { resolution, fps, inputPath } = options
private async buildWebVideoCommand (options: TranscodeVODOptions & { canCopyAudio?: boolean, canCopyVideo?: boolean }) {
const { resolution, fps, inputPath, canCopyAudio = true, canCopyVideo = true } = options
if (resolution === VideoResolution.H_NOVIDEO) {
presetOnlyAudio(this.commandWrapper)
@ -136,8 +136,8 @@ export class FFmpegVOD {
resolution,
input: inputPath,
canCopyAudio: true,
canCopyVideo: true,
canCopyAudio,
canCopyVideo,
fps,
scaleFilterValue
})
@ -193,9 +193,15 @@ export class FFmpegVOD {
const videoPath = this.getHLSVideoPath(options)
if (options.copyCodecs) presetCopy(this.commandWrapper)
else if (options.resolution === VideoResolution.H_NOVIDEO) presetOnlyAudio(this.commandWrapper)
else await this.buildWebVideoCommand(options)
if (options.copyCodecs) {
presetCopy(this.commandWrapper)
} else if (options.resolution === VideoResolution.H_NOVIDEO) {
presetOnlyAudio(this.commandWrapper)
} else {
// If we cannot copy codecs, we do not copy them at all to prevent issues like audio desync
// See for example https://github.com/Chocobozzz/PeerTube/issues/6438
await this.buildWebVideoCommand({ ...options, canCopyAudio: false, canCopyVideo: false })
}
this.addCommonHLSVODCommandOptions(command, videoPath)
}