Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ios中缓存视频_Ios_Objective C_Video_Nsurlcache - Fatal编程技术网

在ios中缓存视频

在ios中缓存视频,ios,objective-c,video,nsurlcache,Ios,Objective C,Video,Nsurlcache,我有以下方法在AVMediaPlayerController上播放视频 -(void)sendRequestForVideo { NSString*VideoStr=@"http://www.ebookfrenzy.com/ios_book/movie/movie.mov"; NSURL *url = [NSURL URLWithString:VideoStr]; AVPlayer *player = [AVPlayer playerWithU

我有以下方法在AVMediaPlayerController上播放视频

-(void)sendRequestForVideo
{

        NSString*VideoStr=@"http://www.ebookfrenzy.com/ios_book/movie/movie.mov";
         NSURL  *url = [NSURL URLWithString:VideoStr];
       AVPlayer *player = [AVPlayer playerWithURL:url];

        AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
        controller.player = player;

        [self addChildViewController:controller];
        [self.view addSubview:controller.view];
        controller.view.frame = self.view.frame;
        [player play];


}

我想像缓存图像一样缓存这里播放的视频,但我无法缓存它,也不明白我应该如何实现这一点,因为有太多事情与AVfoundation frammework相关。请给出一些建议,说明如何将视频存储在nsurl缓存中。提前感谢

直接的方法是使用
NSUrlSession
下载视频,并使用内置缓存系统保存视频数据。您可以在本SO中查看详细信息。但这样你实际上下载了两次视频并重新使用它。所以,您可能最终会使用来自用户电话的更多数据

另一种使用AVAssetExportSession的方法是将播放的视频保存到文件系统中,并在需要时重新使用

目标C 敏捷的 在AVAssetExportSession的帮助下,我们实际上正在重新使用播放的视频,这样用户电话数据就不会被浪费,我们也很容易重复使用。查看以下文档链接以更好地理解


请查看这些链接,但他们使用了不同的ZOWVideoCache进行it缓存,而我想使用apple提供的NSURLCache。它也是NSURLCachy子类。我将再次看到它,它是NSObject的子类。
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL = exportUrl; // consider you have a export url 
[exporter exportAsynchronouslyWithCompletionHandler:^{
    // here your file will be saved into file system 
}];
let exporter = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality)
let filename = "filename.mp4"
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).last!
let outputURL = documentsDirectory.URLByAppendingPathComponent(filename)

exporter?.outputURL = outputURL
exporter?.outputFileType = AVFileTypeMPEG4
exporter?.exportAsynchronouslyWithCompletionHandler({

    print(exporter?.status.rawValue)
    print(exporter?.error)
})