这更像是一个概念性问题,而不是直接的“如何做到这一点”。
通常是否有可能实现类似 Flash 的解决方案来在 HTML5 和 nodeJS/binaryJS 中流式传输音频(与我们从哪里获取流数据,例如 webRTC 或其他)无关。如果是这样,你会怎么做?
stackoverflow 上只有一次查询 found here以及它从 2010 年开始。从那时起,NodeJS 和 HTML5 已经成长和成熟。
人们通常会做什么: 当使用多媒体流(即视频或音频)到服务器时,在 getUserMedia() 完全到来之前,在当前时间点绝对没有什么能比 Flash 更好。 - 老实说可能take a while直到 99% 的浏览器用户完全使用它。
将数据流式传输到服务器的一般做法是使用客户端 Flash 或 Flex 应用程序,然后连接到支持 RTMP 协议(protocol)的媒体服务器,如 RED5 , FMS或 Wowza .例如,通过 RTMP 发送麦克风输入的客户端应用程序可能看起来像(简化版)
import flash.net.NetStream;
private var myMic:Microphone;
private var nc:NetConnection;
private var ns:NetStream
nc = new NetConnection();
ns = new NetStream(nc);
nc.connect(rtmp://localhost/serverApp);
myMic = Microphone.getMicrophone();
ns.attachAudio(myMic);
与服务器应用程序一起,可以轻松地将数据流式传输到服务器。
我想做的事: 让应用服务器在 nodeJS 上运行(可能实现 socketIO 和 binaryJS )捕获传入的 RTMP 流。类似的东西
//require
var rtmp = require('node-rtmp'),
var fs = require('fs');
//rtmp server address
var rtmpServer = 'rtmp://localhost';
//create a binary server listening that receives stream data
var RTMPServer = rtmp.RTMPServer();
var server = RTMPServer ({port: 1935});
server.on('connection', function(client){
//check if user is allowed to do so
rtmp.newStream(client.stream);
});
可能最好使用 socketIO 来区分通过 eventEmitters 进行的用户交互。
可能有什么优势:一般来说,采用这种方法似乎有点开销,但对我来说可能有优势,我也希望您对此发表评论。
- 通过运行(例如)轻松验证用户交互express和socketIO
- flash 的混合实现(通过 RTMP)和 getUserMedia()(通过添加 binaryJS 和 Mozilla AudioAPI 的二进制传输机制)
- 如果完全支持 getUserMedia(),则可以轻松删除 Flash 实现
- 更好地控制 rtmp 跟进和一般用户交互
- 更容易在服务器框架中实现
更新: 我已经与负责 only node-rtmp package 的 Malcontenti-Wilson 先生进行了交谈。那是写的,但在 8 个月前停止了,因为它写得不好,他遇到了障碍。有人用过这个或者能查到代码吗?
更新 2: Malcontenti-Wilson 先生只需给我发一封邮件以引起我的注意 node-mtrude (有点奇怪的名字)它正在做我们可能想要的事情。有人用过这种包吗?
最佳答案
是的,这是可能的,但你有一些问题。
1) Red5 的文档严重不足且漏洞百出。
2) rtmpe/rtmps
3) 性能/可扩展性
4) 1 到 3 是您可以克服的问题,但必须非常深入地了解媒体分发及其所有相关问题。当你完成时,你将成为那里真正了解它的大约 800 人中的一员。你必须走很长的路才能解决意想不到的问题。
关于node.js - 通过 RTMP 的 NodeJS 和 RED 5 媒体服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052530/