无法在音频流上设置 currentTime (socket-io-stream)

问题描述

我正在将带有 socket-io-stream 和 node.js 的音频文件从服务器流式传输到浏览器。

效果很好,但我想更改音频元素的 currentTime 属性。
我不确定,但似乎在收到最后一个块后浏览器无法播放,所以如果我告诉他将 currentTime 设置为 60,例如,它会将它设置在大约 3 或 4 的最后一个块(不知道怎么解释)

我做错了什么? socket-io-stream 事件是否适合使用? (我想是的,因为我只想设置一个 currentTime)

谢谢

这是代码(来自HTML5 Video: Streaming Video with Blob URLs

服务器

var stream = await ss.createStream();
let current_time = 60;
ss(socket).emit("send_audio",stream,current_time);
fs.createReadStream(somepath).pipe(stream);

客户

ss(socket).on("send_audio",function (stream,data) {
  // 1. Create a `MediaSource`
  var mediaSource = new MediaSource();
  // 2. Create an object URL from the `MediaSource`
  var url = URL.createObjectURL(mediaSource,{ type: "audio/mpeg" });

  // 3. Set the video's `src` to the object URL
  audio.src = url;

  // 4. On the `sourceopen` event,create a `SourceBuffer`
  var sourceBuffer = null;
  mediaSource.addEventListener("sourceopen",function () {
    sourceBuffer = mediaSource.addSourceBuffer(data.mime);

    sourceBuffer.addEventListener("updateend",appendToSourceBuffer);
  });

  var arrayOfBlobs = [];
  stream.on("data",function (chunk) {
    arrayOfBlobs.push(chunk);
    appendToSourceBuffer();
  });

  // 5. Use `SourceBuffer.appendBuffer()` to add all of the chunks to the audio
  function appendToSourceBuffer() {
    if (
      mediaSource.readyState === "open" &&
      sourceBuffer &&
      sourceBuffer.updating === false &&
      arrayOfBlobs[0] !== undefined
    ) {
      sourceBuffer.appendBuffer(arrayOfBlobs.shift());
    }
    audio.play();
    audio.currentTime = data.current_time;
  }
});


解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)