使用MPMoviePlayer播放视频

问题描述:

现在我在这里提出与MPMoviePlayer有关的新问题。我有一个桌面视图,在ipad的一侧列出视频,在另一侧 - 我播放列表中选择的视频。这些发生在同一视图中。现在切换到不同的视频效果很好。现在,当我使用UIVideoEditorController编辑视频时,我将替换文档文件夹中的当前视频文件,然后再次播放视频。但后来我的球员停止工作...使用MPMoviePlayer播放视频

我认为问题是UIVideoEditorController内的球员没有正确发布。我发布了编辑器,但还是我只是有..没有什么作品AGAIN :(

请帮我尽快

-(void)playVideoWithIndex:(NSNumber *)index1 
{ 
int index = [index1 intValue]; 
indexVideo = [index1 intValue]; 
if(index > [SourceArray count]){ 
    NSLog(@"dg"); 
    return; 
} 

if (mp) { 
    [mp stop]; 
    [mp.view removeFromSuperview]; 
    [mp release]; 
    mp=nil; 
} 
// NSArray *sourcePaths=[[NSArray alloc] initWithArray:[[NSBundle mainBundle] pathsForResourcesOfType:@"mov" inDirectory:nil]]; 
videoDtls *v =[SourceArray objectAtIndex:index]; 
lbl_date.text=v.iVideoDate; 
lbl_Title.text=v.iVideoTitle; 
lbl_description.text=v.iVideoDesc; 
lblDesc.text = @"Description"; 

lable_title.text = v.iVideoTitle; 
NSString *documentFolderPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
NSString *mainImageFolderPath=[documentFolderPath stringByAppendingPathComponent:@"Videos"]; 
NSString *urlStr = [mainImageFolderPath stringByAppendingPathComponent:v.iVideoPath]; 
self.vpath = urlStr; 
NSLog(@"asdsd %@",urlStr); 
NSURL *url = [NSURL fileURLWithPath:urlStr]; 


mp = [[MPMoviePlayerController alloc] initWithContentURL:url]; 

if ([mp respondsToSelector:@selector(loadState)]) 
{ 
    // Set movie player layout 
    //[mp setControlStyle:MPMovieControlStyleFullscreen]; 

    //[mp setFullscreen:YES]; 
    // May help to reduce latency 
    [mp prepareToPlay]; 
    mp.useApplicationAudioSession = NO; 
// mp.controlStyle = MPMovieControlStyleDefault; 
// mp.useApplicationAudioSession = YES; 
    // Register that the load state changed (movie is ready) 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayerLoadStateChanged:) 
               name:MPMoviePlayerLoadStateDidChangeNotification 
               object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayerEnterFullScreen:) 
               name:MPMoviePlayerDidEnterFullscreenNotification 
               object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayerExitFullScreen:) 
               name:MPMoviePlayerWillExitFullscreenNotification 
               object:nil]; 
    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(moviePlayerDidFinish:) 
    name:MPMoviePlayerPlaybackDidFinishNotification 
    object:nil]; 

    [[mp view] setFrame:CGRectMake(0, 0, 480, 320)]; 

    // Add movie player as subview 
    [playerView addSubview:[mp view]]; 
    mp.initialPlaybackTime = -1.0; 




} 
else 
{ 
    // Register to receive a notification when the movie is in memory and ready to play. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePreloadDidFinish:) 
               name:MPMoviePlayerContentPreloadDidFinishNotification 
               object:nil]; 
} 

// Register to receive a notification when the movie has finished playing. 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayBackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:nil]; 

}

当一个视频从表视图进行播放时调用此方法。 。

- (void)videoEditorController:(UIVideoEditorController *)editor didSaveEditedVideoToPath:(NSString *)editedVideoPath 
{ 
CFShow(editedVideoPath); 
NSFileManager *fileManager = [[NSFileManager alloc] init]; 
NSError *error = nil; 
NSString *path = self.vpath; 
NSLog(@"PATH %@", self.vpath); 
if([fileManager removeItemAtPath:path error:&error] != YES){ 
    NSLog(@"ERROR 1 : %@",[error localizedDescription]); 
} 
else{ 
// can do save here. the data has *not* yet been saved to the photo album 
if ([fileManager copyItemAtPath:editedVideoPath toPath:path error:&error] != YES) 
    NSLog(@"Can't move file with error: %@", [error localizedDescription]); 
} 
[popOver dismissPopoverAnimated:YES]; 
[self dismissMoviePlayerViewControllerAnimated]; 
[editor release]; 
[self performSelector:@selector(playVideoWithIndex:) withObject:[NSNumber numberWithInt:indexVideo] afterDelay:0.2]; 

}

当编辑器返回SUC这种方法被称为cessfully。 此后我的视频不播放

最后我解决了问题,在另一个视图控制器中使用UIVideoEditorController,然后延迟播放视频的秒级。可能发生这种情况是因为我试图播放正在被替换的视频。