昨日、友人とこの問題に取り組みました。使用したコードは、基本的に NSURLSession 組み込みキャッシュ システムを使用してビデオ データを保存します。ここにあります:
NSURLSession *session = [[KHURLSessionManager sharedInstance] session];
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:**YOUR_URL**];
[[session dataTaskWithRequest:req completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// generate a temporary file URL
NSString *filename = [[NSUUID UUID] UUIDString];
NSURL *temporaryDirectoryURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];
NSURL *fileURL = [[temporaryDirectoryURL URLByAppendingPathComponent:filename] URLByAppendingPathExtension:@"mp4"];
// save the NSData to that URL
NSError *fileError;
[data writeToURL:fileURL options:0 error:&fileError];
// give player the video with that file URL
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:fileURL];
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
_avMovieViewController.player = player;
[_avMovieViewController.player play];
}] resume];
次に、NSURLSession のキャッシュ構成を設定する必要があります。私の KHURLSessionManager は、次のコードでこれを処理します。
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
_session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
最後に、キャッシュがファイルに対して十分な大きさであることを確認する必要があります。AppDelegate に次のように記述します。
[NSURLCache sharedURLCache].diskCapacity = 1000 * 1024 * 1024; // 1000 MB
お役に立てれば。