iOS - 从 NSFileHandle 或 NSPipe 创建 NSURL

标签 ios avaudioplayer

我正在通过网络接收编码音频流,但是混入了一堆数据,所以我需要接收数据包,去除音频然后播放音频。

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。你的例子似乎就是这样一个例子。

关于iOS - 从 NSFileHandle 或 NSPipe 创建 NSURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8232747/

相关文章:

ios - UICollectionView scrollToItemAtIndexPath 单元格在半隐藏时消失

android - 在 movesense 应用程序中设置 BLE 连接参数

ios - 如何在 iOS swift 中将 .opus 文件转换为 .mp3/.m4a/.aac?

iphone - AVAudioPlayer在后台播放

ios - 如何使用 Swift 采样器播放一个音调,然后在播放下一个音调之前暂停?

ios - 代码 |为什么使用启动屏幕文件而不是启动图像源?

ios - Cordova-plugin-firebase : Cannot run on iOS 12. 2 但在 android 和 iOS 10.3.3 上运行没有任何问题

iphone - 如何从xml中获取属性值

iphone - 使用 AVAudioPlayer 的音频流

iphone - 使用 AVAudioRecorder 和 AVAudioPlayer 时 OpenAL 不起作用