PHP Ratchet 和 WebRTC

Posted

技术标签:

【中文标题】PHP Ratchet 和 WebRTC【英文标题】:PHP Ratchet and WebRTC 【发布时间】:2016-10-20 20:30:42 【问题描述】:

我正在尝试在 php 网站上开发流式 webrtc。

我想用 webrtc 建立流式点对点。

我知道 webrtc 在节点和套接字上工作正常,可以进行所有配置以建立 webrtc 连接。

我可以使用 Ratchet 和 PHP 代替节点和套接字吗?

Ratchet 支持 https 吗?

【问题讨论】:

https 是的。您将需要发信号,非常简单,只需在接收候选人时向所有人发送消息。客户做所有事情。为了使配置棘轮与 php 会话一起工作,你需要更多的研究,我无法在这一点上帮助你。 【参考方案1】:

几乎所有的教程都说 WebRTC 很简单,但同时他们只重复相同的 webrtc.org 基本示例并且几乎只使用 Node.js。

我发现 this 不错的早期 WebRTC+PHP GitHub 项目,该项目使用 PHP 和 mysql 编写了一个简单的信号服务器(尽管它可以被文本文件替换)。我认为它可能对你有用。已过时,上次更改是 6 年前,但我可以向您解释使用 PHP 7 和最新的 Firefox 和 Chrome 版本运行它所需的代码更改。

我计划在可以实现对多个(不是固定数量)用户版本进行编码时共享一个分叉。但缺乏示例使其变得更加困难。

【讨论】:

如何帮助更新代码并添加视频功能? @Junior, this article(包含代码)解释了如何使用 webRTC 和 Ratchet (PHP) 构建文本、音频和视频聊天 Web 应用程序。我想它可能对你有用,除非你想以最简单的方式编写代码,只是为了像我一样学习它。 嗨@leopoldo-sanczyk。我找到了你提到的项目,并在那里提供了一些贡献和修复。如果有人想要现场演示,可以使用phpvideochat.lupahosting.com.br。谢谢提示【参考方案2】:

所以你想在 PHP 网站上开发一个流式 webrtc 示例。

如果您使用共享主机,那么使用 PHP 会很困难,因为您没有服务器上的命令行访问权限,而这是 WebSocket 实现所需要的。然后,您可以使用我在https://github.com/nielsbaloe/webrtc-php 的项目在没有带有 SSE 的 websockets(ServerSideEvents)的情况下执行 WebRtc。非常适合少于 100 名用户。

如果您不在共享主机上,那么您可以使用任何支持 websocket 的 PHP 包,例如 Ratchet。然而,这些天没有人这样做。您也可以改用 node.js,并拥有一个少于 10 行代码的信号服务器。

【讨论】:

您是否设法使用棘轮?我也在寻找使用棘轮的 webrtc 解决方案 这对于 PHP over HTTP 来说并不难,只是及时且效率低下。调用者将首先通过 ajax 向服务器发送 SDP 描述和候选冰。然后,呼叫者将开始轮询服务器以获取来自应答者的响应。应答者将看到有人试图呼叫他们(接收呼叫者 SDP 和 ICE)并将他们自己的 SDP 描述和候选冰发送到服务器并开始轮询呼叫者可能发送的其他 ICE 候选。当呼叫者的投票响应初始 SDP 和 ICE 的答案时,它将轮询来自回答者的任何其他候选冰,依此类推,直到建立连接【参考方案3】:

是的,WebRTC 可以很好地与 PHP 主机配合使用。这里的重要事实是,实际上任何东西都可以用作信令服务器。您可以将 SDP 描述和 ICE 候选字写在纸上,然后使用归位 pidgins 来回发送。但是在涉及 PHP 的地方,是的,Ratchet、Workerman、Swoole 等都可以用于创建信号服务器。大多数 WebRTC 网关还具有 PHP 友好的插件,允许 PHP 主机在会议服务器、SFU、MCU 等混合使用时在建立对等点之间的连接方面发挥更积极的作用。

【讨论】:

我喜欢这样的一个例子。是否有两个单独的 Web 客户端通过 textarea 框获取对方的示例? @Altimus Prime - 你是什么意思?首先,每个 textarea 的值可以通过 websocket 在两个客户端之间发送,如果每个客户端不断检查对方是否发送了自己的 textarea 值,则可以通过 ajax 发送。如果您的意思是一旦通过 WebRTC 连接,这将使用 WebRTC 数据通道进行 p2p。 我想问的是:假设有人通过电子邮件向我发送了他们的 SDP 信息,我将其粘贴到文本区域,我为他们做了同样的事情,我们能够通过 WebRTC 进行连接.是否有一些演示或示例说明如何在没有信令服务器的情况下做到这一点?

以上是关于PHP Ratchet 和 WebRTC的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 无法连接到 PHP Ratchet WebSocket 服务器

如何纠正棘轮中的[PHP致命错误:未找到接口'Ratchet\MessageComponentInterface']

PUSH/PULL 模式中丢失的消息(Ratchet + PHP + ZeroMQ 推送集成)

使用 Ratchet for PHP 通过 WebSocket 流式传输二进制数据

在 Debian 上运行的 Ratchet PHP Websocket

Ratchet PHP - 推送消息服务