2011-02-24 85 views
1

在我的項目中,我連接了一個url,並且正在用MPMoviePlayerViewController觀看視頻。但這對我來說還不夠。我也想將文件保存到我的iPhone上。我必須按鈕。一個是看視頻,另一個是保存視頻。當我按下按鈕時,我正在觀看它。但無法保存。由此我希望能夠稍後觀看視頻。所以在另一種觀點,我想看到保存的視頻等。有沒有人可以幫助我或可以展示的方式?我試過了下面的代碼短語,但是當代碼開始時,它會工作一段時間(可能是下載時間),但是當它是保存的時候,我會得到Bad EXC_BAD_ACCESS錯誤。謝謝每一個。
這是我的代碼。保存來自URL的流

CFStringRef *docsDirectory = (CFStringRef)[NSTemporaryDirectory() stringByAppendingPathComponent: @"recordedFile.mp4"]; 


NSString *temPath=NSTemporaryDirectory(); 
NSString *tempfile=[temPath stringByAppendingPathComponent:@"recode.mp4"]; 


NSLog(@" DOSYA ADI MADI %@",docsDirectory); 


NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error = [[NSError alloc] init]; 

[fileManager removeItemAtPath:docsDirectory error:&error]; 

NSURL *url = [NSURL URLWithString:@"http://video.teknomart.com.tr/3-13-2.mp4"]; 

NSMutableURLRequest *liveRequest = [[NSMutableURLRequest alloc] initWithURL:url]; 
[liveRequest setCachePolicy:NSURLRequestReloadIgnoringCacheData]; 

[liveRequest setValue:@"headervalue" forHTTPHeaderField:@"headerfield"]; 

NSURLResponse *response; 
NSData *myData = [NSURLConnection sendSynchronousRequest:liveRequest returningResponse:&response error:&error]; 
NSData *myData2 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://video.teknomart.com.tr/3-13-2.mp4"]]; 

NSString *myString=[[NSString alloc] initWithData:myData encoding:NSASCIIStringEncoding]; 

NSLog(@"gelen sey %@",myString); 

[myString writeToFile:tempfile writeToFile:tempfile automatically:YES encoding:NSASCIIStringEncoding error:nil]; 

[myString release]; 
return true; 

回答

2
-(void)viewDidLoad { 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     if (!documentsDirectory) { 
      NSLog(@"Documents directory not found!"); 
     } 
     NSArray *myWords = [songNameString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; 
     NSString *appFile = [documentsDirectory stringByAppendingPathComponent:[myWords lastObject]]; 
     NSLog(@"%@",[myWords lastObject]); 
     NSURL *url = [NSURL fileURLWithPath:appFile]; 
     NSLog(@"%@",url); 
     [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
     self.navigationController.navigationBarHidden=YES; 
     currentTimer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showCurrentTime) userInfo:nil repeats:YES]; 
     alarmTimeLabel.text =alarmTimeString; 
     alarmSongLabel.text = [myWords lastObject] ; 
     [self performSelector:@selector(loadVideoInBackground)]; 
     //[NSThread detachNewThreadSelector:@selector(loadVideoInBackground) toTarget:self withObject:nil]; 


    } 

    -(void)loadVideoInBackground 
    { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     if (!documentsDirectory) { 
      NSLog(@"Documents directory not found!"); 
     } 
     NSString *appFile; 
     NSArray *myWords = [songNameString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; 
     appFile = [documentsDirectory stringByAppendingPathComponent:[myWords lastObject]]; 
     NSFileManager *fileMgr=[NSFileManager defaultManager]; 
     if (![fileMgr fileExistsAtPath:appFile]) { 
      alarmCanPlay = FALSE; 
      NSURL *imageURL = [[[NSURL alloc] initWithString:songNameString]autorelease]; 
      NSURLRequest *imageRequest = [NSURLRequest requestWithURL:imageURL 
                  cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:120.0]; 
      imageConnection = [[NSURLConnection alloc] initWithRequest:imageRequest delegate:self]; 

      if(imageConnection) 
      { 
       videoData = [[NSMutableData data] retain]; 
      } 

     } 
    } 


    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
    { 

     // this method is called when the server has determined that it 
     // has enough information to create the NSURLResponse 
     // it can be called multiple times, for example in the case of a 
     // redirect, so each time we reset the data. 
     // receivedData is declared as a method instance elsewhere 
     [videoData setLength:0]; 

    } 
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
    { 
     // append the new data to the receivedData 
     // receivedData is declared as a method instance elsewhere 
     //NSLog(@"%d",[data size]); 
     [videoData appendData:data]; 
    } 

    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
    { 
     // release the data object 
     [videoData release]; 

     // inform the user 
     NSLog(@"Connection failed! Error - %@ %@", [error localizedDescription], [[error userInfo] objectForKey:NSErrorFailingURLStringKey]); 
     //workInProgress = NO; 
    } 

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection 
    { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     if (!documentsDirectory) { 
      NSLog(@"Documents directory not found!"); 
     } 
     NSString *appFile; 
     NSArray *myWords = [songNameString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; 
     appFile = [documentsDirectory stringByAppendingPathComponent:[myWords lastObject]]; 
     [videoData writeToFile:appFile atomically:YES]; 
     alarmCanPlay = TRUE; 
    } 
+0

在這個環節我很節省,視頻網址,我的iPhone文件目錄並播放其下載爲您重播 – GhostRider 2011-02-24 09:41:59

+0

感謝之後的舉動。我試圖使用它。它看起來像我的電影下載。但是我怎樣才能達到那個文件?我正在嘗試將文件作爲; \t NSString * documentsDirectory = NSTemporaryDirectory(); (@「documents directory not found!」);如果(!documentsDirectory){ \t \t如果(!documentsDirectory){ \t \t \t NSLog \t \t} \t \t NSString * appFile; \t \t appFile = [documentsDirectory stringByAppendingPathComponent:@「mymoview.mp4」]; – ozgur 2011-02-24 11:40:44

+0

我添加了一個新的答案,我如何在視圖上播放該視頻。希望這會有所幫助 – GhostRider 2011-02-25 06:16:09

0

這是我在我的代碼是什麼。它看起來像是在下載電影。但我無法找到該文件。我也在模擬器中運行它。以我的電影名字命名的nofile在tmp目錄中。什麼是錯誤或缺失?

-(void)viewDidLoad 
{ 

    [super viewDidLoad]; 
    NSString *documentsDirectory = NSTemporaryDirectory(); 
    if (!documentsDirectory) { 
     NSLog(@"Documents directory not found!"); 
    } 
    downloaded=FALSE; 

    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"mymoview.mp4"]; 

    NSURL *url = [NSURL fileURLWithPath:appFile]; 
    NSLog(@"%@",url); 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    self.navigationController.navigationBarHidden=NO; 

    timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showVideo) userInfo:nil repeats:YES]; 

    [self performSelector:@selector(loadVideoInBackground)]; 
    [NSThread detachNewThreadSelector:@selector(loadVideoInBackground) toTarget:self withObject:nil]; 
    } 

