请问,是否有任何简单的方法可以通过 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/