2017-09-29 19 views
0

사용자 사진 라이브러리에서 비디오를 가져 오는 중이고 사용자가 자신의 사진 라이브러리에서이 비디오를 삭제하더라도 비디오를 재생할 수 있도록 사용자 문서 폴더에 비디오를 저장합니다. 이 파일의 URL은 핵심 데이터에 저장됩니다. 다음에 앱을 실행할 때까지 모든 것이 잘 작동합니다. 어떻게 든 URL이 더 이상 유효하지 않은 것 같습니다. [AVPlayer playerWithURL : videoURL]이 실패 할 때 비디오 파일을 삭제할 수 있기 때문에 이상합니다.앱 재시작 후 AVPlayer playerWithURL이 작동하지 않습니다.

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

많은 감사에서 :

+ (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;} 

이 내가 비디오를 재생하는 방법입니다 : 이것은 비디오를 저장하는 방법입니다

- (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{ 
NSURL* videoURL = info[UIImagePickerControllerMediaURL];} 

: 여기 내가 동영상 URL을 선택하는 방법이다 전진!

답변

0

이 파일에 대한 URL은 문제의 핵심 데이터

에 저장됩니다. 문서 디렉토리 URL은 샌드 박스를 사용하기 때문에 앱을 실행할 때마다 변경되므로 두 번째 유효하지 않습니다. 절대 iOS에 절대 파일 URL을 저장하지 마십시오!

+0

감사합니다, 매트! 각 세션에서 문서 폴더를 가리키는 기본 URL을 찾는 가장 정확한 방법은 무엇입니까? – Mig70

+0

정확하게 그랬던 것처럼. 문서 디렉토리로 가야 할 때마다'documentsDirectory'를 다시 계산하면됩니다. :) 앱 실행 중에는 계속 유지되지만 그게 전부입니다. – matt

0

응용 프로그램을 닫으면 응용 프로그램을 닫을 때 documentDirectory가 제거되므로 다시 가져와야하고 비디오 파일을 가져 오려면 FILE NAME 그 비디오를 기본 설정 또는 coreData로 변환 한 다음이 비디오 이름 파일을 추가하여 documentDirectory 경로를 가져 오면 비디오를 얻을 수 있습니다.

은 그냥 모양을 가지고있다 - (코드는 빠른에 당신이 그것을 변환 할 수있는 객관적인 쉽게 C)

하자 fileName에 = "recording.mp4"

tempPath = NSSearchPathForDirectoriesInDomains (FileManager.SearchPathDirectory.documentDirectory하자,), 진정한 FileManager.SearchPathDomainMask.userDomainMask

하자 tempDocumentsDirectory : AnyObject tempPath = [0]와 같은 AnyObject

하게 tempDataPath = tempDocumentsDirectory.appendingPathCompo nent 문자열로 (파일 이름)와 같은 문자열 그냥 그래 당신이 우선하여 저장 또는 경우 핵심 데이터 파일 이름을 가지고 어떻게 확인 선호도 또는 coreData

때 당신이 가까이 저장하고 응용 프로그램을 엽니 다 NAME 파일

문서를 첨부하여 가져 가십시오. 디렉토리 및 귀하의 비디오를 얻을 것입니다