+ it('Should not generate an upper resolution than original file', async function () {
+ this.timeout(400_000)
+
+ const resolutions = [ 240, 480 ]
+ await updateConf(resolutions)
+
+ await servers[0].config.updateExistingSubConfig({
+ newConfig: {
+ live: {
+ transcoding: {
+ alwaysTranscodeOriginalResolution: false
+ }
+ }
+ }
+ })
+
+ liveVideoId = await createLiveWrapper(true)
+
+ const ffmpegCommand = await commands[0].sendRTMPStreamInVideo({ videoId: liveVideoId, fixtureName: 'video_short2.webm' })
+ await waitUntilLivePublishedOnAllServers(servers, liveVideoId)
+ await waitJobs(servers)
+
+ await testLiveVideoResolutions({
+ originServer: servers[0],
+ sqlCommand: sqlCommandServer1,
+ servers,
+ liveVideoId,
+ resolutions,
+ objectStorage: false,
+ transcoded: true
+ })
+
+ await stopFfmpeg(ffmpegCommand)
+ await commands[0].waitUntilEnded({ videoId: liveVideoId })
+
+ await waitJobs(servers)
+
+ await waitUntilLivePublishedOnAllServers(servers, liveVideoId)
+
+ const video = await servers[0].videos.get({ id: liveVideoId })
+ const hlsFiles = video.streamingPlaylists[0].files
+
+ expect(video.files).to.have.lengthOf(0)
+ expect(hlsFiles).to.have.lengthOf(resolutions.length)
+
+ // eslint-disable-next-line @typescript-eslint/require-array-sort-compare
+ expect(getAllFiles(video).map(f => f.resolution.id).sort()).to.deep.equal(resolutions)
+ })
+
+ it('Should only keep the original resolution if all resolutions are disabled', async function () {
+ this.timeout(600_000)
+
+ await updateConf([])
+ liveVideoId = await createLiveWrapper(true)
+
+ const ffmpegCommand = await commands[0].sendRTMPStreamInVideo({ videoId: liveVideoId, fixtureName: 'video_short2.webm' })
+ await waitUntilLivePublishedOnAllServers(servers, liveVideoId)
+ await waitJobs(servers)
+
+ await testLiveVideoResolutions({
+ originServer: servers[0],
+ sqlCommand: sqlCommandServer1,
+ servers,
+ liveVideoId,
+ resolutions: [ 720 ],
+ objectStorage: false,
+ transcoded: true
+ })