问题描述
我正在将带有 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 (将#修改为@)