2017-11-09 10 views
0

문서 디렉토리에 비디오를 저장하고 다시 재생하려고합니다. 오프라인에서 비디오를 저장하고 오프라인에서 재생할 때 youtube 또는 hotstar와 같은 응용 프로그램을 수행하고 있습니다.MPMoviePlayerViewController를 사용하여 문서 디렉토리의 비디오

1 단계 : api에서 비디오 URL을 가져 오는 중입니다.이 코드를 사용하여 데이터를 문서 디렉토리로 저장합니다. 사용자가 오프라인에있을 때

-(void)downloadVideoAndSave :(NSString*)videoUrl videoname:(NSString *)name 
{ 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    NSLog(@"Downloading Started"); 
    NSString *urlToDownload =videoUrl; 
    NSURL *url = [NSURL URLWithString:urlToDownload]; 
    NSData *urlData = [NSData dataWithContentsOfURL:url]; 
    if (urlData) 
    { 
     NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSString *filePath = [NSString stringWithFormat:@"%@/%@%@", documentsDirectory,name,@".mp4"]; 

     //saving is done on main thread 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [urlData writeToFile:filePath atomically:YES]; 
      NSLog(@"File Saved !"); 
     }); 
    } 

}); 
} 

2.now은 내가 workingout.I가 그렇게하기 위해 아래의 코드를 사용하고 있지 문서 디렉토리에서 비디오와 내가 그들을 사용 창백한하려고 MPMoviePlayerViewController.but가 있음을 얻고있다

NSURL *fileUrl = [NSURL URLWithString:self.comingString]; 

self.moviePlayerViewController = [[MPMoviePlayerViewController alloc]initWithContentURL:fileUrl]; 

self.moviePlayerViewController.moviePlayer.fullscreen = NO; 
[self.moviePlayerViewController.moviePlayer play]; 
self.moviePlayerViewController.moviePlayer.repeatMode = NO; 
self.moviePlayerViewController.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming; 

[self.view addSubview:self.moviePlayerViewController.view]; 
[self presentViewController:self.moviePlayerViewController animated:NO completion:nil]; 
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(playFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

날이 문제를 해결하는 데 도움이 제발 내가 만드는 중이라서 어디 mistake.Please가 그 경우에 표시를 해달라고하여 nextvc mpmoviewolayer 3.In

-(void)playVideo:(UIButton*)sender { 

NSURL *vedioURL; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSArray *filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory error:nil]; 
NSLog(@"files array %@", filePathsArray); 

NSString *fullpath; 
Store *info=[savedData objectAtIndex:sender.tag]; 

NSString *videonamestr= info.videoname; 
NSString *videofillname=[NSString stringWithFormat:@"/%@.mp4",videonamestr]; 
NSString *filePath = [NSString stringWithFormat:@"%@/%@%@", documentsDirectory,videonamestr,@".mp4"]; 
//fullpath = [documentsDirectory stringByAppendingPathComponent:videofillname]; 
// vedioURL =[NSURL fileURLWithPath:fullpath]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 

if ([fileManager fileExistsAtPath: fullpath]) //4 
{ 
    NSLog(@"videoexists"); 
    //NSString *bundle = [[NSBundle mainBundle] pathForResource:filename ofType:@"plist"]; //5 

    //[fileManager copyItemAtPath:bundle toPath:path error:&error]; //6 
} 
// for (NSString *apath in filePathsArray) 
// { 
//  fullpath = [documentsDirectory stringByAppendingPathComponent:apath]; 
//  vedioURL =[NSURL fileURLWithPath:fullpath]; 
// } 
NSLog(@"vurl %@",filePath); 

// for (Store *items in savedData) { 
//  [self downloadVideoAndSave:items.videopath]; 

//  NSLog(@"\n mobile data %@\n",items.videopath); 
//   
    UIStoryboard *story=[UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    PlayerViewController *playerVC=[story instantiateViewControllerWithIdentifier:@"playerViewController"]; 
    playerVC.comingString = filePath; 
    [self presentViewController:playerVC animated:NO completion:nil]; 

// } 


} 

하십시오 ANSW 빠른 응답을 주셔서 감사합니다. ``이 될 경우 ([파일 관리자 fileExistsAtPath :

NSURL *fileUrl = [NSURL URLWithString:self.comingString]; 

[NSURL fileURLWithPath:self.comingString]; 
+0

해서는 안이 줄'경우 ([fullpath에 파일 관리자 fileExistsAtPath])해야 당신 playerVC이 라인에서 – Flexicoder

답변

0

... : filepath])`? `mp4`가 실제로 존재하는지 알고 있습니까?
+0

flexcioder에 비디오를 저장하는 다른 방법은 없습니다. perencentage로 다운로드 및 비디오 진행을 일시 중지 할 수 있습니다. –

+0

@SatheeshkumarNaidu 님이이 답변을 질문하셨습니까? 그렇다면 다른 사람들이 검색 할 수 있도록 답변으로 표시하십시오. 댓글이 다른 질문처럼 들리지만 별도로 제기해야합니다. – Flexicoder