我正在通过网络接收编码音频流,但是混合了大量数据,所以我需要接收数据包,去除音频然后播放音频.
AVAudioPlayer,可能是也可能不是最好的工具,但它是我正在追逐的路径,想要来自NSData或NSURL的数据. NSData无法正常工作,因为它是一个数据流,我希望它一到达就开始继续播放.我的想法是:
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];
但是,我不知道如何将`readHandle`传递给URL.如何从现有的NSFileHandle创建NSURL?完全有一些更好的方法吗?有没有办法将数据写入可以成为NSURL的东西?
唯一真正的要求是我可以尽可能近乎实时地播放音频.我不希望在播放之前将数据排队甚至十分之一秒.
解决方法
无法检索NSFileHandle的URL,因为并非所有句柄都具有相应的URL.你的例子似乎是一个这样的例子.