Воспроизведение аудио одновременно - PullRequest
0 голосов
/ 19 марта 2020

Я хочу передать аудио с сервера NodeJS в клиентский браузер, используя socket.io и socket.io-stream, и я сделал это успешно, и у меня есть только одна проблема. Прежде всего, это сервер кодов. 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);
  });
});

клиент. 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();
    });
  });
});

проблема здесь в том, что я воспроизводю звук после того, как все фрагменты будут выдвинуты к списку, НО я хочу одновременно воспроизводить аудио по частям, не дожидаясь нажатия всех частей. Я надеюсь, что разъяснил свой вопрос, и любая помощь будет оценена.

1 Ответ

0 голосов
/ 19 марта 2020

ты пытался это сделать? stream.on("data", chunk => { audio.src = URL.createObjectURL(new Blob(parts)); audio.play(); parts.push(chunk); });

...