为什么使用 Android 附近共享时通过蓝牙传输文件?
Why are files transferred via bluetooth when using Android Nearby Share?
附近共享有时使用蓝牙传输文件,因此速度很慢。有时传输超过 100 MB 的文件一点也不方便。最初我认为蓝牙仅用于握手目的。但后来我意识到文件本身是通过蓝牙传输的。我很好奇为什么文件可以通过 wifi direct 传输时要通过蓝牙传输。许多第三方应用程序,包括 Google Files 使用 wifi direct 来传输文件。那么为什么像 Nearby Share 这样的内置功能应该使用蓝牙。 Nearby Share 本身的唯一目的是在没有互联网的情况下通过 wifi direct 实现快速文件传输。因此,如果文件是通过蓝牙传输的,那么使用附近共享就没有意义了。
我也很想知道附近共享中存在的各种文件传输模式。共有三种模式:数据、仅 Wifi 和无互联网。我真的很想知道当附近共享用于没有互联网的文件传输时为什么需要互联网连接来传输文件。它是为了 Web RTC 中的握手目的吗?
(免责声明:我在附近分享工作)
附近共享将始终在发送大于 1MB 的文件之前尝试升级到 WiFi。在回退机制启动之前,为该升级提供了 10 秒的宽限期,并且作为最后的手段通过蓝牙发送文件。即使在回退到蓝牙后,设备仍会在后台继续尝试升级到 WiFi,但有些失败是不可恢复的,文件将完全通过蓝牙发送。请注意,网址和非常小的文件将立即通过蓝牙发送。
此升级可能因多种原因而失败。最常见的是,这是一个并发问题。相同的无线电用于蓝牙、p2p WiFi 和您的正常接入点连接,因此它必须是 time-shared。如果所有 3 个都想在不同的频道上,您将错过消息——这是一个保证。如果这些消息很重要,例如通过 WiFi Direct 连接时的身份验证帧,则连接将失败。如果这些消息不太重要,它们可能会重新发送直到成功接收,但这会降低传输的吞吐量,以至于即使是 5GHz WiFi 看起来也和蓝牙一样慢。
附近分享试图通过几种方式避免这种情况。当法规允许时,我们将尝试在与接入点相同的频道上启动 WiFi Direct 组。这样,phone就不用分时了(虽然它确实有与接入点的消息冲突的副作用。但一般来说,双方都会退回一个随机数量并重新传输,损失是小于 multi-channel 并发损失)。不幸的是,许多国家/地区确实有法规只允许在室内使用某些(或所有)5GHz 信道——在这种情况下,可以设置接入点来使用它,但 WiFi Direct 不能。
我们也更喜欢 WiFi Direct 之类的媒体而不是热点,因为 WiFi Direct 通常使用 CTS2SELF 帧来宣传“在此期间不要传输”。不幸的是,它不像“我要离开频道,不要尝试与我通信”那样直截了当——CTS2SELF 有一个副作用,即使它没有指向 phone -- 但它确实说明了问题。
我们暂停我们控制的任何蓝牙 activity,以减少与其分时的需要。在一些严重的情况下,OEM 实施的分时过于激进,我们将关闭蓝牙无线电以强制中断蓝牙 activity,但这是破坏性的,通常是糟糕的用户体验。
我们可能会尝试通过您的接入点本身发送数据,而不是设置 WiFi Direct。这样可以避免上述MCC的情况,但是代价是数据需要re-encrypted(因为我们不知道局域网内还有哪些设备在被窃听),同时也引入了另一个跳,因为即使设备是 side-by-side,数据也需要通过 AP。 TDLS 有助于避免最后一个问题,但它有局限性(例如,如果没有为其设置 AP,它不会使用 40/80/160MHz 带宽,如果 AP 处于 2.4 上,它将发送超过 2.4GHz GHz).
其他可能的故障包括设备进入错误状态(切换飞行模式可以在此处提供帮助),Android 版本太低(理想情况下两个设备都应该是 R+,因为修复错误几乎是不可能的在较旧的 Android OS 版本上,即使我们尝试了),或者只是运气不好。
附近共享有时使用蓝牙传输文件,因此速度很慢。有时传输超过 100 MB 的文件一点也不方便。最初我认为蓝牙仅用于握手目的。但后来我意识到文件本身是通过蓝牙传输的。我很好奇为什么文件可以通过 wifi direct 传输时要通过蓝牙传输。许多第三方应用程序,包括 Google Files 使用 wifi direct 来传输文件。那么为什么像 Nearby Share 这样的内置功能应该使用蓝牙。 Nearby Share 本身的唯一目的是在没有互联网的情况下通过 wifi direct 实现快速文件传输。因此,如果文件是通过蓝牙传输的,那么使用附近共享就没有意义了。
我也很想知道附近共享中存在的各种文件传输模式。共有三种模式:数据、仅 Wifi 和无互联网。我真的很想知道当附近共享用于没有互联网的文件传输时为什么需要互联网连接来传输文件。它是为了 Web RTC 中的握手目的吗?
(免责声明:我在附近分享工作)
附近共享将始终在发送大于 1MB 的文件之前尝试升级到 WiFi。在回退机制启动之前,为该升级提供了 10 秒的宽限期,并且作为最后的手段通过蓝牙发送文件。即使在回退到蓝牙后,设备仍会在后台继续尝试升级到 WiFi,但有些失败是不可恢复的,文件将完全通过蓝牙发送。请注意,网址和非常小的文件将立即通过蓝牙发送。
此升级可能因多种原因而失败。最常见的是,这是一个并发问题。相同的无线电用于蓝牙、p2p WiFi 和您的正常接入点连接,因此它必须是 time-shared。如果所有 3 个都想在不同的频道上,您将错过消息——这是一个保证。如果这些消息很重要,例如通过 WiFi Direct 连接时的身份验证帧,则连接将失败。如果这些消息不太重要,它们可能会重新发送直到成功接收,但这会降低传输的吞吐量,以至于即使是 5GHz WiFi 看起来也和蓝牙一样慢。
附近分享试图通过几种方式避免这种情况。当法规允许时,我们将尝试在与接入点相同的频道上启动 WiFi Direct 组。这样,phone就不用分时了(虽然它确实有与接入点的消息冲突的副作用。但一般来说,双方都会退回一个随机数量并重新传输,损失是小于 multi-channel 并发损失)。不幸的是,许多国家/地区确实有法规只允许在室内使用某些(或所有)5GHz 信道——在这种情况下,可以设置接入点来使用它,但 WiFi Direct 不能。
我们也更喜欢 WiFi Direct 之类的媒体而不是热点,因为 WiFi Direct 通常使用 CTS2SELF 帧来宣传“在此期间不要传输”。不幸的是,它不像“我要离开频道,不要尝试与我通信”那样直截了当——CTS2SELF 有一个副作用,即使它没有指向 phone -- 但它确实说明了问题。
我们暂停我们控制的任何蓝牙 activity,以减少与其分时的需要。在一些严重的情况下,OEM 实施的分时过于激进,我们将关闭蓝牙无线电以强制中断蓝牙 activity,但这是破坏性的,通常是糟糕的用户体验。
我们可能会尝试通过您的接入点本身发送数据,而不是设置 WiFi Direct。这样可以避免上述MCC的情况,但是代价是数据需要re-encrypted(因为我们不知道局域网内还有哪些设备在被窃听),同时也引入了另一个跳,因为即使设备是 side-by-side,数据也需要通过 AP。 TDLS 有助于避免最后一个问题,但它有局限性(例如,如果没有为其设置 AP,它不会使用 40/80/160MHz 带宽,如果 AP 处于 2.4 上,它将发送超过 2.4GHz GHz).
其他可能的故障包括设备进入错误状态(切换飞行模式可以在此处提供帮助),Android 版本太低(理想情况下两个设备都应该是 R+,因为修复错误几乎是不可能的在较旧的 Android OS 版本上,即使我们尝试了),或者只是运气不好。