node.js - Node (套接字)实时音频流/广播

标签 node.js sockets audio media

请问,是否有任何简单的方法可以通过 NODE.js 和可能的 SOCKET.IO 将媒体文件(ogg、mp3、spx..)从服务器流式传输(广播)到客户端(浏览器)?

我必须在服务器端录制音频输入,然后才能为许多客户端实时播放。 我一直在搞乱 binary.js 或 socket.io 流,但无法正确处理。

我尝试使用 speex、vorbis 或 lame 对音频输入进行编码,然后通过 FS 将其加载到客户端,但我没有成功。还是我必须捕获 PCM 然后在浏览器中解码?

对此的任何建议,我都没有找到任何帮助过我。

非常感谢您提供的任何提示、链接和想法。

最佳答案

您需要寻找适用于 Streams 的包,然后根据需要将流通过管道传输到输出。使用 Express 或仅使用内置 HTTP,您可以轻松完成此操作。这是一个围绕 osx-audio 构建的示例提供 PCM 流,lame它可以将流编码为mp3,并表达:

var Webcast = function(options) {

  var lame = require('lame');
  var audio = require('osx-audio');
  var fs = require('fs');

  // create the Encoder instance
  var encoder = new lame.Encoder({
    // input
    channels: 2,        // 2 channels (left and right)
    bitDepth: 16,       // 16-bit samples
    sampleRate: 44100,  // 44,100 Hz sample rate

    // output
    bitRate: options.bitrate,
    outSampleRate: options.samplerate,
    mode: (options.mono ? lame.MONO : lame.STEREO) // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO
  });

  var input = new audio.Input();
  input.pipe(encoder);

  // set up an express app
  var express = require('express')
  var app = express()

  app.get('/stream.mp3', function (req, res) {
    res.set({
      'Content-Type': 'audio/mpeg3',
      'Transfer-Encoding': 'chunked'
    });
    encoder.pipe(res);
  });

  var server = app.listen(options.port);
}

module.exports = Webcast;

如何获取输入流可能是最有趣的部分,但这取决于您的实现。流行的 request 包也是围绕 Streams 构建的,所以它可能只是一个 HTTP 请求!

关于node.js - Node (套接字)实时音频流/广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23396575/

相关文章:

node.js - Redis: 'Get - Check Condition - Increase' 带锁定 key

javascript - 路由参数仅获取第一个字母

android - 在最新的 Openshift 更新后,Socket.IO 客户端无法连接到 Socket.IO nodejs 服务器

java - SocketOutputStream的线程安全

Android AudioRecord - 以小文件大小录制音频

mysql - Sequelize Join 非主键

node.js - typescript 错误: TS2339:Property 'map' does not exist on type 'string'

java - 为什么 Windows Java 无法绑定(bind)到已经绑定(bind)的端口?

audio - 录制音频并在iPhone上播放

actionscript-3 - As3内存泄漏? -如何从内存中垃圾收集新的as3声音对象?