Intentando transmitir audio desde el micrófono a otro teléfono a través de conectividad multipeer

Estoy tratando de transmitir audio desde el micrófono a otro iPhone a través del marco de conectividad Multipeer de Apple. Para hacer la captura y reproducción de audio estoy usando AVAudioEngine (muchas gracias aPuño rítmicos respuestaaquí)

Recibo datos del micrófono instalando un toque en la entrada, de esto obtengo un AVAudioPCMBuffer que luego convierto en una matriz de UInt8 que luego transmito al otro teléfono.

Pero cuando estoy convirtiendo la matriz de nuevo en un AVAudioPCMBuffer obtengo una excepción EXC_BAD_ACCESS con el compilador apuntando al método en el que estoy convirtiendo la matriz de bytes a AVAudioPCMBuffer nuevamente.

Aquí está el código de donde estoy tomando, convirtiendo y transmitiendo la entrada:

input.installTap(onBus: 0, bufferSize: 2048, format: input.inputFormat(forBus: 0), block: {
                (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in

                let audioBuffer = self.typetobinary(buffer)
                stream.write(audioBuffer, maxLength: audioBuffer.count)
            })

Mis dos funciones para convertir los datos (tomado deMartin.Rla respuestaaquí):

func binarytotype <T> (_ value: [UInt8], _: T.Type) -> T {
    return value.withUnsafeBufferPointer {
        UnsafeRawPointer($0.baseAddress!).load(as: T.self)
    }

}

func typetobinary<T>(_ value: T) -> [UInt8] {
    var data = [UInt8](repeating: 0, count: MemoryLayout<T>.size)
    data.withUnsafeMutableBufferPointer {
        UnsafeMutableRawPointer($0.baseAddress!).storeBytes(of: value, as: T.self)
    }
    return data
}

Y en el extremo receptor:

func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {
    if streamName == "voice" {

        stream.schedule(in: RunLoop.current, forMode: .defaultRunLoopMode)
        stream.open()

        var bytes = [UInt8](repeating: 0, count: 8)
        stream.read(&bytes, maxLength: bytes.count)

        let audioBuffer = self.binarytotype(bytes, AVAudioPCMBuffer.self) //Here is where the app crashes

        do {
            try engine.start()

            audioPlayer.scheduleBuffer(audioBuffer, completionHandler: nil)
            audioPlayer.play()
       }catch let error {
            print(error.localizedDescription)

        }
    }
}

Lo que pasa es que puedo convertir el conjunto de bytes de un lado a otro y reproducir el sonido antes de transmitirlo (en el mismo teléfono), pero no crear el AVAudioPCMBuffer en el extremo receptor. ¿Alguien sabe por qué la conversión no funciona en el extremo receptor? ¿Es este el camino correcto?

Cualquier ayuda, pensamiento / aportación sobre esto sería muy apreciada.