+
+ const playlist = Object.assign(playlistArg, { Video: video })
+ const serverActor = await getServerActor()
+
+ logger.info('Duplicating %s streaming playlist in videos redundancy with "%s" strategy.', video.url, strategy, lTags(video.uuid))
+
+ const destDirectory = join(HLS_REDUNDANCY_DIRECTORY, video.uuid)
+ const masterPlaylistUrl = playlist.getMasterPlaylistUrl(video)
+
+ const maxSizeKB = this.getTotalFileSizes([], [ playlist ]) / 1000
+ const toleranceKB = maxSizeKB + ((5 * maxSizeKB) / 100) // 5% more tolerance
+ await downloadPlaylistSegments(masterPlaylistUrl, destDirectory, VIDEO_IMPORT_TIMEOUT, toleranceKB)
+
+ const createdModel: MVideoRedundancyStreamingPlaylistVideo = await VideoRedundancyModel.create({
+ expiresOn,
+ url: getLocalVideoCacheStreamingPlaylistActivityPubUrl(video, playlist),
+ fileUrl: generateHLSRedundancyUrl(video, playlistArg),
+ strategy,
+ videoStreamingPlaylistId: playlist.id,
+ actorId: serverActor.id
+ })
+
+ createdModel.VideoStreamingPlaylist = playlist
+
+ await sendCreateCacheFile(serverActor, video, createdModel)
+
+ logger.info('Duplicated playlist %s -> %s.', masterPlaylistUrl, createdModel.url, lTags(video.uuid))