ios - 在 ios 中缓存视频

标签 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 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 中的详细信息 answer .但通过这种方式,您实际上是在下载视频两次并重新使用它。因此,您最终可能会使用更多来自用户手机的数据。

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

objective-c

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 
}];

swift

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)
})

AVAssetExportSession 的帮助下,我们实际上是在重复使用播放的视频,这样用户手机数据就不会被浪费,而且我们也很容易重复使用。查看以下文档链接以更好地理解

关于ios - 在 ios 中缓存视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44022396/

相关文章:

ios - 取消firebase功能

objective-c - 更改已添加到 map View 的 MKOverlay 的颜色

windows - 为什么缩放效果只适用于第一张图片?

ruby-on-rails - 使用回形针ffmpeg播放视频

ios - 我们可以在Apple Watch上使用网络服务吗?

ios - 我调用 URLSession.share.datatask 并且在它完成之前用户弹出 uiviewcontroller

objective-c - 如何在 Objective-C 中的同一位置重命名或更改文件名大小写

ios - 如何调整 Collection View 单元格的大小(可能是 PInterest 应用程序)

c# - 使用 Xamarin 在 Android 中播放视频

ios - swift 中的 barTintColor