保存AVPlayer的缓冲区数据

我在我的应用程序中使用AVPlayer从我的服务器播放audio。 现在我希望当它完全缓冲audio,然后我可以保存在应用程序中的数据以后播放。 所以任何指导或帮助,我如何访问缓冲区数据并保存以备后用

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

如何将audio文件从服务器下载到我的iPhone应用程序?

从服务器下载音乐文件并保存在我的应用程序

希望他们帮助。

您可以提供一个resourceLoader委托来接pipe来自AVPlayer的资源加载过程的控制,然后在请求并提供数据时提供数据。 资源加载器是AVURLAsset上的一个属性。 我在我的博客上logging了一个完整的解决scheme,但主要想法是将URL的协议切换为自定义,所以AVURLAsset的资源加载器需要您的应用程序帮助加载该URL。 然后,当您获得AVAssetResourceLoaderDelegatecallback时,开始下载文件并尝试响应从这些AVAssetResourceLoaderDelegatecallback收到的挂起的请求,并在您有数据时。 这将允许渐进式加载/播放内容,而无需在应用程序中运行完整的HTTP服务器或使用其他复杂的解决scheme。

容易做…使用相同的url为您的audiostream使用NSURLConnection获取数据和保存使用NSFilehandler …只是自己做,同时streamaudio和保存在同一时间MP3 …让我知道如果你需要代码示例…

Calm的团队已经开放了我们的实施。 它可以作为一个cocoa豆。 它被称为PersistentStreamPlayer

它充当一个资源加载器。 与其他实现相比,最大的好处是它不需要二进制数据在任何时候都在内存中,所以它支持更大的文件。

function包括:

  • audio文件的stream式传输,只要第一个数据可用,就开始播放
  • 一旦缓冲区完成时,也将stream数据保存到文件URL公开timeBuffered,有助于在UI中显示缓冲区进度条
  • 在缓冲器stream停止之后处理重新启动audio文件(例如,慢速networking)
  • 简单的播放,暂停和销毁方法(销毁清除所有内存资源)
  • 不将audio文件数据保存在内存中,以便支持不适合RAM的大文件

你可以在这里find它: https : //github.com/calmcom/PersistentStreamPlayer

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