Я хочу реализовать потоковую передачу аудиоданных MP3 в Интернет
My Client Web(реализованный в HTML5) получает аудиоданные MP3 с веб-сервера (реализованного в Node.js), и аудиоданные бывают двух типов: 16-битные данные кодирования PCM и общие двоичные данные.
Я не смог решить проблему, хотя и следовал некоторым примерам и объяснениям.
Теперь мне интересно, как я могу воспроизвести это. Не могли бы вы объяснить, почему я получаю ошибку в методе context.decodeAudioData?
Спасибо за вашу помощь заранее. Удачи тебе!~
---- html5 source code ----
<!DOCTYPE html>
<html lang="en" manifest="web.appcache">
<head>
<meta charset="utf-8" />
<title>index.html</title>
<script src="sounds/ufo.js"></script>
<script src="js/base64-binary.js"></script>
<!-- base64-binary.js : https://github.com/alexgibson/offlinewebaudio/blob/master/js/base64-binary.js-->
<script type="text/javascript">
var context = new webkitAudioContext();
var ws = new WebSocket("ws://localhost:8080");
ws.binaryType = 'arraybuffer';
ws.onmessage = function (evt) {
var byteArray = Base64Binary.decodeArrayBuffer(evt.data);
context.decodeAudioData( byteArray, function(buffer) {
console.log("Success");
var src = context.createBufferSource();
src.buffer = buffer;
src.connect(context.destination);
src.noteOn(0); //play immediately
console.log('Finished decoding');
}, function(error) {
console.log("Error");
}
);
};
<script>
</body>
</html>
----Node.js source code ----
var net = require('net');
var http = require('http');
var fs = require('fs');
var server = http.createServer( function(req, res){
fs.readFile('index.html', function (error, data) {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(data);
});
}); server.listen("8888", "127.0.0.1");
var WebSocketServer = require('ws').Server;
wss = new WebSocketServer({port: 8080});
wss.on('connection', function(ws) {
console.log("웹서버에 연결됨..");
var readStream = fs.createReadStream("1.mp3",
{'flags': 'r',
'encoding': 'binary',
'mode': 0666,
'bufferSize': 64 * 1024});
readStream.on('data', function(data) {
ws.send(data,{binary: true ,mask: false } );
});
});