node.js - 通过 RTMP 的 NodeJS 和 RED 5 媒体服务器

标签 node.js audio-streaming red5 rtmp webrtc

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

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

stackoverflow 上只有一次查询 found here以及它从 2010 年开始。从那时起,NodeJS 和 HTML5 已经成长和成熟。

人们通常会做什么: 当使用多媒体流(即视频或音频)到服务器时,在 getUserMedia() 完全到来之前,在当前时间点绝对没有什么能比 Flash 更好。 - 老实说可能take a while直到 99% 的浏览器用户完全使用它。

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

可能有什么优势:一般来说,采用这种方法似乎有点开销,但对我来说可能有优势,我也希望您对此发表评论。

  • 通过运行(例如)轻松验证用户交互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/

相关文章:

jakarta-ee - Red 5 录制 RTMP 网络摄像头配置适用于本地主机,但不适用于外部服务器

websocket - 红5 Pro : Unexpected response code: 400 & WebSocketException - Handshake failed

Java:线程主java.lang.NoClassDefFoundError中的异常

node.js - Sublime [Errno 2] 没有这样的文件或目录 : 'node'

javascript - 从流式音频 Node js 中删除高频声音

Javascript/Node 检查是否有回调完成的循环

java - 如何录制声音并将其设置为Java文件?

android - 在 Android 应用程序中,WebRTC 中没有通过 WebView 的音频

javascript - 如何从 Meteor.js 中重启 Meteor 服务器

javascript - 如何使用 sequelize 和 sqlite 验证 int 和 boolean