【问题标题】:Save the The Stream From URL保存来自 URL 的流
【发布时间】:2011-02-24 08:42:10
【问题描述】:

在我的项目中,我正在连接一个 url,并且正在使用 MPMoviePlayerViewController 观看视频。但这对我来说还不够。我还想将文件保存到我的 Iphone。我必须按纽。一是观看视频,二是保存视频。当我按下按钮手表时,我正在观看它。但无法保存。通过这个,我希望以后能够观看视频。所以在另一个视图中,我想查看保存的视频等。有没有人可以帮助我或者可以指导一下?我尝试了以下代码短语,但是当代码启动时,它可以工作一段时间(可能是下载时间),但是当需要保存时,我收到 Bad EXC_BAD_ACCESS 错误。谢谢大家。
这是我的代码。

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;

【问题讨论】:

    标签: iphone xcode filesystems stream save


    【解决方案1】:
    -(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;
        }
    

    【讨论】:

    • 在此链接中,我将视频从 url 保存到我的 iphone 文档目录并在下载后播放该动作
    • 感谢您的重播。我尝试使用它。我的电影好像被下载了。但我怎样才能到达那个文件?我正在尝试将文件获取为; NSString *documentsDirectory = NSTemporaryDirectory(); if (!documentsDirectory) { NSLog(@"找不到文档目录!"); } NSString *appFile; appFile = [documentsDirectory stringByAppendingPathComponent:@"mymoview.mp4" ];
    • 我已经添加了一个新答案,我如何在我的视图中播放该视频。希望这会有所帮助
    【解决方案2】:
        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];
    

    【讨论】:

      【解决方案3】:

      这就是我的代码中的内容。看起来它正在下载电影。但我找不到文件。我也在模拟器中运行它。以我的电影名命名的 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");
      }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        • 1970-01-01
        • 2016-11-27
        • 2019-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多