使用Multipeer Connectivity(Swift 2)从发件人的目标iPhone中部分接收音频文件
Posted
技术标签:
【中文标题】使用Multipeer Connectivity(Swift 2)从发件人的目标iPhone中部分接收音频文件【英文标题】:Audio file is partially received in target iPhone from sender using Multipeer Connectivity(Swift 2) 【发布时间】:2016-03-01 11:50:05 【问题描述】:我已经从发送方 iPhone 打开了一个输出流,并在接收方 iPhone 中实现了一个输入(接收)流。我可以使用 Multipeer Connectivity 通过同一个 Wi-Fi 网络连接两个设备并发送数据(我将音频文件转换为 NSData 格式以通过 Outputstream 发送)。但是在接收时,我发送的只有部分 NSData收到。每次我重复运行代码时,都会收到不同数量的数据。 这是输出流代码:
let outputStream: NSOutputStream = try! session.startStreamWithName(name, toPeer: session.connectedPeers[0])
print("stream created")
outputStream.delegate = self
outputStream.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
outputStream.open()
print("Before filewritten")
outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)
print("filewritten")
outputStream.close()
我的输入流代码是:
var bytesRead = 0
var buffer = [UInt8](count: 15000000, repeatedValue: 0)
NSLog("%@", "didReceiveStream")
stream.delegate = self
stream.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
stream.open()
while (stream.hasBytesAvailable)
bytesRead = stream.read(&buffer, maxLength: buffer.count)
print("data fetched"+"\(bytesRead)")
stream.close()
我们将非常感谢任何有关导致部分接收数据的原因以及随后更改代码以制定解决方案的任何帮助。
【问题讨论】:
【参考方案1】:NSOutputStream 的文档表明返回码 write(_:maxLength:) 应该检查:
let result = outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)
返回值: 实际写入的字节数,如果发生错误,则为 -1。可以使用 streamError 获得有关错误的更多信息。如果接收方是定长流且已达到其容量,则返回 0。
我建议您检查此返回码,并按切片获取数据。
【讨论】:
以上是关于使用Multipeer Connectivity(Swift 2)从发件人的目标iPhone中部分接收音频文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用swift 4查看Multipeer Connectivity框架中的MCBrowserViewController
swift Multipeer Connectivity,使用邀请处理程序取消邀请
如何使用 Multipeer Connectivity 框架邀请用户加入我的会话?