Geocld / XStreaming

Xbox streaming app, you can play Xbox games anywhere.
MIT License
259 stars 12 forks source link

Ice交换成功,正在建立连接…… #21

Open santiagochen opened 2 months ago

santiagochen commented 2 months ago

在家中,试过不开加速器和开加速器都是一样的问题,一直卡在Ice交换成功,正在建立连接……。换官方Xbox 串流正常。望继续努力。

Bozz07 commented 1 month ago

同样出现这个问题

jacky123174 commented 1 month ago

我也碰到一样的情况。原因是用了uu加速盒之后就会这样,如果手机与xbox在同一个ssid下面没有问题,如果不在同一个ssid下面就卡在Ice交换成功,正在建立连接……;但是同样的情况下用xbox官方app是可以正常串流的。请大佬看看能不能解决这个问题。

Geocld commented 1 month ago

这个问题我来解释一下,先说结论:目前这个问题暂时不能彻底解决

以下解释只适用主机可以正常远程串流的场景,网络环境没设置好的情况不在解释范围内。

卡在正在连接的原因

在出现Ice交换成功,正在建立连接的时候,客户端已经找到了主机IP,正在进行P2P直连的最后阶段,输入通道正在等待主机端的connected响应,详细代码实现查看此处,也就是客户端一直接收不到主机的connected信号,导致串流连接直接卡住了,目前这个问题基本出现在远程串流Xbox主机会出现这个问题。

个人猜测

个人猜测这个问题出现的原因大概率是因为Xbox主机使用的WebRTC协议不是标准协议,导致有时候会出现WebRTC连接没有响应的情况,而官方xbox应用可以在多数情况下成功连接也正是有这个特殊的协议实现,而这个特殊的协议实现目前还未知,因此不能彻底解决。这个推测的依据有以下两点:

  1. 串流云游戏跟串流主机使用的是相同的逻辑,云游戏没有出现过卡在正在连接的情况。
  2. 我尝试过使用安卓原生的webrtc连接xbox主机,会出现已经连接,且出现了串流画面,但过一分钟会被主机端踢下线(错误关键字:kick for no client connection),使用同样的实现在云游戏没有问题,至今还没有解决这个问题,感兴趣可以参考webrtc分支的实验性代码。

尝试解决

  1. v1.0.0加入了微软的STUN服务器做为首选。
  2. 以往的版本会缓存用户的token以减少每次登录的时长(缓存时间一小时),这也会导致相同的token在发起串流回话时会有相同的sessionID,也就是这个sessionID一旦卡住,无论后续试多少次,主机端都视为一个会话,从而导致一直无法连接。v1.0.0加入了连接失败提示,出现这个提示点击弹窗的刷新按钮可以彻底清空缓存,从而在下次发起串流会话时用新的sessionId访问主机,个人亲测出现连接卡住后重试几次可以正常连接,如果实在无法连接,那么尝试先使用官方xbox应用远程连接一次,再使用XStreaming进行连接,成功率可以大大提高。
www2790 commented 1 month ago

也遇到这种情况。9002、3074端口是打开的,且xbox官方app是可以串流成功的。但xstreaming串流就会出现ICE连接的问题。异地时只有vpn回家,在同一局域网下,才能串流成功。

FanLemon commented 1 month ago

这个问题我来解释一下,先说结论:目前这个问题暂时不能彻底解决

以下解释只适用主机可以正常远程串流的场景,网络环境没设置好的情况不在解释范围内。

卡在正在连接的原因

在出现Ice交换成功,正在建立连接的时候,客户端已经找到了主机IP,正在进行P2P直连的最后阶段,输入通道正在等待主机端的connected响应,详细代码实现查看此处,也就是客户端一直接收不到主机的connected信号,导致串流连接直接卡住了,目前这个问题基本出现在远程串流Xbox主机会出现这个问题。

个人猜测

