iphone MPMoviePlayServiceWController处理网络问题(黑屏)

iphone MPMoviePlayServiceWController处理网络问题(黑屏),iphone,xcode,networking,media-player,Iphone,Xcode,Networking,Media Player,嘿,我用mpmovieplayervewcontroller来显示视频。我不知道如何处理网络问题。我想在出现错误时关闭MPMoviePlayServiceController控制器。dismissmovieplayervcontrolleranimated方法只在第一次、第二次出现黑屏时有效 示例代码: // VideoViewController.h #import <MediaPlayer/MediaPlayer.h> @interface VideoViewController

嘿,我用mpmovieplayervewcontroller来显示视频。我不知道如何处理网络问题。我想在出现错误时关闭MPMoviePlayServiceController控制器。dismissmovieplayervcontrolleranimated方法只在第一次、第二次出现黑屏时有效

示例代码:

// VideoViewController.h
#import <MediaPlayer/MediaPlayer.h>
@interface VideoViewController : MPMoviePlayerViewController 
{
}
@end

// VideoViewController.m
@implementation VideoViewController
- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieDidLoad:) name:MPMoviePlayerContentPreloadDidFinishNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieDidLoad:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
}

-(void)movieDidLoad:(NSNotification*)notification
{
    [self dismissMoviePlayerViewControllerAnimated];
}
@end

// XController's function to call it
- (void)showVideoView
{
    VideoViewController * controller = [[VideoViewController alloc] initWithContentURL:[NSURL URLWithString:@"http://myvideos.com/movie.m4v"]];
    [self presentMoviePlayerViewControllerAnimated:controller];
    [controller.moviePlayer play];
    [controller release];
}
//VideoViewController.h
#进口
@接口VideoViewController:MPMoviePlayerViewController
{
}
@结束
//VideoViewController.m
@视频控制器的实现
-(无效)viewDidLoad
{
[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(movieDidLoad:)名称:MPMoviePlayerContentPreloadFinishNotification对象:nil];
[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(movieDidLoad:)名称:MPMoviePlayerPlaybackDidFinishNotification对象:nil];
}
-(无效)电影下载:(NSNotification*)通知
{

[self DismissionMoviePlayerServiceController]; } @结束 //XController的函数调用它 -(无效)showVideoView { VideoViewController*控制器=[[VideoViewController alloc]initWithContentURL:[NSURL URLWithString:@]http://myvideos.com/movie.m4v"]]; [自我呈现电影播放服务控制器激活:控制器]; [controller.moviePlayer play]; [控制器释放]; }

请告诉我如何处理网络问题。另外请注意,该视频始终处于全屏状态。

为什么创建VideoViewController?有什么特殊原因吗?如果你想定制一些东西的话,你可以在不创建的情况下完成所有的事情。另一件事是,对于这两个通知,您已经注册了“movieDidLoad”此方法,这将关闭您的视图。当视频准备好播放时,您的视图将被关闭,因为您已经注册了“MPMoviePlayerContentPreloadFinishNotification”此方法。此链接将为您提供更多帮助:

- (void)playbackFinished:(NSNotification*)notification {
NSNumber* reason = [[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
switch ([reason intValue]) {
    case MPMovieFinishReasonPlaybackEnded:
        NSLog(@"playbackFinished. Reason: Playback Ended");         
        break;
    case MPMovieFinishReasonPlaybackError:
        NSLog(@"playbackFinished. Reason: Playback Error");
        break;
        case MPMovieFinishReasonUserExited:
        NSLog(@"playbackFinished. Reason: User Exited");
        break;
    default:
        break;
}
[self.movieController setFullscreen:NO animated:YES];

}

是的。。。我还重写了shouldAutorotateToInterfaceOrientation方法。它会把你的字典还给你。此词典包含两个重要的内容,一个是错误代码,另一个是播放完成原因。从错误代码可以得到失败的确切原因。您可以使您的应用程序更容易出错。我现在没有电脑,所以不能确切地说你必须调试。如果我不执行[[notification object]stop];,[self-DismissMoviePlayServiceController激活]不工作,但调用stop表示MPMovieFinishResasonPlaybackError被调用两次。DismissMoviePlayServiceController激活不会隐藏出错时的视图。