gpt4 book ai didi

javascript - 如何使用 node.js 和 socket.io 通过 WebSockets 流式传输 MP3 数据?

转载 作者:IT老高 更新时间:2023-10-28 22:12:12 31 4
gpt4 key购买 nike

我在使用 node.js 和 socket.io 通过 WebSocket 传输 MP3 数据时遇到问题。一切似乎都正常,但 decodeAudioData 对我不公平。

这是我的玩具服务器:

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')

app.listen(8081);

function handler (req, res) {
res.writeHead(200, {
'Content-Type': 'text/html',
});
res.end('Hello, world!');
}

io.configure('development', function() {
io.set('log level', 1);

io.set('transports', [ 'websocket' ]);
});

io.sockets.on('connection', function (socket) {
console.log('connection established');

var readStream = fs.createReadStream("test.mp3",
{'flags': 'r',
'encoding': 'binary',
'mode': 0666,
'bufferSize': 64 * 1024});
readStream.on('data', function(data) {
console.log(typeof data);
console.log('sending chunk of data')
socket.send(data);
});

socket.on('disconnect', function () {
console.log('connection droped');
});
});

console.log('Server running at http://127.0.0.1:8081/');

客户端以字符串类型接收数据,但我想将数据提供给 decodeAudioData,它似乎不喜欢字符串。对 decodeAudioData 的调用导致以下错误消息:

Uncaught Error: SYNTAX_ERR: DOM Exception 12

我认为 decodeAudioData 需要存储在 ArrayBuffer 中的数据。有没有办法转换数据?

这是客户端代码:

<script src="http://127.0.0.1:8081/socket.io/socket.io.js"></script>
<script>
var audioBuffer = null;
var context = null;
window.addEventListener('load', init, false);
function init() {
try {
context = new webkitAudioContext();
} catch(e) {
alert('Web Audio API is not supported in this browser');
}
}

function decodeHandler(buffer) {
console.log(data);
}

var socket = io.connect('http://127.0.0.1:8081');
socket.on('message', function (data) {
// HERE IS THE PROBLEM
context.decodeAudioData(data, decodeHandler, function(e) { console.log(e); });
});
</script>

最佳答案

我自己找到了一种通过 Websocket 流式传输 MP3 数据的方法。

一个问题是 MP3 数据的 block 大小。似乎需要为 Web Audio API 提供有效的 MP3 block 才能解码数据。可能并不奇怪。在我的演示应用程序中,我提供了一组 MP3 block 文件。

此外,音频的质量并不完美。我有一些微妙的故障。我可以通过发送更大的 MP3 数据 block 来改善这一点,但仍然有微小的裂纹。

编辑:我设法提高了音频质量。似乎网络音频方法 decodeAudioData 并不是真正设计用于解码连续的 MP3 数据 block 。

关于javascript - 如何使用 node.js 和 socket.io 通过 WebSockets 流式传输 MP3 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8759842/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com