2

ファイル、画像、オーディオ、およびビデオを保存するために、 gridfs-streamでマングースを使用しています。

問題は、ビデオで別の位置/時間を選択すると停止し、どの曲を再生しても同じことが起こります。

誰かが私を助けることができますか?

これは私のコードです:

exports.readById = function(req, res) {
    var id = req.modelName._id;

    gfs.findOne({
        _id: id
    }, function(err, file) {
        if (err) {
            return res.status(400).send({
                err: errorHandler.getErrorMessage(err)
            });
        }
        if (!file) {
            return res.status(404).send({
                err: 'No se encontró el registro especificado.'
            });
        }

        res.writeHead(200, {
            'Accept-Ranges': 'bytes',
            'Content-Length': file.length,
            'Content-Type': file.contentType
        });

        var readStream = gfs.createReadStream({
            _id: file._id
        });

        readStream.on('error', function(err) {
            if (err) {
                return res.status(400).send({
                    err: errorHandler.getErrorMessage(err)
                });
            }
        });

        readStream.pipe(res);
    });
};
4

1 に答える 1

4

オプションを使用するために必要ですrange。これにより、ビデオ内の別の位置を選択して再生できます。つまり、サーバーが必要なデータで応答するように、サーバーにリクエストを送信します。

これが完全なコードです。誰かに役立つことを願っています。

ここで例を見つけました。

exports.readById = function(req, res) {
    var id = req.modelName._id;

    gfs.findOne({
        _id: id
    }, function(err, file) {
        if (err) {
            return res.status(400).send({
                err: errorHandler.getErrorMessage(err)
            });
        }
        if (!file) {
            return res.status(404).send({
                err: 'No se encontró el registro especificado.'
            });
        }

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

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

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

            gfs.createReadStream({
                _id: file._id,
                range: {
                    startPos: start,
                    endPos: end
                }
            }).pipe(res);
        } else {
            res.header('Content-Length', file.length);
            res.header('Content-Type', file.contentType);

            gfs.createReadStream({
                _id: file._id
            }).pipe(res);
        }
    });
};
于 2016-05-25T04:40:35.480 に答える