Ios 使用CoreBlueTooth L2CAP通道传输音频文件
我需要一些示例代码来了解如何使用CoreBlueTooth L2CAP通道传输音频文件(或任何其他二进制数据)。假设文件不是那么小,我们假设它是几百KB 我正在开发一个小的iOS应用程序来实现这一点,但它只是工作了一半 在这一点上,我可以传输几千个字节,但它不会更进一步 以防万一,这是我在发送端的相关代码:Ios 使用CoreBlueTooth L2CAP通道传输音频文件,ios,swift,core-bluetooth,l2cap,Ios,Swift,Core Bluetooth,L2cap,我需要一些示例代码来了解如何使用CoreBlueTooth L2CAP通道传输音频文件(或任何其他二进制数据)。假设文件不是那么小,我们假设它是几百KB 我正在开发一个小的iOS应用程序来实现这一点,但它只是工作了一半 在这一点上,我可以传输几千个字节,但它不会更进一步 以防万一,这是我在发送端的相关代码: let path = Bundle.main.path(forResource: "\(name)", ofType: nil)!, url = URL(fileURLWithPath: p
let path = Bundle.main.path(forResource: "\(name)", ofType: nil)!,
url = URL(fileURLWithPath: path)
do {let audioData = try Data(contentsOf: url)
// do something useful with audioData to send it
// to the other device.
..........
let bytesWritten = data.withUnsafeBytes {outStream!.write($0, maxLength: audioData.count)}
if bytesWritten > 0 {
..........
}
} catch {
print("Error: \(error.localizedDescription)")
}
在接受方:
let inData = Data(reading: inStream)
if inData.count != 0 {
// Data has been received.
.......
}
我显然没有展示太多细节,但我的代码缺少一些关键部分,这就是为什么我很高兴找到一些小的工作示例,以便了解它是如何工作的。请参阅。特别是,您需要确保在runloop上调度流。在检查了我的代码(与您提到的链接)之后,也可以看到,调度似乎没有任何问题。但我不确定在“let bytesWrite=data.withUnsafeBytes{ostream.write($0,maxLength:data.count)}”中,不是所有字节都可以写入时会发生什么。我不清楚如何处理左边的字节。这可能不会发生在演示中,因为它只发送小部分文本。但我想处理的音频文件,我将无法发送所有的字节在同一时间。我不知道该怎么办。事实上,我已经发送了包含数千字节音频数据的第一个数据块,但在第一个数据块处停止。L2CAP的输出容量有限。当
hasspaceavable
为真时,您需要循环返回并发送更多信息。L2CAP不是一个快速协议。