Воспроизведение аудио - React / NodeJS / MongoDB- GridFS

У меня есть следующая структура проекта:

  • NodeJS - мой бэкэнд: используется для загрузки.mp3 на мой mongodb и потокового воспроизведения. Я использовал GridFsBucket для загрузки / потока
  • React - мой интерфейс и работа с магазином Redux: у меня две страницы: первая для загрузки файла.mp3 с FormData, а вторая для потокового воспроизведения аудио.

Мой этап загрузки работает хорошо, я помещаю выбранный файл.mp3 на свой сервер и с помощью GridFS создаю свои коллекции на моем MongoDB (fs.files и fs.chunks).

Я играю свой.mp3 из бэкэнда по адресу http://site:4000/play/myMp3Code, это создает плеер, который воспроизводит мой.mp3. Так что все в порядке.

Моя проблема на этапе потокового воспроизведения в React, потому что чанки (это чанки?) Приходят в Redux, но я не знаю, как их воспроизвести с моей веб-страницы React.

Это моя игровая ручка на бэкенде

const filename = req.params.filename;

        const bucket = new mongoose.mongo.GridFSBucket(mongoose.connection.db, {
            chunkSizeBytes: 1024,
            bucketName: 'fs'
        });

        const downloadStream = bucket.openDownloadStreamByName(filename);

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

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

        downloadStream.on('end', () => {
            res.end();
        });

И мои действия на Redux

export const playTrack = (path, id) => {
    return async dispatch => {
        try {
            const track = await api.call('get',`tracks/${path}/${id}`);

            console.log("Track action: ", track);

        dispatch(currentTrack(track));
            dispatch(removeError());
        } catch (err) {
            const {error} = err.response.data;
            dispatch(addError(error.message));
        }
    };
};

Пример вывода console.log из действия Redux

���T!1AQa"q��2�#BR������3brCS��$���4Tcs�D��%��EUd����5����+!1AQ"2aBq#R3�$��?��v�.A  �UY�d[MVj�?�  1u
��D���MM1�u*곧TXR��X��A ,ְ���+#h�J��*)gQ��i�R:�Ut5�9���Ŋ�)ע%�r�X��c�&ȣ�����GD�B=c^�6T� 2y,�F���\*��
�H���*�Lҋ ....

Мой вопрос заключается в следующем: Как я могу играть в.mp3 прямо с моего интерфейса? Могу ли я воспроизвести эти данные из Reat?

Надеюсь, я все хорошо объяснил. Спасибо за ответы и за чтение

1 ответ

Я думаю, что поток в порядке, все, что вам нужно сделать, это отправить ответ с правильными заголовками: (Content-Type: audio/mpeg), и браузер должен воспроизвести его.

Другие вопросы по тегам