Estoy recibiendo una secuencia de audio codificado a través de la red, pero hay una gran cantidad de datos mezclados así que necesito recibir los paquetes, quitar el audio y luego reproducir el audio. iOS - Crear un NSURL desde NSFileHandle o NSPipe
AVAudioPlayer, que puede o no ser la mejor herramienta para esto, pero es la ruta que estoy buscando actualmente, quiere datos de NSData o NSURL. NSData no funcionará porque es una secuencia de datos y quiero que comience tan pronto como llegue y continúe reproduciéndose. Mi pensamiento fue:
NSPipe *pipe = [[NSPipe alloc] init];
NSFileHandle *writeHandle = [pipe fileHandleForWriting];
NSFileHandle *readHandle = [pipe fileHandleForReading];
// in network reception thread...
NSData *audioData = [packet getAudioData];
[writeHandle writeData:audioData];
// in audio thread...
NSURL *url = [[NSURL alloc] init];
[url setResourceValue:NSURLFileResourceTypeNamedPipe
forKey:NSURLFileResourceTypeKey
error:&error];
// Connect the readHandle
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:&error];
Sin embargo, no sé cómo pasar el `readHandle` en la URL. ¿Cómo creo un NSURL desde un NSFileHandle existente? ¿Hay algún mejor enfoque para esto por completo? ¿Hay alguna manera de escribir datos en algo que pueda convertirse en un NSURL?
El único requisito real es que pueda reproducir el audio lo más casi posible en tiempo real. No quiero poner en cola los datos ni siquiera por una décima de segundo antes de que se reproduzca.
¿Qué tal crear una tubería con nombre y crear una URL de esa tubería con nombre? –
WTP - Gracias. Me gusta la idea e incluso busqué la forma de hacerlo, pero no vi nada sobre las tuberías con nombre en iOS. Sugerencias? – Schlameel
iOS es un sistema UNIX basado en Mac OS X, por lo que debería ser posible usar ['mkfifo'] (http://www.unix.com/man-page/FreeBSD/2/mkfifo/) para crear un nombre tubo. Entonces simplemente creas un 'NSURL' de eso. –