【问题标题】:Use npm speaker as output for GridFS download stream - NodeJS使用 npm 扬声器作为 GridFS 下载流的输出 - NodeJS
【发布时间】: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


    【解决方案1】:

    你需要一个解码器来解码 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);
    

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 2014-12-21
      • 2019-06-17
      • 2014-07-29
      • 2017-12-09
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 2017-11-24
      相关资源
      最近更新 更多