- if (captured) {
- ranges.push({ length: parseInt(captured[1], 10), offset: parseInt(captured[2], 10) })
+ const playlist = await VideoStreamingPlaylistModel.loadWithVideoAndFiles(playlistArg.id)
+
+ // For all the resolutions available for this video
+ for (const file of playlist.VideoFiles) {
+ const rangeHashes: { [range: string]: string } = {}
+ const fileWithPlaylist = file.withVideoOrPlaylist(playlist)
+
+ await VideoPathManager.Instance.makeAvailableVideoFile(fileWithPlaylist, videoPath => {
+
+ return VideoPathManager.Instance.makeAvailableResolutionPlaylistFile(fileWithPlaylist, async resolutionPlaylistPath => {
+ const playlistContent = await readFile(resolutionPlaylistPath)
+ const ranges = getRangesFromPlaylist(playlistContent.toString())
+
+ const fd = await open(videoPath, 'r')
+ for (const range of ranges) {
+ const buf = Buffer.alloc(range.length)
+ await read(fd, buf, 0, range.length, range.offset)
+
+ rangeHashes[`${range.offset}-${range.offset + range.length - 1}`] = sha256(buf)
+ }
+ await close(fd)
+
+ const videoFilename = file.filename
+ json[videoFilename] = rangeHashes
+ })
+ })