iOS WebRTC 连接卡在 Ice 连接状态收集

问题描述 投票:0回答:3

我正在做一个 iOS 原生 WebRTC 实现,并且我正在尝试与 Wowza 流引擎进行对等连接。

我已经构建了自己的实现,交换SDP报价/答案,没有错误,但交换在冰状态检查中停止。

这也可以按预期从 Chrome 通过 WebRTC 传输到 Wowza 引擎,因此问题似乎并不存在于此。

我收到日志错误

[019:110] [51467] (stunport.cc:282): Port[801a400:0:1:0:local:Net[en2:169.254.0.x/16:Wifi:id=1]]: UDP send of 100 bytes failed with error 65
[009:190] [52483] (port.cc:1731): Conn[7058e00:0:Net[en2:169.254.0.x/16:Wifi:id=3]:K1VeXnEm:1:0:local:udp:169.254.31.x:63068->u76s55ya:1:50:local:udp:52.7.176.x:6970|C--W|-|0|0|218992623103|-]: Sent STUN ping, id=66706566354b77567a55706a, use_candidate=0, nomination=0
[009:241] [52483] (port.cc:1731): Conn[503dc00:0:Net[pdp_ip0:10.233.207.x/32:Cellular:id=8]:Usd6n9/m:1:0:local:udp:10.233.207.x:61703->u76s55ya:1:50:local:udp:52.7.176.x:6970|C--W|-|0|0|218992229887|-]: Sent STUN ping, id=6431755a4674675155333050, use_candidate=0, nomination=0
[009:292] [52483] (port.cc:1731): Conn[7060e00:0:Net[en0:192.168.0.x/24:Wifi:id=1]:s9SLzrT3:1:0:local:udp:192.168.0.x:53334->u76s55ya:1:50:local:udp:52.7.176.x:6970|C--I|-|0|0|218992754175|-]: Sent STUN ping, id=496e57507237574d52324b50, use_candidate=0, nomination=0

任何帮助都会很棒!

编辑: 更详细的流程。

我正在尝试在 iOS 上的 Wowza Streaming Engine 实例和 WebRTC 之间创建对等连接。连接只是发布,没有接收任何流。

我的步骤如下

  1. 从工厂创建的对等连接。
  2. 媒体流已添加到对等连接。
  3. 在对等连接上创建报价。
  4. 优惠设置为本地描述并发送至 Wowza。优惠有当地的 Ice Candadites
  5. Wowza 回应答案 SDP 和ice 候选人(Wowza 只给出一个)
  6. 答案设置为远程描述
  7. 单个 Ice Candidate 已添加到对等连接中

最终状态始终是 RTCIceConnectionStateChecking 然后失败。

ios objective-c xcode webrtc wowza
3个回答
3
投票

您需要交换(滴流)ICE候选人,或者在交换SDP要约/答案之前等待几秒钟,以便当地ICE代理有时间用候选人填充要约/答案(可通过获取本地描述来获取)。


0
投票

也许有人在 iOS 上也会遇到这个问题。我也想知道如何让trickle工作,因为在我的情况下,它似乎甚至无法在iOS到iOS之间工作。但有可能的是,作为当前的呼叫者,您的连接会转到

checking
再次发送报价。在第二个offer中,您也会找到所有候选人。因此,当您发送所有候选人和那些没有在第二个offer上连接的候选人时,这可以让同行们进行连接。

尝试将您立即生成的报价与转到

checking
后生成的报价进行比较,看看有何不同。

func webRTCClient(_ client: WebRTCClient, didChangeConnectionState
state: RTCIceConnectionState)

如果您接到州“正在检查”电话:-

-(void)offerForConstraints:(RTCMediaConstraints *)constraints
completionHandler:(nullable void (^)(RTCSessionDescription *_Nullable sdp,
NSError *_Nullable error))completionHandler;

0
投票

对于遇到 ICE 连接状态卡在“正在检查”(RTCIceConnectionStateChecking)问题的人:

  • 使用 TURN 服务器(而不是 STUN)
  • 测试 WebRTC 时使用真实设备,避免使用模拟器
© www.soinside.com 2019 - 2024. All rights reserved.