показ видео с использованием response-native-video, из express с использованием GridFSBucket - PullRequest
0 голосов
/ 31 мая 2018

Мне сложно показать видео с помощью response-native-video.Сервер использует Express и использует GridFSBucket для извлечения видео из mongodb.

Проблема заключается в следующем: видео из GridFSBucket не будет отображаться.Но когда я попытался поместить видео в общую папку, оно будет отображаться.

Итак, я предполагаю, что что-то не так с тем, как я обслуживаю видео.Вот мой код с сервера:

const bucket = new GridFSBucket(db.original(), { bucketName: "fs" });
const fileDetail = await db.original().collection("fs.files").findOne({_id: idObj});
if (isNullOrUndefined(fileDetail)) {
    throw new NoContentException(`asset not found for id ${id}`);
}

const range = req.headers["range"]
if (range && typeof range === "string") {
    const parts = range.replace(/bytes=/, "").split("-");
    const partialstart = parts[0];
    const partialend = parts[1];

    const start = parseInt(partialstart, 10);
    const end = partialend ? parseInt(partialend, 10) : fileDetail.length - 1;
    const chunksize = (end - start) + 1;

    res.writeHead(206, {
        'Accept-Ranges': 'bytes',
        'Content-Length': chunksize,
        'Content-Range': 'bytes ' + start + '-' + end + '/' + fileDetail.length,
        'Content-Type': fileDetail.contentType
    });

    bucket.openDownloadStream(idObj, {start, end}).pipe(res);
} else {
    res.header('Content-Length', fileDetail.length);
    res.header('Content-Type', fileDetail.contentType);

    bucket.openDownloadStream(idObj).pipe(res);
}

Заранее спасибо за ваш ответ ^ _ ^

1 Ответ

0 голосов
/ 12 июня 2018

Я нашел решение.Строка:

bucket.openDownloadStream(idObj, {start, end}).pipe(res);

должна быть:

bucket.openDownloadStream(idObj, {start, end: end - 1}).pipe(res);
...