首页 文章

NodeJS和RED 5媒体服务器通过RTMP

提问于
浏览
57

这更像是一个概念性问题而不是直接“如何做到这一点” .

通常是否可以实现类似flash的解决方案来流式传输音频(与我们从HTML5和nodeJS / binaryJS中获取流数据的位置无关,例如webRTC或其他) . 如果是这样,你会怎么做?

自2010年以来,只有一个问题涉及stackoverflow found here以及它 . 自那时起,NodeJS和HTML5已经发展壮大 .

What people usually do: 当使用多媒体流(即视频或音频)到服务器时,肯定没有任何东西能够在当前时间点击败Flash,直到getUserMedia()完全到来 - 这很可能直到99%的浏览器用户才会到达take a while完全使用它 .

将数据流式传输到服务器的一般做法是使用客户端Flash或Flex应用程序,然后连接到RTMP协议支持的媒体服务器,如RED5FMSWowza . 例如,通过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上运行的应用服务器(可能实现socketIObinaryJS)捕获传入的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 回答

  • 2

    现在有一个名为vertx的平台可用于聚合器开发 . 因此,red5 jar可以包含在服务器端,使用现有代码,并可以运行rtmp流服务器 . 在客户端,你可以使用像video.js或JW播放器这样的东西播放流回来并获得闪回后退策略 . 客户端发布,我不确定是否有任何基于javascript的RTMP实现可用 .

  • 1

    WCS是Flash,WebRTC,SIP,Websockets和Wowza兼容协议的混合实现:RTSP,RTMP .

    流转换方案:
    enter image description here

  • 0

    这是一个古老的问题但是,我正在为那些偶然发现这个问题的人发布这个替代方案 . 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

    是的,这是可能的,但你有一些问题 .

    1)Red5非常缺乏记录和错误 .

    2)rtmpe / rtmps

    3)性能/可扩展性

    4)1到3是你可以克服的事情,但并非没有非常密切地了解媒体分发及其所有相关问题 . 当你完成时,你将成为那些真正了解它的800人之一 . 你必须走一条解决意外问题的漫长道路 .

相关问题