From 11fd3a4618687b8e66cf5cf4ccabacd427721527 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 4 Nov 2024 09:50:15 +0100 Subject: [PATCH] Correctly delete web videos with hls without audio --- packages/tests/src/api/transcoding/hls.ts | 13 ++++++++++++- .../src/api/transcoding/split-audio-and-video.ts | 11 +++++++++++ .../shared/job-builders/abstract-job-builder.ts | 7 +++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/tests/src/api/transcoding/hls.ts b/packages/tests/src/api/transcoding/hls.ts index 9bccb548f..4a5f703db 100644 --- a/packages/tests/src/api/transcoding/hls.ts +++ b/packages/tests/src/api/transcoding/hls.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ -import { join } from 'path' import { HttpStatusCode } from '@peertube/peertube-models' import { areMockObjectStorageTestsDisabled } from '@peertube/peertube-node-utils' import { @@ -15,6 +14,7 @@ import { import { DEFAULT_AUDIO_RESOLUTION } from '@peertube/peertube-server/core/initializers/constants.js' import { checkDirectoryIsEmpty, checkTmpIsEmpty } from '@tests/shared/directories.js' import { completeCheckHlsPlaylist } from '@tests/shared/streaming-playlists.js' +import { join } from 'path' describe('Test HLS videos', function () { let servers: PeerTubeServer[] = [] @@ -49,6 +49,17 @@ describe('Test HLS videos', function () { await completeCheckHlsPlaylist({ servers, videoUUID: uuid, hlsOnly, objectStorageBaseUrl }) }) + it('Should upload a video without audio', async function () { + this.timeout(120_000) + + const { uuid } = await servers[0].videos.upload({ attributes: { name: 'no audio', fixture: 'video_short_no_audio.mp4' } }) + videoUUIDs.push(uuid) + + await waitJobs(servers) + + await completeCheckHlsPlaylist({ servers, videoUUID: uuid, hlsOnly, hasAudio: false, objectStorageBaseUrl }) + }) + it('Should upload an audio file and transcode it to HLS', async function () { this.timeout(120000) diff --git a/packages/tests/src/api/transcoding/split-audio-and-video.ts b/packages/tests/src/api/transcoding/split-audio-and-video.ts index 487ae6ade..bd213c135 100644 --- a/packages/tests/src/api/transcoding/split-audio-and-video.ts +++ b/packages/tests/src/api/transcoding/split-audio-and-video.ts @@ -68,6 +68,17 @@ describe('Test HLS with audio and video splitted', function () { }) }) + it('Should upload a video without audio', async function () { + this.timeout(120_000) + + const { uuid } = await servers[0].videos.upload({ attributes: { name: 'no audio', fixture: 'video_short_no_audio.mp4' } }) + videoUUIDs.push(uuid) + + await waitJobs(servers) + + await completeCheckHlsPlaylist({ servers, videoUUID: uuid, hlsOnly, hasAudio: false, objectStorageBaseUrl }) + }) + it('Should update the video', async function () { this.timeout(30000) diff --git a/server/core/lib/transcoding/shared/job-builders/abstract-job-builder.ts b/server/core/lib/transcoding/shared/job-builders/abstract-job-builder.ts index 86d11134d..672fec6bc 100644 --- a/server/core/lib/transcoding/shared/job-builders/abstract-job-builder.ts +++ b/server/core/lib/transcoding/shared/job-builders/abstract-job-builder.ts @@ -72,6 +72,8 @@ export abstract class AbstractJobBuilder

{ // HLS version of max resolution if (CONFIG.TRANSCODING.HLS.ENABLED === true) { + const hasSplitAndioTranscoding = CONFIG.TRANSCODING.HLS.SPLIT_AUDIO_AND_VIDEO && videoFile.hasAudio() + // We had some issues with a web video quick transcoded while producing a HLS version of it const copyCodecs = !quickTranscode @@ -79,7 +81,8 @@ export abstract class AbstractJobBuilder

{ hlsPayloads.push( this.buildHLSJobPayload({ - deleteWebVideoFiles: !CONFIG.TRANSCODING.HLS.SPLIT_AUDIO_AND_VIDEO && !CONFIG.TRANSCODING.WEB_VIDEOS.ENABLED, + deleteWebVideoFiles: !CONFIG.TRANSCODING.WEB_VIDEOS.ENABLED && !hasSplitAndioTranscoding, + separatedAudio: CONFIG.TRANSCODING.HLS.SPLIT_AUDIO_AND_VIDEO, copyCodecs, @@ -91,7 +94,7 @@ export abstract class AbstractJobBuilder

{ }) ) - if (CONFIG.TRANSCODING.HLS.SPLIT_AUDIO_AND_VIDEO && videoFile.hasAudio()) { + if (hasSplitAndioTranscoding) { hlsAudioAlreadyGenerated = true hlsPayloads.push(