保存AVPlayer的缓冲区数据

问题描述 投票:10回答:5

我在我的应用程序中使用AVPlayer从我的服务器播放音频。现在我希望当它完全缓冲音频时,我可以将这些数据保存在应用程序中以便稍后播放。那么如何访问缓冲区数据并将其保存以供以后使用?

iphone ios cocoa-touch avplayer
5个回答
40
投票

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


1
投票

容易做...使用相同的网址为您的音频流使用NSURLConnection获取数据并使用NSFilehandler保存...只是自己完成,同时流式传输音频并同时保存到mp3 ...让我知道如果你需要代码示例......


1
投票

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

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

功能包括:

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.