【发布时间】:2013-06-14 05:16:12
【问题描述】:
大约六个月前,我能够成功地用 PHP 编写自己的 WebSocket 服务器脚本。通过它,我能够在本地主机上设置 WebRTC 视频聊天服务。我很高兴,直到我意识到为了部署它,我需要一个允许我访问套接字的 Web 服务器。
不幸的是,没有共享网络托管允许使用套接字,并且所有提供套接字的网络服务器都很昂贵。虽然不是大规模的有效解决方案,但为了设置一个演示给人们看,我想将信令方法从 WebSocket 更改为 Ajax,以便我可以展示我制作的 WebRTC 视频聊天服务。
为此,过去几天我一直在尝试编写一些代码,但未能成功让 WebRTC 对等方捕获彼此的视频。
目前,当一个客户端连接到脚本时,我正在使用 Ajax 向 PHP 脚本发送请求,该脚本检查数据库中是否有任何其他活动用户。如果不是,则脚本然后创建一个报价,并将报价放在数据库中。之后,客户端每秒轮询一个单独的 PHP 脚本,以检查来自连接到该脚本的另一个客户端的答案。
之后,我从另一个客户端连接到脚本,该客户端查询相同的 PHP 脚本和 DB,然后意识到活动用户(第一个连接)已经发布了一个报价,第二个客户端获取并设置了该报价用于远程描述。然后第二个客户端创建一个答案,并将其放在数据库中。
此时,第一个客户端(每秒轮询 DB)检测到存在答案并将该答案设置为第一个客户端的远程描述。不幸的是,即使成功完成所有这些操作,其他客户的视频也没有弹出。
所以这就是我感到困惑并有三个(多部分)问题的地方:
1) 我认为在两个客户端都设置了他们的本地描述然后将该本地描述发送给另一个客户端和另一个客户端设置接收描述作为远程描述之后 onaddstream 事件应该触发,因此允许我显示远程视频。然而,这并没有发生。这在我使用 WebSocket 之前工作得很好,但它根本不适用于纯 Ajax。我有什么特别想念的吗?在过去的六个月里,WebRTC 规范是否发生了根本性的变化?我尝试查看 WebRTC 规范,但没有发现任何重大变化。
2) 在对无法使用 Ajax 感到沮丧之后,我回到了我的 WebSocket 版本并将其加载到我的本地主机上。自从上次使用它(六个月前运行良好)以来,我根本没有更改代码,但是现在,当我尝试使用它时,有时它可以工作,有时它不会。有时我会收到与无法设置本地和/或远程描述相关的错误。这是怎么回事?是否对规格进行了更改会导致这种情况发生?与此相关,即使我无法使用 Ajax 版本弹出远程视频,但我一直在向控制台回显很多内容,而且似乎与 Ajax 版本一样,有时是本地和两个客户端的远程描述都已成功设置,有时在尝试设置本地/远程描述时会出现错误,即使我每次都运行完全相同的脚本而没有任何更改。我正在使用最新版本的 Chrome,我开始怀疑它是否存在错误或其他问题。
3) 建立连接是否需要 onicecandidate 事件处理程序?我的假设是,对等点可以通过简单的有效提议和答案建立连接,并且 onececandidate 事件用于提供替代路线等,这可能会导致更好的连接(但不是必需的)。我错了吗?如果需要 onececandidate 信息,您建议我如何使用 Ajax 作为信令方法来处理?
我知道这是很多信息和很多问题,但是任何人都可以提供的任何信息/见解将不胜感激。在过去的几天里,我一直在用头撞桌子,试图弄清楚这一点,但没有任何意义。
【问题讨论】:
-
"所有提供套接字的网络服务器都很昂贵" 您可以使用 Amazon Web Services 在一年内免费获得所需的东西,我也会说 Google App Engine,但我不确定这个。
-
安托万,很高兴知道。非常感谢。不幸的是,它并没有真正回答我的主要问题。