个人猜测这个问题出现的原因大概率是因为Xbox主机使用的WebRTC协议不是标准协议,导致有时候会出现WebRTC连接没有响应的情况,而官方xbox应用可以在多数情况下成功连接也正是有这个特殊的协议实现,而这个特殊的协议实现目前还未知,因此不能彻底解决。这个推测的依据有以下两点:

  1. 串流云游戏跟串流主机使用的是相同的逻辑,云游戏没有出现过卡在正在连接的情况。
  2. 我尝试过使用安卓原生的webrtc连接xbox主机,会出现已经连接,且出现了串流画面,但过一分钟会被主机端踢下线(错误关键字:kick for no client connection),使用同样的实现在云游戏没有问题,至今还没有解决这个问题,感兴趣可以参考webrtc分支的实验性代码。

尝试解决

  1. v1.0.0加入了微软的STUN服务器做为首选。
  2. 以往的版本会缓存用户的token以减少每次登录的时长(缓存时间一小时),这也会导致相同的token在发起串流回话时会有相同的sessionID,也就是这个sessionID一旦卡住,无论后续试多少次,主机端都视为一个会话,从而导致一直无法连接。v1.0.0加入了连接失败提示,出现这个提示点击弹窗的刷新按钮可以彻底清空缓存,从而在下次发起串流会话时用新的sessionId访问主机,个人亲测出现连接卡住后重试几次可以正常连接,如果实在无法连接,那么尝试先使用官方xbox应用远程连接一次,再使用XStreaming进行连接,成功率可以大大提高。

xbox的webrtc当然是符合webrtc标准协议,主要是2个方面。

  1. 候选地址是否过滤了ipv6。内网也不存在连不上的问题只要是做了正确的stun
  2. 连接上后需要不停的发送心跳包,否则会被踢下线。 greenlight的代码里有具体实现
Geocld commented 1 month ago

这个问题我来解释一下,先说结论:目前这个问题暂时不能彻底解决

以下解释只适用主机可以正常远程串流的场景,网络环境没设置好的情况不在解释范围内。

卡在正在连接的原因

在出现Ice交换成功,正在建立连接的时候,客户端已经找到了主机IP,正在进行P2P直连的最后阶段,输入通道正在等待主机端的connected响应,详细代码实现查看此处,也就是客户端一直接收不到主机的connected信号,导致串流连接直接卡住了,目前这个问题基本出现在远程串流Xbox主机会出现这个问题。

个人猜测

个人猜测这个问题出现的原因大概率是因为Xbox主机使用的WebRTC协议不是标准协议,导致有时候会出现WebRTC连接没有响应的情况,而官方xbox应用可以在多数情况下成功连接也正是有这个特殊的协议实现,而这个特殊的协议实现目前还未知,因此不能彻底解决。这个推测的依据有以下两点:

  1. 串流云游戏跟串流主机使用的是相同的逻辑,云游戏没有出现过卡在正在连接的情况。
  2. 我尝试过使用安卓原生的webrtc连接xbox主机,会出现已经连接,且出现了串流画面,但过一分钟会被主机端踢下线(错误关键字:kick for no client connection),使用同样的实现在云游戏没有问题,至今还没有解决这个问题,感兴趣可以参考webrtc分支的实验性代码。

尝试解决

  1. v1.0.0加入了微软的STUN服务器做为首选。
  2. 以往的版本会缓存用户的token以减少每次登录的时长(缓存时间一小时),这也会导致相同的token在发起串流回话时会有相同的sessionID,也就是这个sessionID一旦卡住,无论后续试多少次,主机端都视为一个会话,从而导致一直无法连接。v1.0.0加入了连接失败提示,出现这个提示点击弹窗的刷新按钮可以彻底清空缓存,从而在下次发起串流会话时用新的sessionId访问主机,个人亲测出现连接卡住后重试几次可以正常连接,如果实在无法连接,那么尝试先使用官方xbox应用远程连接一次,再使用XStreaming进行连接,成功率可以大大提高。

xbox的webrtc当然是符合webrtc标准协议,主要是2个方面。

  1. 候选地址是否过滤了ipv6。内网也不存在连不上的问题只要是做了正确的stun
  2. 连接上后需要不停的发送心跳包,否则会被踢下线。 greenlight的代码里有具体实现

