Asterisk + Node.js + 浏览器流媒体传输

8
我想建立一个服务,允许用户从浏览器中实时听取电话。我有一些Asterisk的经验,这似乎足够灵活,可以做到我所描述的。Node.js听起来不错,因为据说它能很好地处理并发,而且我喜欢JavaScript。在浏览器中,我认为HTML5音频标签由于可以处理来自流源的播放,因此可以用来播放声音。我的同事使用Icecast合作制作了这个概念的演示文稿,但未能完成。还存在显著的延迟问题。我的问题是:我该怎么开始呢?感谢任何帮助!更新:我发现了一份演示文稿,讨论在后端通过SIP代理在WebSockets上实现SIP:http://sip-on-the-web.aliax.net/一旦我运行起来,下一步就是实现流媒体。看起来我应该能够通过中转常规的sip客户端输出的音频,通过第二个服务器将其流式传输到浏览器。我想知道为什么不能全部在内存中完成?然后在通话进行中无需编写和读取文件。
5个回答

8
如果您能等待Asterisk 11的发布,我们目前正在努力实现在Asterisk中直接支持WebSockets。更多关于此内容的信息可以在这里找到:Asterisk 11 WebRTC/RTCWeb Support
我想引用Kevin的话,因为他总结得比我更好: “今天,在进行中的开发分支中,WebSocket传输协议(用于浏览器和Asterisk之间的信令消息通信)、SIP over WebSocket(目前由IETF标准化)和ICE / STUN / TURN(用于NAT穿透和连接设置安全性的媒体处理机制)都得到了支持。此外,还有一个新的Jingle / Google Talk / Google Voice频道驱动程序,我们计划也支持通过WebSocket的Jingle。目前,我们没有完全的解决方案(需要使用一种新的Google Chrome浏览器Canary版本,并做出一些小改变),但是每个部分都已经进行了测试,我们急于看到它们全部配合工作。我们要感谢来自SIP-on-the-Web项目的Iñaki和José为我们提供他们的JavaScript SIP堆栈以供测试,并且对于Jingle支持,我们还可能会使用Phono SDK 进行测试。”

2

谢谢您的发布,但我已经看到了。它没有涉及浏览器流媒体方面,而只是使用基于Flash的Phono。 - Jonathan
虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分,并提供链接作为参考。仅有链接的答案如果链接页面发生变化,可能会变得无效。- 来自审核 - undefined

1

1
虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分,并提供链接作为参考。仅有链接的答案可能会因为链接页面的更改而失效。- 来自评论 - undefined

0

我认为在录制音频文件时尝试流式传输会有极高的延迟问题,您将无法解决。如果您想实时收听电话对话,我建议您研究Phono。这是一个JQuery插件,可以将您的Web浏览器变成电话。然后,您只需将听众静音并与其一起加入会话即可。


我之前见过Phono。它看起来很不错,但据我所知:你必须使用Phono服务,而插件实际上是使用Flash。我不需要访问用户的麦克风,这就是为什么我认为他们正在使用Flash,因此如果可能的话,流式传输到音频标记似乎会起作用。 - Jonathan
如果您可以接受延迟问题,流媒体可能会起作用。但它永远不会是实时的。我认为您需要打开一个通信渠道进行实时侦听。您可能想看看其他基于浏览器的SIP电话,比如这个[http://www.mizu-voip.com/Products/WebPhone.aspx]。 - Kevin Junghans
如果我可以在浏览器中访问套接字,为什么不能使用直接套接字连接到服务器来实现sudo-sip客户端?我相信这不是一项简单的任务,但我想知道是否可能? - Jonathan
Websockets不能用来做这件事:注意:此接口不允许原始访问底层网络。例如,此接口无法用于实现IRC客户端,而不是通过自定义服务器代理消息。 见 http://dev.w3.org/html5/websockets/ - Jonathan
1
这个注释并不排除Websockets。它只是意味着你需要开发一个作为中间件的“自定义服务器”。Websockets的问题在于它是一个非常新的标准,并没有在所有的Web服务器中实现。下一个版本的IIS将支持websocket。或者你可以使用像Pusher [http://pusher.com/]这样的服务。你是正确的,加入SIP堆栈并不容易。我会从开源SIP实现之一开始。 - Kevin Junghans
同意。如果您看到我问题的编辑,我发布了一个关于这个想法的演示文稿链接。此外,我在Github上找到了一个类似的实现。我也会将其添加到问题中。 - Jonathan

0
如果您不介意由于Icecast流的缓冲而引起的延迟,Asterisk可以流式传输到Icecast(配置Asterisk的Ices应用程序)。
如果您无法容忍延迟,您将需要基于浏览器的SIP客户端。不幸的是,没有多少人不被锁定在别人的电话系统中。您可以尝试red5phone(http://code.google.com/p/red5phone/),但这需要您设置Red5服务器。

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