Saving buffer data of AVPlayer

对着背影说爱祢 提交于 2019-12-17 17:48:11

问题


I am playing audio from my server using AVPlayer in my application. Now I want that when it completely buffer the audio then I can save that data in the application to play it later. So how can I access buffer data and save it for later use?


回答1:


You could supply a resourceLoader delegate to take over control of the resource loading process from AVPlayer and then supply it the data as and when it requests and becomes available. The resource loader is a property on AVURLAsset. I've documented a full solution on my blog but the main idea is to switch the protocol of your URL to something custom so AVURLAsset's resource loader requires your application's assistance in loading that URL. Then when you get the AVAssetResourceLoaderDelegate callbacks, start downloading the file and try to respond to the pending requests received from those delegate callbacks as and when you have data. This will allow progressive loading/playback of the content without having to run a full blown HTTP server in your app or resorting to other complicated solutions.




回答2:


Easy to do...using the same url for your audio stream use NSURLConnection to get the data and save using NSFilehandler...just done it myself whilst streaming audio and saving at the same time to mp3...let me know if you need code sample...




回答3:


The team at Calm has open-sourced our implementation to this. It's available as a CocoaPod. It's called PersistentStreamPlayer.

It acts as a resourceLoader. The big benefit over other implementations is that it does not require the binary data to be in memory at any point, so it supports larger files.

Features include:

  • streaming of audio file, starting playback as soon as first data is available
  • also saves streamed data to a file URL as soon as the buffer completes exposes timeBuffered, helpful for displaying buffer progress bars in the UI
  • handles re-starting the audio file after the buffer stream stalls (e.g. slow network)
  • simple play, pause and destroy methods (destroy clears all memory resources)
  • does not keep audio file data in memory, so that it supports large files that don't fit in RAM

You can find it here: https://github.com/calmcom/PersistentStreamPlayer




回答4:


You can't access the buffer of the AVPlayer. Some hints: You can put previews (short versions of audios) of your audio files on your server, so that Your users could listen the previews before they download the full audio files, or you may search for custom open source audio stream players, maybe those will allow you to access the stream buffer. Good Luck!



来源:https://stackoverflow.com/questions/18327920/saving-buffer-data-of-avplayer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!