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 :(