AVAsset *asset = [AVAsset assetWithUrl:@"myUrl.mp4"];
AVPlayerItem * item = [AVPlayerItem itemWithAsset:asset];
AVPlayer * player = [AVPlayer playerWithItem:item];
playerViewController.player = player;
[player play];
我如何才能完全知道该资产或项目或任何下载的视频。我需要它用于将来缓存它;
现在我使用
NSData * videoData = [NSData dataWithUrl:myurl.mp4"];
NSCache *cache = [NSCache new];
[cache setObject:videoData forKey:myUrl];
当我从nscache检索数据时,我会将其写入文件并播放
NSData *videoData = [cache objectForKey:myUrl];
[videoData writeToFile:MyPath.mp4 atomically:YES];
然后
NSURL *url = [NSURL fileUrlWithPath:mypath];
AVAsset *asset = =[AVAsset assetWithURL:url];
..等和播放
但它有点慢。如果videoData包含在AVAsset中,我可以存储它或AVPlayerItem。但是我需要知道它何时下载。
如何以不同的方式实现缓存或升级此缓存。帮助。
我们可以使用该委托方法了解下载完成事件和进度事件,您可以使用 NSURLSession 实现下载功能,如下所示
https://www.raywenderlich.com/110458/nsurlsession-tutorial-getting-started
我有一个具有视频项目垂直集合视图的应用程序,每个项目都应该连续重复,直到向上或向下滑动。
所以我不需要每次都流式传输文件,也不需要下载之前下载的文件。
我想出了稍微不同的方法:
- Stream AVURLAsset,
- 到达末尾时,我使用 AVAssetExportSession 将文件保存到磁盘,
- 然后我使用保存的文件创建新的AVPLayerItem与新的AVAsset,
- AVPlayer's replaceCurrentItem(with: <#T##AVPlayerItem?#>)
但我想这是蹩脚的。我必须蒸两次文件。第一次运行时,然后保存文件时。我只想将 AVAsset 缓存到当前应用程序会话的内存中,因此我不需要保留文件。