从URL保存流

时间:2011-02-24 08:42:10

标签: iphone xcode filesystems stream save

在我的项目中,我正在连接一个网址,我正在观看带有MPMoviePlayerViewController的视频。但这对我来说还不够。我也想将文件保存到我的Iphone。我必须按钮。一个是观看视频,另一个是保存视频。当我按下按钮时,我正在观察它。但是无法保存它。通过这个我希望以后能够观看视频。所以在另一个视图中我想看到保存的视频等。有没有人可以帮助我或可以显示方式?我尝试过以下代码短语但是当代码启动时,它会工作一段时间(可能是下载时间),但是当需要保存时,我会收到错误的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;

3 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

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

    }
}

答案 2 :(得分: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];