我在我的应用程序中使用AVPlayer从我的服务器播放音频。现在我希望当它完全缓冲音频时,我可以将这些数据保存在应用程序中以便稍后播放。那么如何访问缓冲区数据并将其保存以供以后使用?
您可以提供resourceLoader
委托来接管AVPlayer
对资源加载过程的控制,然后在请求并提供时提供数据。资源加载器是AVURLAsset
上的属性。我已经在blog上记录了一个完整的解决方案,但主要的想法是将URL的协议切换为自定义,因此AVURLAsset的资源加载器需要您的应用程序帮助加载该URL。然后,当您获得AVAssetResourceLoaderDelegate
回调时,开始下载文件并尝试响应从这些委托回调中收到的待处理请求,以及何时有数据。这将允许逐步加载/回放内容,而无需在您的应用程序中运行完整的HTTP服务器或诉诸其他复杂的解决方案。
容易做...使用相同的网址为您的音频流使用NSURLConnection获取数据并使用NSFilehandler保存...只是自己完成,同时流式传输音频并同时保存到mp3 ...让我知道如果你需要代码示例......
Calm的团队已经开放了我们的实施。它可以作为CocoaPod使用。它被称为PersistentStreamPlayer
。
它充当resourceLoader。与其他实现相比的最大好处是它不需要二进制数据在任何时候都在内存中,因此它支持更大的文件。
功能包括:
您无法访问AVPlayer
的缓冲区。一些提示:您可以在服务器上放置音频文件的预览(音频的简短版本),以便您的用户可以在下载完整的音频文件之前收听预览,或者您可以搜索自定义的开源音频流播放器,也许那些将允许您访问流缓冲区。祝好运!