保存AVPlayer的缓冲区数据

时间:2013-08-20 05:58:09

标签: iphone ios cocoa-touch avplayer

我在我的应用程序中使用AVPlayer从我的服务器播放音频。现在我想要它完全缓冲音频然后我可以将该数据保存在应用程序中以便稍后播放。所以任何指导或帮助我如何访问缓冲区数据并保存以供以后使用

5 个答案:

答案 0 :(得分:38)

您可以提供resourceLoader委托来接管AVPlayer对资源加载过程的控制权,然后在请求并提供数据时为其提供数据。资源加载器是AVURLAsset上的属性。我在blog上记录了一个完整的解决方案,但主要的想法是将URL的协议切换为自定义的,因此AVURLAsset的资源加载器需要您的应用程序帮助加载该URL。然后,当您获得AVAssetResourceLoaderDelegate回调时,开始下载文件并尝试在有数据时响应从这些委托回调中收到的待处理请求。这将允许逐步加载/回放内容,而无需在您的应用程序中运行完整的HTTP服务器或使用其他复杂的解决方案。

答案 1 :(得分:1)

易于操作...使用相同的网址为您的音频流使用NSURLConnection获取数据并使用NSFilehandler保存...只是自己完成,同时流式传输音频并同时保存到mp3 ...让我知道你是否需要代码样本...

答案 2 :(得分:1)

Calm的团队已经开放了我们的实施。它可以作为CocoaPod使用。它被称为PersistentStreamPlayer

它充当resourceLoader。与其他实现相比的最大好处是它要求二进制数据在任何时候都在内存中,因此它支持更大的文件。

功能包括:

  • 流式传输音频文件,并在第一个数据可用时立即开始播放
  • 一旦缓冲区完成,
  • 也会将流数据保存到文件URL 公开timeBuffered,有助于在UI中显示缓冲进度条
  • 处理缓冲流停止后重新启动音频文件(例如慢速网络)
  • 简单播放,暂停和销毁方法(destroy清除所有内存资源)
  • 不会将音频文件数据保留在内存中,因此它支持不适合RAM的大型文件

您可以在此处找到它:https://github.com/calmcom/PersistentStreamPlayer

答案 3 :(得分:0)

您无法访问AVPlayer的缓冲区。一些提示:您可以在服务器上放置音频文件的预览(音频的简短版本),以便您的用户可以在下载完整的音频文件之前收听预览,或者您可以搜索自定义的开源音频流播放器,也许那些将允许您访问流缓冲区。祝你好运!

答案 4 :(得分:-3)

我认为您的问题类似于从服务器下载音频或音乐文件,然后在您的应用中播放它们。无论如何,如果你想在你的应用程序中保存音频,下载它然后播放它不是更好吗?无论如何,请检查这些链接

How to download audio files from a server into my iPhone application?

Download music file from server and save in my app

希望他们有所帮助。