问题标签 [signaling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
webrtc - 您如何在 WebRTC 信令中有效地处理新来者?
WebRTC 没有解决信令问题(即使我们确实以JSEP作为起点),但据我了解,它是这样工作的:
- 客户端告诉服务器它在 X 可用
- 服务器保存该信息并将其映射到标识符
- 其他客户端来并发送标识符以从第一个客户端获取连接信息
- 其他客户端使用它来创建它的一个连接信息并将其发送到服务器
- 服务器将此发送给第一个客户端
- 两个客户现在都可以交谈
这一切都很好,但是如果第三个客户到达会发生什么?
你必须重做所有的事情。假设前两个客户端仍然连接到服务器,等待第三个客户端发出信号,然后再次开始交换过程,以便他们可以获得第三个客户端连接信息。
那么这是否意味着您需要为每个客户端(长轮询、websocket 等)建立到服务器的永久链接?如果是,有没有办法有效地做到这一点?
因为如果我必须设置 nodejs 或 tornado 并使其扩展到我的用户数量,我看不到使用 webRTC 的意义。这对我来说听起来不是很p2pish。
请告诉我我错过了什么。
socket.io - 有关信令过程的任何资源
我正在使用 Socket.io 来实现一个信号过程,例如连接、呼叫、应答、拒绝等……以及 onUserCalling、onUserRejected 等……
我不知道处理所有状态的最佳方法是什么,例如,如果 A 正在呼叫 B,那么 A 的状态将设置为“正在呼叫”,而 B 的状态将是“onUserCalling”。因此,与此同时,C 既不能调用 A 也不能调用 B,因为它们的状态不“可用”。
但是当事情变得复杂时,很难控制状态。
那么有没有人知道关于这个问题的好材料/博客文章/模式?
提前致谢。
google-app-engine - 为 webRTC 视频聊天创建频道
我一直在关注HTML5rocks webRTC 指南,并且按照描述设置了 Javascript,但是该指南不清楚如何接收 channelToken、roomKey 和用户 ID。导游说,
“请注意,JavaScript 中使用的值(例如 room 变量和 openChannel() 使用的令牌)由 Google App Engine 应用程序本身提供:查看存储库中的index.html模板以了解哪些值是添加。”
不幸的是,提供的链接并不好,关于此过程中最重要步骤的信息很少。该指南不清楚 Google App Engine 是否是必要的组件,我不明白为什么它应该是。我在网上搜索过,试图找到更有用的资源,但没有成功。我还查看了 webRTC Demo(https://apprtc.appspot[dot]com),看到频道信息是在服务器端生成的,也无济于事。我觉得我应该能够向某个 Google 服务器发出一个简单的 http 请求,然后从那里运行。任何有关我的问题的信息将不胜感激。
webrtc - WebRTC Firefox 到 Chrome 视频通话不起作用
当我连接两个相同的浏览器时,我的 WebRTC 应用程序运行良好,但是当我尝试组合时,它们都不响应彼此的信令消息。可能值得一提的是我还没有实现 TURN,但是我不明白为什么这会有所作为,所以我不会改变它,除非我相当确定它会。
我不知道错误在哪里,所以为了便于阅读,我将根据要求添加代码。
c++ - 线程之间的信号
应用程序设计
我有一个 C++ 应用程序,它有一个生产者线程、多个队列(在运行时创建)和消费者线程。
生产者线程通过 Tcp/Ip 获取数据并放入相应的队列(例如,如果数据是 A 类型并放入队列 A)。
消费者线程当前从 1 - n 循环队列以处理来自每个队列的数据。
根据要求,无需跟踪上次更新或最少更新的队列。只要更新了任何队列,消费者就应该处理 1 - n 个队列。
如果任何队列的大小超过定义的限制,生产者线程将在插入新项目之前弹出第一个项目(以管理队列大小)。
线程之间的资源同步和信令:
在这个实现中,消费者线程应该休眠,直到没有队列有来自侦听器的数据。只有当生产者将数据放入任何一个队列时,消费者线程才应该唤醒。
使用互斥锁在 2 个线程之间同步多个队列。每当生产者将数据放入任何队列时,都会在线程之间实现事件信号以唤醒消费者线程。
然而,这种唤醒消费者线程的信号方式,尽管任何队列中有数据,消费者仍有可能进入睡眠状态。
问题:
让我们以这种情况为例,考虑消费者正在处理第 n 个队列的数据;同时,生产者有可能将数据放入 n-1、n-2 队列中,并且由于消费者处于清醒状态并正在处理第 n 个数据,因此信令无效。一旦消费者完成第 n 个队列数据的处理,它将进入休眠状态,并且在侦听器发出任何进一步的信号之前,不会处理 n-1、n-2 中的数据。
我们如何解决这种情况?人们还建议使用信号量。信号量与这种情况相关吗?
提前致谢。
javascript - 是否可以仅从本地网络显示 WebRTC 对等点?
这比 WebRTC 更像是一个信号问题,但是否有可能仅在同一本地网络中找到计算机?例如,是否有可能创建类似于 OS X AirDrop 的服务,您可以在其中访问页面,例如https://airdrop.com,您会看到其他计算机也在浏览器中打开了相同的站点,但前提是它们是否在同一个本地网络中,而不必在本地网络中托管某种信令服务器(即只有一个“全局”信令服务器)?
session - 是否有与应用程序无关的信令协议?
是否有与应用程序无关的信令协议?
用例是这样的。我们有一个用于多代理系统的开源库,它支持 OSI 模型应用层的多种协议。例如,目前支持 HTTP、XMPP 和 ZeroMQ。我们想增加高带宽实时流媒体的可能性。为此使用 RTP 是合乎逻辑的。
因此,总而言之,我们已经与另一方建立了连接,我们可以使用它来发出信号。我们只想协商一个新的数据通信渠道。
然而,就目前的标准而言,就信令而言,所有这些标准似乎都与它们的应用程序相关联。这些当前的“标准”似乎是 SIP、RTSP 和 Jingle。他们似乎都在应用层使用RTP或SRTP,在传输层使用UDP。参见例如XEP-0167。
我们唯一要协商的是与该方的另一个可用于数据传输的连接。在会话描述协议中,所有关于媒体的东西都会出现,可选的电话号码等。如果有人可以指出一个与应用程序无关的信令协议,那就太好了!
webrtc - PeerConnection:在本地网络中拨打电话
我正在玩 WebRTC,我想要实现的是:
User1 在 192.168.xx 打开浏览器
User2打开浏览器在192.168.xx的同一页面
用户 1 单击呼叫,用户 2 在他的屏幕上显示流。
我已经使用 node 和 socket.io 创建了一个信令服务器,并且我能够使用 socket.io 房间在用户之间交换消息。
我正在遵循的步骤是:
- 获取用户媒体
- 创建 peerconnection1 - 没有冰服务器
- 在 peerconnection 上添加流
- 创建报价
- 通过套接字发送报价
- 接收报价并创建 peerconnection2 - 没有 ice 服务器
- 发送答案
我还在“oniceccandidate”和“onaddstream”中添加了一些日志,以查看它们何时被调用,并在“onaddstream”上创建了视频元素。
当我按下通话按钮时,我在另一台计算机上看到视频元素变黑,但我没有看到任何视频和音频。当然我错过了一些重要的步骤,
有人可以告诉我要进行正确的呼叫并交换所有必要的数据以在另一端显示流所需的步骤吗?
非常感谢
webrtc - WebRTC 信令状态如何保存在服务器上
最近我读了一篇关于现实世界中WebRTC的文章,它说
JSEP 的架构还避免了浏览器必须保存状态:即充当信令状态机。例如,如果每次重新加载页面时都会丢失信令数据,这将是有问题的。相反,信令状态可以保存在服务器上。
我知道 WebRTC 的信令是基于状态的,例如RTCpeerstate,RTCIceGatheringState。有人可以向我解释一下服务器究竟需要做什么来保存状态吗?
php - simpleWebRTC signalmaster - 设置信号 + STUN 和 TURN
我用作simpleWebRTC
一种多视频应用程序。
现在我需要设置一个信令服务器。问题:我没有节点知识。
可能的解决方案:
有解决方案
PHP
吗?(是的......可能不是......)有服务吗?(我确实尝试
Xirsys
过 - 没有成功连接到那里Stun
并且 Turn + 他们没有指定信令服务器。查找Twilio
并PubNub
- 没有找到关于简单连接到信令、Stun、Turn 的文档 - 没有通过他们的系统构建所有东西)是否有一些简单的方法可以在节点上设置 signalmaster - 对于对节点没有真正了解的人?