I have a number of videos that I am displaying in a UITableView. The videos are stored remotely on a server. I am able to load the videos into the tableview using some of the following code.
NSString *urlString = [NSString stringWithFormat:[row objectForKey:@"video_uri"]];
NSURL* url = [NSURL URLWithString:urlString];
AVPlayerItem *pItem = [AVPlayerItem playerItemWithURL:url];
AVPlayer *player = [AVPlayer playerWithPlayerItem:pItem];
Each time the tableview dequeues the cell then requeues again the video is loaded again from the url. I'm wondering if there is a way to download and cache or save the video so that it can be played from the phone without having to connect again. I was trying to draw opoin the technique used in the LazyTableImages example provided by Apple, but I'me a little stuck.
There's one method to do this, but it may be taxing on older devices subsequently cause your app to be jettisoned by MediaServerD.
Upon creation, save each player into an NSMutableArray. Each index in the array should correspond to the indexPath.row of UITableView.
Just worked on this problem with a friend yesterday. The code we used basically uses the NSURLSession built-in caching system to save the video data. Here it is:
Second, you will need to set the caching configuration for the NSURLSession. My KHURLSessionManager takes care of this with the following code:
Lastly, you should make sure your cache is large enough for the files, I put the following in my AppDelegate.
Hope this helps.
After messing around with this unsuccessfully trying to cache AVPlayerItems, I've come to theh conclusion that it works much better if you cache the AVPlayerItem's underlying AVAsset which is meant to be reused, whereas the AVPlayerItem itself is not meant to be reused.