这更像是一个概念性问题而不是直接“如何做到这一点” .
通常是否可以实现类似flash的解决方案来流式传输音频(与我们从HTML5和nodeJS / binaryJS中获取流数据的位置无关,例如webRTC或其他) . 如果是这样,你会怎么做?
自2010年以来,只有一个问题涉及stackoverflow found here以及它 . 自那时起,NodeJS和HTML5已经发展壮大 .
What people usually do: 当使用多媒体流(即视频或音频)到服务器时,肯定没有任何东西能够在当前时间点击败Flash,直到getUserMedia()完全到来 - 这很可能直到99%的浏览器用户才会到达take a while完全使用它 .
将数据流式传输到服务器的一般做法是使用客户端Flash或Flex应用程序,然后连接到RTMP协议支持的媒体服务器,如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);
与服务器应用程序一起,可以轻松地将数据流式传输到服务器 .
What I would like to do: 让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来区分用户交互 .
What might be the advantages: 一般来说,采用这种方法似乎有点开销,但对我来说可能有优势,我也希望你对此发表评论 .
通过运行例如
-
轻松验证用户交互express和socketIO
-
混合实现flash(通过RTMP)和getUserMedia()(通过二进制传输机制,通过添加binaryJS和Mozilla AudioAPI)
-
如果完全支持getUserMedia(),则可以轻松删除Flash实现
-
更多地控制rtmp后续和用户交互
-
更容易实现到服务器框架中
UPDATE: 我和Malcontenti-Wilson先生谈过,他负责撰写了only node-rtmp package,但由于写得不好而且他遇到了障碍,但是8个月前已经停止了 . 使用过这个或能够检查代码的人?
UPDATE 2: Malcontenti-Wilson先生只是给我发了一封邮件,让我注意node-mtrude(有点奇怪的名字),它正在做我们可能想要的事情 . 有没有人使用这种包装?
4 回答
现在有一个名为vertx的平台可用于聚合器开发 . 因此,red5 jar可以包含在服务器端,使用现有代码,并可以运行rtmp流服务器 . 在客户端,你可以使用像video.js或JW播放器这样的东西播放流回来并获得闪回后退策略 . 客户端发布,我不确定是否有任何基于javascript的RTMP实现可用 .
WCS是Flash,WebRTC,SIP,Websockets和Wowza兼容协议的混合实现:RTSP,RTMP .
流转换方案:
这是一个古老的问题但是,我正在为那些偶然发现这个问题的人发布这个替代方案 . Node media server 是一个非常好的媒体服务器我已经在我的一个poc中使用它支持rtmp https://www.npmjs.com/package/node-media-server
它的git repo也非常生动,事实上我在我的poc中使用之前做了一些改动 . 代码也写得很好 . https://github.com/illuspas/Node-Media-Server
PS . 它的作品就像OBS的现场流媒体魅力一样 .
是的,这是可能的,但你有一些问题 .
1)Red5非常缺乏记录和错误 .
2)rtmpe / rtmps
3)性能/可扩展性
4)1到3是你可以克服的事情,但并非没有非常密切地了解媒体分发及其所有相关问题 . 当你完成时,你将成为那些真正了解它的800人之一 . 你必须走一条解决意外问题的漫长道路 .