-(void)showVideo{ 

    NSString *homeDir = NSHomeDirectory(); 


    NSString *tempDir = NSTemporaryDirectory(); 

    // Format output 
    NSString *s = 
    [NSString stringWithFormat:@"homeDir:\n" 
    @"%@\n" 
    @"tempDir:\n" 
    @"%@\n", 
    homeDir, 
    tempDir]; 
    NSLog(@" %@ ",s); 



     if (downloaded) { 

       NSLog(@"burdayim"); 

     NSString *documentsDirectory = NSTemporaryDirectory(); 
     if (!documentsDirectory) { 
      NSLog(@"Documents directory not found!"); 
     } 

     NSString *appFile; 
     appFile = [documentsDirectory stringByAppendingPathComponent:@"mymoview.mp4" ]; 
     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"myvoview" ofType:@"mp4" inDirectory:@"/tmp"]; 
       NSLog(@" %@ lafta oynatilan dosya ",filePath); 



      NSFileManager *fileMgr=[NSFileManager defaultManager]; 
      if (![fileMgr fileExistsAtPath:filePath]) { 
       NSLog(@"dosya yok"); 
      } 
      else   
      { 

       NSLog(@"dosyayi da buldum"); 


     NSURL *movieURL = [NSURL fileURLWithPath:appFile]; 

      NSLog(@" %@ lafta oynatilan dosya ",appFile); 
     MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 



     [player setFullscreen:YES]; 
     [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]; 
    player.fullscreen=YES; 
     //self.view.autoresizesSubviews=YES; 
     //[self presentModalViewController:player animated:YES]; 



    self.view=player.view; 

     [player play]; 
      } 

    } 
    } 

-(void)loadVideoInBackground{ 

NSString *documentsDirectory = NSTemporaryDirectory(); 

if (!documentsDirectory) { 
NSLog(@"Documents directory not found!"); 
} 

NSString *appFile; 
    appFile = [documentsDirectory stringByAppendingPathComponent:@"mymoview.mp4" ]; 
    NSFileManager *fileMgr=[NSFileManager defaultManager]; 
    if (![fileMgr fileExistsAtPath:appFile]) { 

     NSURL *videoURL = [[[NSURL alloc] initWithString:@"http://video.teknomart.com.tr/3-13-2.mp4"] autorelease]; 
     NSURLRequest *videoRequest = [NSURLRequest requestWithURL:videoURL 
                 cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:120.0]; 
     videoconnection = [[NSURLConnection alloc] initWithRequest:videoRequest delegate:self]; 

     if(videoconnection) 
     { 
      videoData = [[NSMutableData data] retain]; 
     } 

    } 
} 


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 


    //[videoData setLength:0]; 

} 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    // append the new data to the receivedData 
    // receivedData is declared as a method instance elsewhere 
    NSLog(@" bisiler yukleniyor "); 
    [videoData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
[videoData release]; 

NSLog(@"Connection failed! Error - %@ %@", [error localizedDescription], [[error userInfo] objectForKey:NSErrorFailingURLStringKey]); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    if (!documentsDirectory) { 
     NSLog(@"Documents directory not found!"); 
    }else 
{ 
    NSString *appFile; 
    appFile = [documentsDirectory stringByAppendingPathComponent:@"mymoview.mp4"]; 
    [videoData writeToFile:appFile atomically:YES]; 
    downloaded = TRUE; 
    NSLog(@"Yuklandi"); 
} 

    } 
} 
0
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    if (!documentsDirectory) { 
     NSLog(@"Documents directory not found!"); 
    } 
    NSArray *myWords = [songNameString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:[myWords lastObject]]; 
    NSLog(@"%@",[myWords lastObject]); 
    NSURL *url = [NSURL fileURLWithPath:appFile]; 
    NSLog(@"%@",appFile); 
self.videoMPPlayer =[[MPMoviePlayerController alloc] init]; 
      videoMPPlayer.view.frame = CGRectMake(0, 0, 768, 1024); 
      videoMPPlayer.scalingMode = MPMovieScalingModeAspectFill; 

      videoMPPlayer.controlStyle = MPMovieControlStyleNone; 
      videoMPPlayer.shouldAutoplay = NO; 
      [videoMPPlayer pause];