事实上greenlight的代码实现我已经看过好多遍了,你说的这些都有代码做处理。而且greenlight也一样存在卡在接收connected事件的问题,相关issues: https://github.com/unknownskl/greenlight/issues/896 https://github.com/unknownskl/greenlight/issues/498

包括xbxplay串流主机有时候也会出现连接不上的问题,虽然xbxplay没有显示具体错误,但基本情况也类似,目前就是不知道官方xbox应用使用了什么黑科技可以保证连接稳定性。

FanLemon commented 1 month ago

这个问题我来解释一下,先说结论:目前这个问题暂时不能彻底解决

以下解释只适用主机可以正常远程串流的场景,网络环境没设置好的情况不在解释范围内。

卡在正在连接的原因

在出现Ice交换成功,正在建立连接的时候,客户端已经找到了主机IP,正在进行P2P直连的最后阶段,输入通道正在等待主机端的connected响应,详细代码实现查看此处,也就是客户端一直接收不到主机的connected信号,导致串流连接直接卡住了,目前这个问题基本出现在远程串流Xbox主机会出现这个问题。

个人猜测

个人猜测这个问题出现的原因大概率是因为Xbox主机使用的WebRTC协议不是标准协议,导致有时候会出现WebRTC连接没有响应的情况,而官方xbox应用可以在多数情况下成功连接也正是有这个特殊的协议实现,而这个特殊的协议实现目前还未知,因此不能彻底解决。这个推测的依据有以下两点:

  1. 串流云游戏跟串流主机使用的是相同的逻辑,云游戏没有出现过卡在正在连接的情况。
  2. 我尝试过使用安卓原生的webrtc连接xbox主机,会出现已经连接,且出现了串流画面,但过一分钟会被主机端踢下线(错误关键字:kick for no client connection),使用同样的实现在云游戏没有问题,至今还没有解决这个问题,感兴趣可以参考webrtc分支的实验性代码。

尝试解决

  1. v1.0.0加入了微软的STUN服务器做为首选。
  2. 以往的版本会缓存用户的token以减少每次登录的时长(缓存时间一小时),这也会导致相同的token在发起串流回话时会有相同的sessionID,也就是这个sessionID一旦卡住,无论后续试多少次,主机端都视为一个会话,从而导致一直无法连接。v1.0.0加入了连接失败提示,出现这个提示点击弹窗的刷新按钮可以彻底清空缓存,从而在下次发起串流会话时用新的sessionId访问主机,个人亲测出现连接卡住后重试几次可以正常连接,如果实在无法连接,那么尝试先使用官方xbox应用远程连接一次,再使用XStreaming进行连接,成功率可以大大提高。

xbox的webrtc当然是符合webrtc标准协议,主要是2个方面。

  1. 候选地址是否过滤了ipv6。内网也不存在连不上的问题只要是做了正确的stun
  2. 连接上后需要不停的发送心跳包,否则会被踢下线。 greenlight的代码里有具体实现

事实上greenlight的代码实现我已经看过好多遍了,你说的这些都有代码做处理。而且greenlight也一样存在卡在接收connected事件的问题,相关issues: unknownskl/greenlight#896 unknownskl/greenlight#498

包括xbxplay串流主机有时候也会出现连接不上的问题,虽然xbxplay没有显示具体错误,但基本情况也类似,目前就是不知道官方xbox应用使用了什么黑科技可以保证连接稳定性。

你这个推断有点偏了。

  1. 官方xbox能稳定连接,说明你使用的物理网络环境没有问题。
  2. 你能用标准webrtc连接上看到画面,说明xbox用的webrtc的协议是标准协议。 综上2条,连接问题不是你解释的那样。我主要是想说,这个问题是可以通过排查代码处理掉的,一旦处理好,第三方app一样的可以100%稳定连接。
Geocld commented 1 month ago

@FanLemon 谢谢,你倒给了我一些启发,改天我把ice候选项在远程的情况过滤掉一些内网地址试试

www2790 commented 1 month ago

也遇到这种情况。9002、3074端口是会打开的,且xbox官方app是可以串流成功的。但是xstreaming串流出现ICE连接的问题。异地时只有vpn回家,在同一局域网下,才能串流成功。

