我正在通过网络接收编码的音频流,但是有一堆数据混合在一起,所以我需要接收数据包,剥离音频,然后播放音频。
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的东西?
唯一真正的要求是我可以播放尽可能接近实时的音频。我不想让数据在播放前排队十分之一秒。
发布于 2013-04-09 16:42:05
检索NSFileHandle的网址是不可能的,因为并不是所有的句柄都有相应的网址。你的例子就是这样一个例子。
https://stackoverflow.com/questions/8232747
复制相似问题