当前位置: 首页 > 知识库问答 >
问题:

节点(套接字)现场音频流/广播

井旺
2023-03-14

请问,有任何简单的方法流(广播)媒体文件(ogg,mp3,SPX..)通过Node.js和Socket.io从服务器到客户机(浏览器)?

共有1个答案

裴俊豪
2023-03-14

您将希望寻找在流上工作的包,从那里,它只是通过管道将您的流输出到必要的输出。使用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包也是围绕流构建的,所以它可能只是一个HTTP请求!

 类似资料:
  • 问题内容: 我创建了一个简单的服务器,该服务器使用fs模块将mp3文件流式传输到浏览器,并以html5音频元素播放该文件。实际上,音频流非常好,但是,即使我要搜索的部分已经被缓冲,我也无法在音频流中进行搜索。 其他类似的问答也建议添加Content-Range标头,但我找不到如何做到这一点的简单示例。其他人则说使用206 Partial-Content标头,但是当我这样做时,音频将根本无法播放。

  • 我正在尝试使用webrtc和socket通过getUserMedia()获取音频。io将其发送到服务器(socket.io支持音频、视频、二进制数据),然后服务器将其广播到所有连接的客户端。问题是,当流到达连接的客户端时,它会转换为JSON对象,而不是媒体流对象。所以我无法发送音频,我也尝试了套接字。io流模块,但我认为未成功。您能帮我正确捕获音频流并将其发送到所有连接的客户端吗。 下面是发送数据

  • 问题内容: 我创建了一个服务器应用程序,该应用程序从客户端接收声音,然后广播此声音,该声音以字节存储,然后将字节发送回连接到服务器的客户端。现在,我目前仅使用一个客户端进行测试,客户端正在接收语音,但是声音一直在卡顿。有人可以告诉我我做错了吗? 我想我理解为什么声音播放不流畅但不了解如何解决问题的部分原因。 代码是波纹管的。 客户端: 将声音发送到服务器的部分 从服务器接收数据字节的部分 问题答案

  • 我正在尝试编写一个应用程序,它可以检测设备上的任何应用程序何时开始或停止播放音乐。我的应用程序不是媒体播放器,更多的是仪表板功能,所以我不需要请求音频聚焦,但我想知道其他应用程序何时会这样做,这样我就可以相应地更新我的状态文本。 本质上,我相信函数AudioManager.isMusicActive()将提供我想知道的东西,但是由于我正在编写一个将一直打开的服务,我希望避免需要不断地轮询它。我需要

  • 从插座上看。io网站 从1.0开始,可以来回发送任何Blob:图像、音频、视频。 我现在想知道,这是否能解决我最近想要实现的目标。 我其实是在寻找一种方法,如何直播音频流从(A-即,麦克风输入...)到所有客户连接到我的网站。像这样的事情可能吗?我一直在摆弄WebRTC(https://www.webrtc-experiment.com/)示例,但我无法为几个连接的客户端管理目标。 我的想法是关于

  • 我试图使用任何NodeJS或NPM命令,但我总是得到以下错误: 套接字:(10106)无法加载或初始化请求的服务提供程序。 我正在运行Windows 10,我尝试再次重新安装nodejs,但仍然没有改变。