I am creating a music streaming service using the MEAN stack. So far, I have written code that uploads an mp3 file to my MongoDB database, using GridFS, and I can also download that file to the root folder of my site.
However, I do not want the download stream to write to a file, rather stream to a player/the speakers so that the file is not on the user's system, simply streams from the server.
I have been looking at the npm speaker module, and have attempted to implement it as below:
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)
});
I'm not sure if I need to implement a buffer to do this. The npm speaker moudule, as far as I am aware, is a writable stream, and so I should be able to pipe to it.
The solution I have above, produces about 30 seconds of static noise, before quitting with the "Process finished with exit code 132 (interrupted by signal 4: SIGILL)" error.
I am new to NodeJS etc so any help on this would be very much appreciated.
Thanks