Node.js WebRTC 客户端

48
我正在寻找一个用于实现,
以便将数据从nodeJS客户端传输到另一个webRTC对等方。
因此,在我的情况下,nodejs应用程序不是服务器,而是客户端。
是否存在这样的节点模块?

1
我不确定我理解这个问题。您是否想要从某种非WebRTC客户端(在Node上运行)传输数据到WebRTC应用程序?如果您想了解在Node上运行的WebRTC客户端使用Socket.io进行信令的视频聊天的简单示例,请查看http://bitbucket.org/webrtc/codelab上的codelab。 - Sam Dutton
确切地说,我编写了一个Chrome扩展程序,安装在多个设备上。这些扩展实例使用WebRTC进行通信(连接代理使用peerjs完成)。现在,我正在尝试将来自多个nodejs应用程序的通知传输到浏览器扩展程序。 - jantimon
1
你找到让它工作的方法了吗?我也在尝试做这个。 - Rocel
有任何后续进展吗?不知道您是否找到了webrtc客户端的解决方案。 - JerryFox
@jantimon 你有遇到任何新的进展吗?我也在寻找相同的解决方案。 - Sunny
没有标记正确答案,那么你使用了哪个解决方案? - coding_idiot
9个回答

17

2
Node-rtc的作者已经加入了node-webrtc团队。他仍在推进自己的库,但现在似乎已经被放弃了。毫无疑问,我认为使用node-webrtc是正确的选择。(免责声明:我已经向node-webrtc提交了几个补丁,并积极关注该项目) - Piranna
第一个链接没有游戏。错误404 :-/ - Tormy Van Cool

4

2

2
你应该查看licode。这是一个开源的webrtc多点视频会议桥接器,运行在node.js之上。他们的服务器作为一个webrtc客户端,将音频/视频桥接到其他webrtc客户端。你可能能够重用一些使用libnice(用于ICE协议)和libsrtp(用于SRTP堆栈)的c++代码,并将其包装在自己的node.js模块中,以创建一个成功的webrtc客户端。
显然,你不需要他们的大部分代码,但我认为他们的服务器提供了一个良好的示例,展示了建立成功的webrtc连接所需发送回浏览器的工作SDP。

问题在于licode是一个MUC,而不是Node.js的WebRTC模块/包装器,因此他们使用自己的API... :-((我几天前问过他们这个问题,因为我认识他们)。 - Piranna
是的,但它们确实实现了SRTP层和ICE协议,并通过一个模块在node.js中公开了它们。因此,我认为这可能是一些有趣的代码,可以让@jantimon检查并建立自己的node.js webrtc模块,以便与他的其他webrtc端点(即Chrome扩展程序)进行通信。 - Aki
所以,正如Licode的人所评论/建议的那样,应该很容易在他们的API之上创建与WebRTC API兼容的Node.js模块,或者回收他们实现代码的片段(反正它是自由软件),你是这么说的吗? - Piranna
是的,我认为这是一个很好的开始。我稍微修改了我的评论以使其更加精确。但我认为licode是一个很好的例子,因为它已经作为一个简单的webrtc客户端,可以从另一个webrtc客户端接收SRTP流量(通过ICE),并将其桥接到任何其他对接收此流量感兴趣的webrtc连接。 - Aki
1
有趣...我想试试,但目前没有时间 :-( - Piranna
如果我使用node-webrtc作为MCU,那么对等端的限制是什么? - Murugan Pandian

0

更新:下面的解决方案实际上并没有向服务器提供视频。我不确定最佳(Node)解决方案是什么。在C++中,可以尝试使用libJingle。

听起来webrtc.io将允许您创建一个节点应用程序作为对等方。请参见此处的github项目:https://github.com/webRTC/webRTC.io

目前该项目似乎没有超级活跃的开发,但有100个分支,而且该节点模块每月被下载500次,所以看起来人们很关心。

项目示例代码--客户端

<video id="local" autoplay="autoplay"></video>
<video id="remote" autoplay="autoplay"></video>

<script src="/webrtc.io.js"></script>
<script>

  // note: make sure hostname available to all connecting clients
  // (ie. probably not `localhost`)
  rtc.connect('ws://yourserveraddress:8001');

  rtc.createStream({"video": true, "audio":false}, function(stream){
    // get local stream for manipulation
    rtc.attachStream(stream, 'local');
  });

  rtc.on('add remote stream', function(stream){
    // show the remote video
    rtc.attachStream(stream, 'remote');
  });

  // more rtc callbacks are available
</script>

服务器端

var webRTC = require('webrtc.io').listen(8001);

这似乎是服务器(nodejs)到客户端(浏览器)的典型websocket连接。 - jantimon
没什么特别的!我试过了。上面的设置可以创建一个视频会议室,所以不需要浏览器到服务器的视频! - Omar Al-Ithawi
有人在服务器上测试过这个库吗?服务器代码似乎根本没有与WebRTC交互。 - Casey Chow

0

可以使用serverless-webrtc package 建立从node.js到浏览器的WebRTC数据连接,该软件包使用wrtc package作为WebRTC实现。

不幸的是,当我尝试使用PeerJS或EasyRTC等信令库与wrtc模块一起使用时,连接无法建立(错误消息为“ICE失败”)。 如果有人成功使用在wrtc之上的任何高级库,请提供相关信息,感激不尽。


0

还有这个,

WebRTC Datachannels适用于Node.js https://github.com/nodertc


0

这个解决方案提供了从本地到Web的视频流。也就是说,无需浏览器捕获视频,它会将视频广播到客户端浏览器。有一个WebSocket示例可以正常工作。

你的挑战实际上是构建和链接webrtc.node,并且以上链接中都有详细说明。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接