Chrome сбрасывает аудио позицию на 0 при изменении текущей позиции с использованием currentTime аудиоэлемента в HTML5 (хранится с использованием multer в чанках) - PullRequest
0 голосов
/ 13 октября 2019

Когда я пытаюсь изменить положение песни (хранящейся в чанках, используя multer), используя свойство currentTime в chrome, используя элемент audio, он сбрасывает позицию в 0, но он отлично работает в Firefox. Но когда я пытаюсь изменить положение песни (полная песня, т.е. не хранится в чанках) в chrome, она работает нормально.

Вот что я сделал: 1. Вот как я сохранил песню в mongodb (чанками). ).

const { Readable } = require('stream');
app.post('/tracks', (req, res) => {
    const storage = multer.memoryStorage();
    const upload = multer({ storage: storage, limits: { fields: 1, fileSize: 20000000, files: 1, parts: 2 } });
    upload.single('track')(req, res, (err) => {
        if (err) {
            console.log(err);
            return res.status(400).json({ message: 'Upload Request Validation Failed' });
        } else if (!req.body.name) {
            return res.status(400).json({ message: 'No track name in request body' });
        }

        let trackName = req.body.name;

        // Covert buffer to Readable Stream
        const readableTrackStream = new Readable();
        readableTrackStream.push(req.file.buffer);
        readableTrackStream.push(null);

        let bucket = new mongodb.GridFSBucket(db, {
            bucketName: 'tracks'
        });

        let uploadStream = bucket.openUploadStream(trackName);
        let id = uploadStream.id;
        readableTrackStream.pipe(uploadStream);

        uploadStream.on('error', () => {
            return res.status(500).json({ message: 'Error uploading file' });
        });

        uploadStream.on('finish', () => {
            return res.status(201).json({ message: 'File uploaded successfully, stored under Mongo ObjectID: ' + id });
        });
    });
});

Вот как я выбираю песню:

        app.get('/tracks/:trackID', (req, res) => {
            try {
                var trackID = new ObjectID(req.params.trackID);
            } catch (err) {
                return res.status(400).json({
                    message:
                        'Invalid trackID in URL parameter. Must be a single String of 12 bytes or a string of 24 hex characters'
                });
            }
            res.set('content-type', 'audio/mp3');
            res.set('accept-ranges', 'bytes');

            let bucket = new mongodb.GridFSBucket(db, {
                bucketName: 'tracks'
            });

            let downloadStream = bucket.openDownloadStream(trackID);

            downloadStream.on('data', (chunk) => {
                res.write(chunk);
            });

            downloadStream.on('error', () => {
                res.sendStatus(404);
            });

            downloadStream.on('end', () => {
                res.end();
            });
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...