我知道有很多关于没有调用委托方法的问题,但这是一个最初被调用的委托方法的问题,然后停止被调用。
所以基本上我有一个创建的流
outputStream = try self.appDelegate.connectionManager.sessions[sessionIndex!].startStream(withName: "newStream", toPeer: peerID!)
创建流时,我有一个被调用的委托方法,它执行以下操作。我有打印声明,似乎这种方法运行正常,所以我不相信问题在这里:
func startedStreamWithPeer(_ peerID: MCPeerID, inputStream: InputStream) {
self.recordingQueue.sync {
self.inputStream = inputStream
self.inputStreamIsSet = true
self.inputStream!.delegate = self
self.inputStream!.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
self.inputStream!.open()
self.outputStream!.delegate = self
self.outputStream!.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
self.outputStream!.open()
self.startRecording()
}
}
然后我写入输出流
let output = self.outputStream!.write(audioBuffer, maxLength: audioBuffer.count)
在另一台设备上,我从流中接收数据:
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
switch (eventCode) {
case Stream.Event.errorOccurred:
print("\(#file) > \(#function) > Error has occurred on input stream")
case Stream.Event.hasBytesAvailable:
print("\(#file) > \(#function) > New data has arrived")
receivingQueue.sync {
self.readFromStream()
}
}
}
此方法被调用两次,永远不会再次调用。但是,我可以看到流仍然被写入,因为最终会不断打印出这个错误:
[GCKSession] Failed to send a DTLS packet with 1198 bytes; sendmsg error: No buffer space available (55).
此外,当我转到xCode中的调试导航器时,我可以看到正在发送和接收数据。两种方式的数据大约为0.2 mbps。