Fix HLS audio desync on some videos
This commit is contained in:
parent
f65920b2ca
commit
0adbc73eb9
1 changed files with 13 additions and 7 deletions
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue