2014-02-05 9 views
5

ich möchte eine .mp3-datei von einem Client auf einen Server streamen, beide verwenden NodeJS.
Ich verwende binaryjs, um die Datei zu streamen.binaryjs - nodejs mp3 audio stream und abspielen

Client:

var BinaryClient = require('binaryjs').BinaryClient; 
var fs = require('fs'); 

var client = BinaryClient('ws://localhost:9000'); 
    client.on('open', function(stream){ 

     client.send(fs.createReadStream('music.mp3'), { 
      name : 'music' 
     }); 
}); 

Server:

var BinaryServer = require('binaryjs').BinaryServer; 
var server = BinaryServer({port: 9000}); 
    server.on('connection', function(client){ 

     client.on('stream', function(stream, meta){ 

      var data = []; 
      stream.on('data', function(chunk){ 
       console.log('Recieve Chunk: ' + data.length); 
       data.push(chunk); 
      }); 

      stream.on('end', function() { 
       console.log('complete data' + data); 
      }); 
     }); 
    }); 

ich meine binären Datenstrom bekam und wollen, dass sie
Arbeit mit so etwas wie player.js eine direkte Audio-Ausgabe erhalten mit nodejs.

aber ich weiß nicht, wie Sie die Binärdaten in eine verwertbare Stream-Datei
, die mit Lösung wie player.js funktioniert.

hoffe jemand kann mir helfen, eine funktionierende Lösung zu bekommen.
danke im voraus.

+0

Haben Sie die Lösung für diese einige von euch helfen bekam? –

Antwort

0

Also für alle, die ähnliche Probleme zu lösen hat:

  1. versuchen, eine neue BLOBFILE aus dem Datenfeld sofort zu erstellen, wenn die Daten zu sammeln und nicht am Ende
  2. lesen Sie die Blob als Arraybuffer
  3. dekodieren Audio Data
  4. spielen sie

hier ist ein Ausschnitt:

.... 

    var context = new (window.AudioContext || window.webkitAudioContext)(); 
    var fileReader = new FileReader(); 
    var source = null; 
    var audioBuffer = null; 

    var data = []; 
     stream.on('data', function(chunk){ 
      console.log('Recieve Chunk: ' + data.length); 
      data.push(chunk); 
      var blob = new Blob(streamData); 
      fileReader.readAsArrayBuffer(blob); 
      context.decodeAudioData(buf, function(buffer) { 
       audioBuffer = null; 
       audioBuffer = buffer; 
       source = context.createBufferSource(); 
       source.buffer = audioBuffer; 
       source.connect(context.destination); 
       source.start() 
     }); 


    .... 

nicht getestet und propably nicht funktioniert, aber ich hoffe, es wird

+0

vor dem Ausführen von decodeAudioData müssen Sie warten, bis der Puffer voll ist mit fileReader.onloadend – vacetahanna