此前路由器防火墙内专门屏蔽了xbox的ipv6地址分配,现在把屏蔽取消掉,xbox获取ipv6地址后。手机用数据网络链接成功。看来问题是出现在xbox的ipv6上???

Geocld commented 1 month ago

这个问题我来解释一下,先说结论:目前这个问题暂时不能彻底解决

以下解释只适用主机可以正常远程串流的场景,网络环境没设置好的情况不在解释范围内。

卡在正在连接的原因

在出现Ice交换成功,正在建立连接的时候,客户端已经找到了主机IP,正在进行P2P直连的最后阶段,输入通道正在等待主机端的connected响应,详细代码实现查看此处,也就是客户端一直接收不到主机的connected信号,导致串流连接直接卡住了,目前这个问题基本出现在远程串流Xbox主机会出现这个问题。

个人猜测

个人猜测这个问题出现的原因大概率是因为Xbox主机使用的WebRTC协议不是标准协议,导致有时候会出现WebRTC连接没有响应的情况,而官方xbox应用可以在多数情况下成功连接也正是有这个特殊的协议实现,而这个特殊的协议实现目前还未知,因此不能彻底解决。这个推测的依据有以下两点:

  1. 串流云游戏跟串流主机使用的是相同的逻辑,云游戏没有出现过卡在正在连接的情况。
  2. 我尝试过使用安卓原生的webrtc连接xbox主机,会出现已经连接,且出现了串流画面,但过一分钟会被主机端踢下线(错误关键字:kick for no client connection),使用同样的实现在云游戏没有问题,至今还没有解决这个问题,感兴趣可以参考webrtc分支的实验性代码。

尝试解决

  1. v1.0.0加入了微软的STUN服务器做为首选。
  2. 以往的版本会缓存用户的token以减少每次登录的时长(缓存时间一小时),这也会导致相同的token在发起串流回话时会有相同的sessionID,也就是这个sessionID一旦卡住,无论后续试多少次,主机端都视为一个会话,从而导致一直无法连接。v1.0.0加入了连接失败提示,出现这个提示点击弹窗的刷新按钮可以彻底清空缓存,从而在下次发起串流会话时用新的sessionId访问主机,个人亲测出现连接卡住后重试几次可以正常连接,如果实在无法连接,那么尝试先使用官方xbox应用远程连接一次,再使用XStreaming进行连接,成功率可以大大提高。

xbox的webrtc当然是符合webrtc标准协议,主要是2个方面。

  1. 候选地址是否过滤了ipv6。内网也不存在连不上的问题只要是做了正确的stun
  2. 连接上后需要不停的发送心跳包,否则会被踢下线。 greenlight的代码里有具体实现

对了,想跟你请教一下,ice候选过滤掉ipv6是出于什么考虑的?我刚才试验了下把候选逐一过滤,发现如果候选ip不通就会出现连接失败的情况,之前反馈的问题我想大概率就是解析候选键选到错误的ip了

FanLemon commented 1 month ago

这个问题我来解释一下,先说结论:目前这个问题暂时不能彻底解决

以下解释只适用主机可以正常远程串流的场景,网络环境没设置好的情况不在解释范围内。

卡在正在连接的原因

在出现Ice交换成功,正在建立连接的时候,客户端已经找到了主机IP,正在进行P2P直连的最后阶段,输入通道正在等待主机端的connected响应,详细代码实现查看此处,也就是客户端一直接收不到主机的connected信号,导致串流连接直接卡住了,目前这个问题基本出现在远程串流Xbox主机会出现这个问题。

个人猜测

个人猜测这个问题出现的原因大概率是因为Xbox主机使用的WebRTC协议不是标准协议,导致有时候会出现WebRTC连接没有响应的情况,而官方xbox应用可以在多数情况下成功连接也正是有这个特殊的协议实现,而这个特殊的协议实现目前还未知,因此不能彻底解决。这个推测的依据有以下两点:

  1. 串流云游戏跟串流主机使用的是相同的逻辑,云游戏没有出现过卡在正在连接的情况。
  2. 我尝试过使用安卓原生的webrtc连接xbox主机,会出现已经连接,且出现了串流画面,但过一分钟会被主机端踢下线(错误关键字:kick for no client connection),使用同样的实现在云游戏没有问题,至今还没有解决这个问题,感兴趣可以参考webrtc分支的实验性代码。

