MPMoviePlayerController显示黑色空屏幕

我使用MPMoviePlayerController在我的应用程序文档文件夹中播放本地文件,这些文件夹是我为服务器URL下载的:

 itemMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; [self.view addSubview:itemMoviePlayerController.view]; itemMoviePlayerController.fullscreen = YES; itemMoviePlayerController.movieSourceType = MPMovieSourceTypeFile; itemMoviePlayerController.initialPlaybackTime = -1.0; [itemMoviePlayerController play]; 

当我下载它时刚刚播放.mov文件,它显示一个黑色的空屏幕和应用程序UI是不可用的。 但是如果下次播放同样的本地文件,播放效果不错。 我甚至validation了MPMoviePlayerController playStatelocalState ,他们似乎很好。 什么可能是黑色空屏幕的理由?

你需要保留你的MPMoviePlayerController的实例,即作为一个属性或实例variables。 如果不保留,则对电影播放器​​的引用将丢失。

你可以尝试把[itemMoviePlayerController prepareToPlay];[itemMoviePlayerController play];

苹果公司首选显示一个唯一的全屏video的方式是呈现一个模式MPMoviePlayerViewController (如Hollance所说)。 为了呈现它,你应该使用像这样的东西:

  moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL]; [self presentMoviePlayerViewControllerAnimated:moviePlayerViewController]; [itemMoviePlayerController play]; 

这是苹果在这里logging

你可以在那里读到你应该保留对你的MPMoviePlayerViewController的引用,以便稍后解散它

[self dismissMoviePlayerViewControllerAnimated:moviePlayerViewController]

我通过把这个解决了

 @property (strong, nonatomic) MPMoviePlayerController *moviePlayer; 

在我的.h文件,并在我所有的代码中调用self.moviePlayer ,它的工作!

您需要改用MPMoviePlayerViewController。 在那里注意单词“查看”。

我希望这将有所帮助。 我在我的项目中解决了这个问题

  -(void)startPlayingMovie { NSLog(@"startPlayingMovie"); NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Start_video" ofType:@"mov"]]; moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer.moviePlayer]; moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone; moviePlayer.moviePlayer.shouldAutoplay = YES; [self presentMoviePlayerViewControllerAnimated:moviePlayer]; [moviePlayer.moviePlayer setFullscreen:YES animated:NO]; NSLog(@"endPlayingMovie"); } 

同样的事情发生在我身上。 事实certificate,我试图播放电影,而UIImagePicker还没有被解雇。

在我的UIImagePickerDelegate我必须先closuresUIImagePicker Popup,然后打开pipe理MPMediaPlayerControllerViewController

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)infoDict { //the first thing to do: dismiss the media picker if ([ipPop isPopoverVisible]) { [ipPop dismissPopoverAnimated:ANIMATION_SETTING]; } myMediaPlayerViewController * playerVC = [[myMediaPlayerViewController alloc] initWithMediaDict:infoDict]; [self.navigationController pushViewController:playerVC animated:ANIMATION_SETTING]; } 

我有同样的问题,这让我发疯。 它可以在一个视图控制器上工作 (audio和video),但不能在另一个(只有audio的黑屏)上工作。 最后,我所做的只是改变了电话的顺序:我只是等到configuration好电影播放器​​之后才把它添加到视图中。 换句话说,我在调用“play”之前的一行中调用了“addSubview”。

这是我用来从URL播放文件的代码:

 MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]]; movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile; [self presentMoviePlayerViewControllerAnimated:movieViewController]; [movieViewController release]; 

这似乎为我工作得很好。 两个注释:

  • 一些模拟器(如当前的iOS 5.0)在播放电影时崩溃,但它在真实设备上工作
  • 如果movieSourceType部分,则会在电影开始前显示一个黑屏

我有同样的问题,解决了它将正在播放的文件的扩展名从.mpg改为.mp4。 显然MPMoviePlayerController需要一个正确的扩展名,尽pipe从文档中我不清楚这是一个要求:

http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html

支持的格式此类播放iOS中支持的任何电影或audio文件。 这包括stream式内容和固定长度文件。 对于电影文件,这通常意味着扩展名为.mov,.mp4,.mpv和.3gp的文件,并使用以下压缩标准之一:

将iOS设备更新至5.0后,此问题似乎已修复。
似乎到以前的版本的iOS SDK问题

你必须在CGRectMake(0,0,0,0)中完成callback!

 -(void)playMovieAtURL:(NSURL*)theURL { MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc] initWithContentURL:theURL]; theMovie.scalingMode=MPMovieScalingModeAspectFill; theMovie.view.frame = CGRectMake(2, 246, 317, 70); [self.view addSubview:theMovie.view]; // Register for the playback finished notification. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; // Movie playback is asynchronous, so this method returns immediately. [theMovie play]; } // When the movie is done,release the controller. -(void)myMovieFinishedCallback:(NSNotification*)aNotification { MPMoviePlayerController* theMovie=[aNotification object]; [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; theMovie.view.frame = CGRectMake(0, 0, 0, 0); // Release the movie instance created in playMovieAtURL [theMovie release]; } 

我有一个类似的问题。 播放后出现空白屏幕,这使我无法再播放video。 那么这里是我的工作。 这种方式播放button不会消失。

 [self.movieController stop]; [self.movieController prepareToPlay]; [self.movieController pause]; 

另外,如果您使用的是http URL,请确保在您的项目* .plist文件中禁用App Transport Security。 这也会导致黑屏。

添加下面的代码:

 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><true/> </dict> 

这里:

  [INSERT CODE ABOVE HERE] </dict> </plist> ----- BOTTOM OF PLIST FILE