这更多的是一个概念性的问题,而不是一个直接的“如何做到这一点”。
通常可以在HTML5和nodeJS/binaryJS中实现类似flash的解决方案来流式传输音频(独立于我们从哪里获得流数据,例如webRTC或其他)吗?如果是这样的话,你会怎么做呢?
自2010年以来,关于stackoverflow found here及其its的查询只有一次。从那时起,NodeJS和HTML5不断成长和成熟。
人们通常做的事情:当使用多媒体流(即视频或音频)到服务器时,在getUserMedia()完全到来之前,在当前时间点绝对没有什么比take a while更好的了--老实说,它可能会take a while,直到99%的浏览器用户都能使用它。
将数据流式传输到服务器的一般做法是使用客户端闪存或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);
与服务器应用程序一起,可以很容易地将数据流式传输到服务器。
我想做什么:有一个在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);
});
也许通过eventEmitters使用socketIO来区分用户交互可能会更好。
可能的优点:一般来说,使用这种方法看起来有点开销,但对我来说可能有好处,我也希望你能对此发表评论。
更新:我已经和Malcontenti-Wilson先生谈过了,他负责8个月前编写的only node-rtmp package,但由于它写得很差,他遇到了障碍。有没有人用过这个或者能检查代码?
更新2: Malcontenti-威尔逊先生给我发了一封邮件,引起我对node-mtrude (一个奇怪的名字)的注意,它做的正是我们可能想要的。有没有人使用过这种包?
发布于 2013-04-13 21:31:56
是的,这是可能的,但你有一些问题。
1) Red5的文档非常少,而且有很多buggy。
2) rtmpe/rtmps
3)性能/可扩展性
4) 1到3是你可以克服的事情,但不是在没有非常深入地了解媒体分发及其所有相关问题的情况下。当你完成的时候,你将会是800个真正理解它的人中的一个。要解决意想不到的问题,你必须走很长的路。
发布于 2013-12-31 20:15:36
现在有一个名为vertx的平台,在这个平台上可以进行polygot开发。因此,red5 jar可以与现有代码一起包含在您的服务器端,并且可以运行rtmp流服务器。在客户端,你可以使用像video.js或JW player这样的播放器来回放数据流,并且已经获得了flash回退策略。在客户端发布方面,我不确定是否有基于javascript的RTMP实现。
发布于 2015-09-12 05:29:37
https://stackoverflow.com/questions/13052530
复制相似问题