61

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

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

从 2010 年开始,只有一个关于 stackoverflow 的查询。从那时起, NodeJS和 HTML5 已经成长和成熟。

人们通常做什么:当使用多媒体流(即视频或音频)到服务器时,在getUserMedia() 完全到达之前,在当前时间点肯定没有什么能比 Flash 更好——老实说,这可能需要一段时间才能达到99 % 的浏览器用户将完全使用它。

将数据流式传输到服务器的一般做法是使用客户端 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);

与服务器应用程序一起,可以轻松地将数据流式传输到服务器。

我想做的:有一个在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 跟进和一般用户交互
  • 更容易实现到服务器框架中

更新: 我与 Malcontenti-Wilson 先生交谈过,他负责编写的唯一一个 node-rtmp 包,但 8 个月前由于它写得不好而且他遇到了障碍而停产。有人使用过这个或能够检查代码吗?

更新 2: Malcontenti-Wilson 先生只是给我发了一封邮件,让我注意到node-mtrude(有点奇怪的名字),它正在做我们可能想要的事情。有没有人使用这种包?

4

4 回答 4

2

是的,这是可能的,但是您有一些问题。

1) Red5 的文档严重不足且漏洞百出。

2) rtmpe/rtmps

3) 性能/可扩展性

4) 1 到 3 是您可以克服的事情,但必须非常深入地了解媒体分发及其所有相关问题。当你完成时,你将成为那里真正了解它的大约 800 人中的一员。你必须走很长的路来解决意想不到的问题。

于 2013-04-13T13:31:56.440 回答
1

现在有一个名为vertx的平台可以进行 polygot 开发。因此 red5 jar 可以与现有代码一起包含在您的服务器端,并且可以运行 rtmp 流服务器。在客户端,您可以使用 video.js 或 JW 播放器之类的东西来回放流,并获得 Flash 回退策略。客户端发布,我不确定是否有任何基于 javascript 的 RTMP 实现可用。

于 2013-12-31T12:15:35.617 回答
1

WCS是 Fl​​ash、WebRTC、SIP、Websockets 和 Wowza 兼容协议的混合实现:RTSP、RTMP。

流转换方案: 在此处输入图像描述

于 2015-09-11T21:29:37.083 回答
0

这是一个老问题,但是,我正在为那些偶然发现这个问题的人发布这个替代方案。 Node 媒体服务器是一个非常好的媒体服务器,我在我的一个 poc 中使用过它,它支持 rtmp https://www.npmjs.com/package/node-media-server

它的 git repo 也很活泼,实际上我在 poc 中使用它之前已经做了一些更改。而且代码也写得很好。 https://github.com/illuspas/Node-Media-Server

PS。它的工作原理就像 OBS 用于直播的魅力。

于 2018-07-18T06:53:45.393 回答