iOS gamekit/蓝牙数据流

Posted

技术标签:

【中文标题】iOS gamekit/蓝牙数据流【英文标题】:iOS gamekit/bluetooth data streaming 【发布时间】:2013-07-31 07:56:43 【问题描述】:

我编写了一个程序,使用 gamekit/bluetooth 将使用压缩 jpeg 的低质量视频从一台 ios 设备传输到另一台设备。我已经意识到不应该将 gamekit/蓝牙用于此目的(用于小块数据),但它确实可以很好地流式传输 15 个低质量压缩 jpeg/秒,几乎没有延迟。

我的问题是,一旦我提高了从 iOS 设备发送器到 iOS 接收器的质量或帧速率,就会出现延迟或延迟,并且不再是实时的。如果有延迟,我希望发送 iOS 设备以某种方式丢弃帧,以便接收器可以赶上或让接收器忽略积压队列。

在 GameKit 中,我已将会话模式设置为使用 GKSendDataUnreliable 来查看是否有帮助,但无济于事。

如果发生延迟,丢弃帧 (jpeg) 以便 iOS 接收器可以赶上实时的最佳解决方案和正确方法是什么?发送方是否需要停止传输一段时间,或者接收客户端可以做些什么来丢弃累积队列。

我之前也用过 NSStream,虽然使用 wifi 可以提供更大的带宽,但如果传输的数据过多,仍然会出现延迟问题。

提前感谢您的帮助。

【问题讨论】:

查看帧队列等的一些代码可能会有所帮助。您可能是正确的,您需要停止传输或丢弃队列中的帧。 【参考方案1】:

您能否为每个 jpg 附加时间戳(可能是从纪元开始的时间),以便接收客户端将忽略不在给定时间范围内的所有图像。

您也可以让接收客户端回复简单的确认数据包,表明已收到 jpg。如果发送客户端在给定的时间范围内没有收到确认数据包,它会丢弃所有要发送的图像并从头开始。

使用此解决方案,如果接收客户端落后于发送者 X 秒,它将停止发送确认数据包并丢弃所有传入数据,直到发送者丢弃其队列中的所有内容并再次开始发送“实时”帧。

【讨论】:

以上是关于iOS gamekit/蓝牙数据流的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 上以编程方式打开蓝牙

IOS 蓝牙(GameKitCore Bluetooth)

iOS蓝牙

使用蓝牙 4.0 在 iOS 设备之间交换数据

通过蓝牙在 iOS 和 Android 之间传输数据?

GameKit蓝牙传输问题