【问题标题】:Play Audio Simultaneously同时播放音频
【发布时间】:2020-03-19 16:36:54
【问题描述】:

我想使用 socket.io 和 socket.io-stream 将音频从 NodeJS 服务器流式传输到客户端浏览器,我成功地做到了,只有一个问题。 首先,这是代码 server.js

const express = require("express");
const app = express();
const server = require("http").Server(app);
const port = process.env.port || 8080;

const path = require("path");
const fs = require("fs");
const io = require("socket.io")(server);
const ss = require("socket.io-stream");

app.use(express.static(path.join(__dirname, "public")));

server.listen(port, () => {
  console.log(`Server listening on ${port}`);
});

io.on("connection", socket => {
  socket.emit("start", { hello: "world!" });
  socket.on("stream", data => {
    let stream = ss.createStream();
    let filename = path.join(__dirname, `/clips/Wegz.mp3`);

    ss(socket).emit("audio-stream", stream, { name: filename });
    fs.createReadStream(filename).pipe(stream);
  });
});

client.js

var socket = io("http://localhost:" + window.location.port);
var audio = document.getElementById("audio");

socket.on("start", function(data) {
  socket.emit("stream", { Data: "you can send any data back" });
  ss(socket).on("audio-stream", function(stream, data) {
    let parts = [];
    stream.on("data", chunk => {
      parts.push(chunk);
    });
    stream.on("end", function() {
      console.log(i);
      audio.src = URL.createObjectURL(new Blob(parts));
      audio.play();
    });
  });
});

这里的问题是我在将所有块推送到列表后播放音频但我想逐块同时播放音频而不等待所有部分被推送。 我希望我澄清了我的问题,任何帮助将不胜感激。

【问题讨论】:

    标签: node.js audio websocket socket.io nodejs-stream


    【解决方案1】:

    您尝试过这样做吗? stream.on("data", chunk => { audio.src = URL.createObjectURL(new Blob(parts)); audio.play(); parts.push(chunk); });

    【讨论】:

    • 我试过了,但是它播放得太快了,所以所有的块都重叠了,最后它播放了整个轨道,所以结果几乎和上面的代码一样。
    • 可能你可以检查audio.src是否有值,如果有值则播放audio&on data方法只需在audio.src中添加块,不要覆盖。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多