尝试解决

  1. v1.0.0加入了微软的STUN服务器做为首选。
  2. 以往的版本会缓存用户的token以减少每次登录的时长(缓存时间一小时),这也会导致相同的token在发起串流回话时会有相同的sessionID,也就是这个sessionID一旦卡住,无论后续试多少次,主机端都视为一个会话,从而导致一直无法连接。v1.0.0加入了连接失败提示,出现这个提示点击弹窗的刷新按钮可以彻底清空缓存,从而在下次发起串流会话时用新的sessionId访问主机,个人亲测出现连接卡住后重试几次可以正常连接,如果实在无法连接,那么尝试先使用官方xbox应用远程连接一次,再使用XStreaming进行连接,成功率可以大大提高。

xbox的webrtc当然是符合webrtc标准协议,主要是2个方面。

  1. 候选地址是否过滤了ipv6。内网也不存在连不上的问题只要是做了正确的stun
  2. 连接上后需要不停的发送心跳包,否则会被踢下线。 greenlight的代码里有具体实现

对了,想跟你请教一下,ice候选过滤掉ipv6是出于什么考虑的?我刚才试验了下把候选逐一过滤,发现如果候选ip不通就会出现连接失败的情况,之前反馈的问题我想大概率就是解析候选键选到错误的ip了

f
Geocld commented 1 month ago

也遇到这种情况。9002、3074端口是会打开的,且xbox官方app是可以串流成功的。但是xstreaming串流出现ICE连接的问题。异地时只有vpn回家,在同一局域网下,才能串流成功。

此前路由器防火墙内专门屏蔽了xbox的ipv6地址分配,现在把屏蔽取消掉,xbox获取ipv6地址后。手机用数据网络链接成功。看来问题是出现在xbox的ipv6上???

之前没开启ipv6使用官方xbox应用也可以串流,你是有ipv4公网地址吗?

www2790 commented 1 month ago

也遇到这种情况。9002、3074端口是会打开的,且xbox官方app是可以串流成功的。但是xstreaming串流出现ICE连接的问题。异地时只有vpn回家,在同一局域网下,才能串流成功。

此前路由器防火墙内专门屏蔽了xbox的ipv6地址分配,现在把屏蔽取消掉,xbox获取ipv6地址后。手机用数据网络链接成功。看来问题是出现在xbox的ipv6上???

之前没开启ipv6使用官方xbox应用也可以串流,你是有ipv4公网地址吗?

xbox放家里,有公网ipv4&ipv6,之前在openwrt路由器端防火墙中把xbox的ipv6分配给禁了。官方xbox app无论是ipv4&ipv6均可快速响应链接,但xstreaming在ice连接时不成功,提示nat打洞失败,只有vpn回家在同一局域网内才正常。后面把路由器对xbox ipv6的屏蔽关掉。现在xstreaming就可以在广域网正常链接xbox了。

www2790 commented 1 month ago

xstreaming设置是默认的,优先ipv6这个选项关闭的,xbox主机的网络ipv4&ipv6公网。 当手机移动网络通过改apn,仅ipv4公网,测试无法连接。apn改为ipv4私网,ipv6公网时,可以连接成功。当手机vpn回xbox主机所在局域网时,无论xbox有无ipv6,均可连接。 目前看起来,如果不在同一网络,要求连接两端要ipv6公网,才能成功。在同一网络就没关系怎么都可以成功连接,测试供参考。

TigerBeanst commented 2 weeks ago

我这边之前开放了 88,3074,500,3544,4500 端口,发现也是会卡在 ICE 交换成功,最后参考了 XBXPlay 的文档,多开了一个 9002 端口就连得上了……

我的网络环境是双方都纯 IPv4,其中 Xbox 的网络有公网 IP