首页 > 解决方案 > Nodejs - 如何将音频文件缓冲区数据流式传输到 nodejs 服务器

问题描述

我目前正在使用 React Native 构建一个录音应用程序,并使用 Express 作为服务器。我要做的是将音频文件流式传输到服务器,然后将其存储在 s3 存储桶中,同时还将链接发送回客户端。

目前我正在从一个帖子发送的缓冲区中获取块(见下文)。见下文。我试图首先创建一个 mp3 文件,这种情况正在发生,但是音频不是......也不是任何东西。

我的问题是:如何将数据流式传输到服务器然后创建音频文件?

谢谢你的帮助:

// 邮政

export const audioStream = async (chunkData) => {
  console.log(chunkData);
  try {
    const data = await axiosAPI.post('/audio', {
      chunkData
    });
  } catch (error) {
    console.log(error)
  }
};

// 服务器接收到的数据

{
  chunkData: {
    type: 'Buffer',
    data: [
        1,   0, 255, 255, 231, 255,  18,   0, 255, 255, 240, 255,
       30,   0,  17,   0, 231, 255,  18,   0,   5,   0, 252, 255,
      255, 255, 255, 255,   5,   0,   4,   0,  14,   0, 245, 255,
      255, 255,  18,   0, 248, 255, 244, 255,  12,   0,   7,   0,
        1,   0, 254, 255, 245, 255,  18,   0,   3,   0, 251, 255,
      247, 255,   0,   0,  15,   0, 251, 255, 251, 255, 249, 255,
       10,   0,   5,   0, 244, 255,   1,   0,   2,   0,  17,   0,
      251, 255,   3,   0,  12,   0, 244, 255,  13,   0, 238, 255,
      243, 255,   3,   0,
      ... 1948 more items
    ]
  }
}

// 音频控制器

const fs = require('fs');

async function audioUploadStream(req, res) {
  const myWriteStream = fs.createWriteStream(__dirname + '/testAudio.mp3');

  myWriteStream.on("data", function (chunk) {
    console.log("new chunk received");
    myWriteStream.write(chunk);
  });

  return res.status(200).send({message: "streaming..."})
};

module.exports = {audioUploadStream}

// 音频路由器

const express = require("express");
const router = express.Router();

// Controller
const {audioUploadStream} = require('./../controllers/audioController');

// @route api/upload
// @desc Upload image

router.post("/", audioUploadStream);

module.exports = router;

标签: node.jsaudiostreaming

解决方案


推荐阅读