2014-02-05 210 views
5

我想將.mp3文件從客戶端流式傳輸到服務器,兩者都使用NodeJS。
我使用binaryjs來傳輸文件。binaryjs - nodejs mp3音頻流和播放

客戶端:

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' 
     }); 
}); 

服務器:

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); 
      }); 
     }); 
    }); 

我得到了我的二進制數據流,並希望他們
的東西,如player.js 工作獲得的直接音頻輸出與nodejs。

但我不知道如何獲得二進制數據到一個可用的流文件
,與player.js解決方案一起工作。

希望有人能幫助我得到一個工作解決方案。
在此先感謝。

+0

的你有沒有解決的辦法? –

回答

0

那麼大家誰也有類似的問題需要解決:

  1. 立即嘗試從數據數組創建一個新的BlobFile收集數據,而不是在年底
  2. 當讀取的Blob作爲ArrayBuffer
  3. 解碼音頻數據
  4. 發揮他們

這裏是一個片段:

.... 

    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() 
     }); 


    .... 

沒有經過測試和propably沒有工作,但我希望這將有助於一些你們

+0

在執行decodeAudioData之前,您必須等到緩衝區滿了fileReader.onloadend – vacetahanna