AVPlayer playerWithURL在应用程序重新启动后无法工作
我从用户照片库中选取视频,然后将视频保存在用户Documents文件夹中,以便即使用户从他的照片库中删除此视频也能播放视频。该文件的URL存储在核心数据中。 一切正常,直到下次运行应用程序。不知何故,它似乎不再有效,这是奇怪的,因为我可以在[AVPlayer playerWithURL:videoURL]失败时删除视频文件。 这里是我挑的视频网址:AVPlayer playerWithURL在应用程序重新启动后无法工作
- (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
NSURL* videoURL = info[UIImagePickerControllerMediaURL];}
这是我如何保存视频:
+ (NSURL*) saveVideoInDocumentsFolder:(NSURL*)videoURL name:(NSString*)name {
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* pathComponent = [NSString stringWithFormat:@"/%@.%@", name, [videoURL pathExtension]];
NSString* path = [documentsDirectory stringByAppendingPathComponent:pathComponent];
NSError* error = nil;
NSData* videoData = [NSData dataWithContentsOfURL:videoURL options:0 error:&error];
if (error)
return nil;
BOOL success = [videoData writeToFile:path options:NSDataWritingAtomic error:&error];
if (success)
return [NSURL fileURLWithPath:path];
return nil;}
这是我如何播放视频:
AVPlayer* player = [AVPlayer playerWithURL:videoURL]; // <- AFTER I RESTART THE APP THIS METHOD ALWAYS RETURNS nil!!
AVPlayerViewController* viewController = [[AVPlayerViewController alloc] init];
[self presentViewController:viewController animated:YES completion:nil];
viewController.player = player;
[player play];
很多感谢提前!
的URL此文件存储在核心数据
这就是问题所在。文档目录URL在您每次运行应用程序时都会更改(因为您已被沙箱化),因此第二次无效。绝对不要永远不要在iOS中保存绝对文件的URL!
当您关闭并打开应用程序时,您需要采用超时路径目录,因为当应用程序关闭它时,它会删除documentDirectory,因此您必须再次使用它,并且如果要获取视频文件,请保存FILE NAME的视频转换为首选项或coreData,然后通过附加此视频名称文件获取documentDirectory路径,您将获得视频。
随便看看: - (代码是迅速,你可以把它转换目标C容易)
让文件名= “recording.mp4”
让TEMPPATH = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask,真)
设tempDocumentsDirectory:AnyObject = TEMPPATH [0]作为AnyObject
让tempDataPath = tempDocumentsDirectory.appendingPathCompo新界东北堆填区(文件名)的字符串作为字符串
该文件名,你会优先或coreData
,当你关闭保存并打开该应用只需要检查你是否有文件名保存在偏好或者如果核心数据是然后通过追加文件目录,您将获得您的视频
谢谢,马特!在每个会话中找到指向文档文件夹的基本URL的最正确方法是什么? – Mig70
正如你所做的那样。您只需在每次需要访问文档目录时重新计算'documentsDirectory'。 :)它会在应用程序运行过程中持续存在,但仅此而已。 – matt