Rectangle 27 1

iphone Saving buffer data of AVPlayer?


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!

Note
Rectangle 27 1

iphone Saving buffer data of AVPlayer?


Can we please see a code sample of this? Maybe a gist on Github?

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...

yes,sure you can share the code for others, i had done that same thing that you just explain in the Answer and its working good.

Note
Rectangle 27 1

iphone Saving buffer data of AVPlayer?


I think your issue would be similar to downloading audio or music files from the server and then playing them in your app. Anyways if you want to save the audio in your app , wouldn't it be better to download it and then play it ? Anyways please check these links

actually i want to play audio before it completely downloads, i want it to play as it download some part of audio file

Note
Rectangle 27 1

iphone Saving buffer data of AVPlayer?


Do you know which changes I have to make to get this working for video files? For some reason the player status changes to failure. I basically just inserted a video file instead of mp3 and added an avplayerlayer. The download starts and everything looks fine, but then the player's status changes from 0 (unknown) to 2 (failure)

Great answer! I was about to go down the route of setting up a local http server that would somewhat act as a proxy, but this solution seems way more elegant. Will definitely give it a try.

Nice! Have you run into the problem described here? We've got the same issue: stackoverflow.com/questions/29683567/

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.

Note
Rectangle 27 1

iphone Saving buffer data of AVPlayer?


Do you know which changes I have to make to get this working for video files? For some reason the player status changes to failure. I basically just inserted a video file instead of mp3 and added an avplayerlayer. The download starts and everything looks fine, but then the player's status changes from 0 (unknown) to 2 (failure)

Great answer! I was about to go down the route of setting up a local http server that would somewhat act as a proxy, but this solution seems way more elegant. Will definitely give it a try.

Nice! Have you run into the problem described here? We've got the same issue: stackoverflow.com/questions/29683567/

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.

the code works great for audio, but not for video :(

Note
Rectangle 27 1

iphone Saving buffer data of AVPlayer?


Can we please see a code sample of this? Maybe a gist on Github?

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...

aren't you downloading the data twice by doing that? I wouldn't recommend

yes,sure you can share the code for others, i had done that same thing that you just explain in the Answer and its working good.

Note
Rectangle 27 1

iphone Saving buffer data of AVPlayer?


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!

Note
Rectangle 27 1

iphone Saving buffer data of AVPlayer?


PersistentStreamPlayer
  • 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
  • does not keep audio file data in memory, so that it supports large files that don't fit in RAM
  • 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)
  • streaming of audio file, starting playback as soon as first data is available

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.

it mentions "Stream audio over http, and persist the data to a local file while buffering" does it work for video aswell ?

Note