簡體   English   中英

使用Multipeer Connectivity(Swift 2)在目標iPhone中從發送者部分接收了音頻文件

[英]Audio file is partially received in target iPhone from sender using Multipeer Connectivity(Swift 2)

我已經打開了發送方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()

我們將非常感謝您提供有關部分接收數據以及隨后更改代碼以制定解決方案的原因的任何幫助。

NSOutputStream的文檔指示應使用以下方法檢查write(_:maxLength :)的返回碼:

let result = outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)

返回值 :實際寫入的字節數;如果發生錯誤,則返回 -1。 可以通過streamError獲得有關該錯誤的更多信息。 如果接收器是固定長度的流並且已達到其容量,則返回0。

我建議您檢查此返回碼,並按片獲取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM