2016-11-26 81 views
0

我正在使用MEAN堆棧創建音樂流媒體服務。到目前爲止,我已經編寫了使用GridFS將MP3文件上傳到我的MongoDB數據庫的代碼,並且我還可以將該文件下載到我的網站的根文件夾中。使用npm揚聲器作爲GridFS下載流的輸出 - NodeJS

但是,我不希望下載流寫入文件,而是流式傳輸到播放器/揚聲器,以便文件不在用戶系統中,只需從服務器流式傳輸。

我一直在看故宮揚聲器模塊,並試圖如下實現它:

var assert = require('assert'); 
var fs = require('fs'); 
var mongodb = require('mongodb'); 
var Speaker = require('speaker'); 

var uri = 'mongodb://localhost:27017/test'; 

var speaker = new Speaker({ 
    channels: 2,   // 2 channels 
    bitDepth: 16,   // 16-bit samples 
    sampleRate: 44100  // 44,100 Hz sample rate 
}); 

mongodb.MongoClient.connect(uri, function(error, db) { 
    assert.ifError(error); 

    var bucket = new mongodb.GridFSBucket(db, { 
     chunkSizeBytes: 1024, 
     bucketName: 'songs' 
    }); 

    bucket.openDownloadStreamByName('testmp3.mp3').pipe(speaker) 


}); 

我不知道如果我需要執行一個緩衝區來做到這一點。據我所知,npm演講者是一個可寫的流,所以我應該能夠接管它。

上述解決方案在退出「退出代碼132(由信號4:SIGILL中斷)」過程中出現錯誤之前會產生約30秒的靜態噪音。

我是新來的NodeJS等,所以任何幫助將非常感激。

感謝

回答

0

你需要一個解碼器解碼MP3文件。

const lame = require('lame'); 
// create the Encoder instance 
let decoder = new lame.Decoder({ 
    // pcm output 
    channels: 2,  // 2 channels (left and right) 
    bitDepth: 16,  // 16-bit samples 
    sampleRate: 44100, // 44,100 Hz sample rate 

    // mp3 input 
    bitRate: 128, 
    outSampleRate: 44100, 
    mode: lame.STEREO // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO 
}); 


// Create the Speaker instance 
let speaker = new Speaker({ 
    channels: 2,   // 2 channels 
    bitDepth: 16,   // 16-bit samples 
    sampleRate: 44100  // 44,100 Hz sample rate 
}); 

bucket.openDownloadStreamByName('testmp3.mp3').pipe(decoder); 
decoder.pipe(speaker);