【发布时间】:2017-04-10 18:40:00
【问题描述】:
我正在使用 MEAN 堆栈创建音乐流媒体服务。到目前为止,我已经编写了使用 GridFS 将 mp3 文件上传到我的 MongoDB 数据库的代码,我还可以将该文件下载到我网站的根文件夹中。
但是,我不希望下载流写入文件,而是流到播放器/扬声器,以便文件不在用户系统上,只是从服务器流。
我一直在研究 npm 扬声器模块,并尝试将其实现如下:
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 扬声器模块是一个可写流,因此我应该能够通过管道传输到它。
我上面的解决方案会产生大约 30 秒的静态噪音,然后退出并出现“进程以退出代码 132(被信号 4 中断:SIGILL)”错误退出。
我是 NodeJS 等的新手,因此非常感谢您对此提供任何帮助。
谢谢
【问题讨论】:
标签: node.js mongodb express npm node-speaker