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
playState
& localState
,他们似乎很好。 什么可能是黑色空屏幕的理由?
你需要保留你的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理MPMediaPlayerController
的ViewController
:
- (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从文档中我不清楚这是一个要求:
支持的格式此类播放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