+ let line = `#EXT-X-STREAM-INF:${bandwidth},${resolution}`
+ if (file.fps) line += ',FRAME-RATE=' + file.fps
+
+ const codecs = await Promise.all([
+ getVideoStreamCodec(videoFilePath),
+ getAudioStreamCodec(videoFilePath)
+ ])
+
+ line += `,CODECS="${codecs.filter(c => !!c).join(',')}"`
+
+ masterPlaylists.push(line)
+ masterPlaylists.push(playlistFilename)
+ })
+ }
+
+ if (playlist.playlistFilename) {
+ await video.removeStreamingPlaylistFile(playlist, playlist.playlistFilename)
+ }
+ playlist.playlistFilename = generateHLSMasterPlaylistFilename(video.isLive)
+
+ const masterPlaylistPath = VideoPathManager.Instance.getFSHLSOutputPath(video, playlist.playlistFilename)
+ await writeFile(masterPlaylistPath, masterPlaylists.join('\n') + '\n')
+
+ if (playlist.storage === VideoStorage.OBJECT_STORAGE) {
+ playlist.playlistUrl = await storeHLSFileFromFilename(playlist, playlist.playlistFilename)
+ await remove(masterPlaylistPath)
+ }
+
+ return playlist.save()
+ })