X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fobject-storage-proxy.ts;h=32b8d21dab1b39b6351201265124861a045647b2;hb=e364e31e25bd1d4b8d801c845a96d6be708f0a18;hp=aa853a383abbfdbe50c4ea672ad0a785023ffa21;hpb=71e3e879c0616882ee82a0e44f8c2e5ee9698a3e;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/object-storage-proxy.ts b/server/controllers/object-storage-proxy.ts index aa853a383..32b8d21da 100644 --- a/server/controllers/object-storage-proxy.ts +++ b/server/controllers/object-storage-proxy.ts @@ -15,6 +15,7 @@ import { } from '@server/middlewares' import { HttpStatusCode } from '@shared/models' import { buildReinjectVideoFileTokenQuery, doReinjectVideoFileToken } from './shared/m3u8-playlist' +import { GetObjectCommandOutput } from '@aws-sdk/client-s3' const objectStorageProxyRouter = express.Router() @@ -46,11 +47,13 @@ async function proxifyWebTorrent (req: express.Request, res: express.Response) { logger.debug('Proxifying WebTorrent file %s from object storage.', filename) try { - const stream = await getWebTorrentFileReadStream({ + const { response: s3Response, stream } = await getWebTorrentFileReadStream({ filename, rangeHeader: req.header('range') }) + setS3Headers(res, s3Response) + return stream.pipe(res) } catch (err) { return handleObjectStorageFailure(res, err) @@ -65,12 +68,14 @@ async function proxifyHLS (req: express.Request, res: express.Response) { logger.debug('Proxifying HLS file %s from object storage.', filename) try { - const stream = await getHLSFileReadStream({ + const { response: s3Response, stream } = await getHLSFileReadStream({ playlist: playlist.withVideo(video), filename, rangeHeader: req.header('range') }) + setS3Headers(res, s3Response) + const streamReplacer = filename.endsWith('.m3u8') && doReinjectVideoFileToken(req) ? new StreamReplacer(line => injectQueryToPlaylistUrls(line, buildReinjectVideoFileTokenQuery(req))) : new PassThrough() @@ -102,3 +107,9 @@ function handleObjectStorageFailure (res: express.Response, err: Error) { type: err.name }) } + +function setS3Headers (res: express.Response, s3Response: GetObjectCommandOutput) { + if (s3Response.$metadata.httpStatusCode === HttpStatusCode.PARTIAL_CONTENT_206) { + res.status(HttpStatusCode.PARTIAL_CONTENT_206) + } +}