iphone - iOS 媒体框架

标签 iphone objective-c ios ipad

我正在将一些视频应用到我的 iPad 应用程序中,并且效果很好。但我遇到的问题是,当我离开 View 导航到其他地方时,视频音频会在后台继续播放。有没有办法在关闭 View 之前完全停止视频并将其从 View 中删除?

我试过:

[moviePlayerController 停止]; - 但这似乎并没有阻止电影它只是让应用程序崩溃。

[moviePlayerController.view removeFromSuperview]; - 从 View 中删除视频但不停止音频。

这是我的代码:

- (IBAction)PlayMediaButton:(id)sender
{   

[moviePlayerController stop];

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

NSString *movpath = [[NSBundle mainBundle] pathForResource:@"albert" ofType:@"mp4"];
MPMoviePlayerViewController* mpviewController = [[MPMoviePlayerViewController alloc] 
                                                 initWithContentURL:[NSURL fileURLWithPath:movpath]];

if ([[NSFileManager defaultManager] fileExistsAtPath:movpath])      //Does file exist?
{
    moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:movpath]];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlaybackComplete:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:moviePlayerController];  

    moviePlayerController.view.frame = CGRectMake(38, 37, 986, 618);
    [self.view addSubview:moviePlayerController.view];
    [moviePlayerController play];

    if ([moviePlayerController respondsToSelector:@selector(setAllowsAirPlay:)])    //Allow airplay if availabe
        [moviePlayerController setAllowsAirPlay:YES];

    [moviePlayerController play];

}            
}



- (void)moviePlaybackComplete:(NSNotification *)notification
{
    MPMoviePlayerController *moviePlayerController = [notification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:moviePlayerController];

    [moviePlayerController.view removeFromSuperview];
    [moviePlayerController release];
}

最佳答案

如果我没听错,你应该在 -viewWillDisappear: 中停止电影播放器​​ Controller 。

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [moviePlayerController stop];
}

编辑 刚注意到您正在创建一个 MPMoviePlayerViewController 而不是 MPMoviePlayerController。前者旨在以模态方式显示,因为它是 UIViewController 的子类。这解释了崩溃是因为 MPMoviePlayerViewController 没有响应 -stop 消息。因此,要么使用 -presentModalViewController:animated: 显示 moviePlayerController ,要么将其类型更改为 MPMoviePlayerController 并将其添加到您的 View 中,就像您现在所做的那样。

关于iphone - iOS 媒体框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579658/

相关文章:

iPhone - removeObjectIdenticalTo 行为

iOS 应用被拒绝为 "Spam"

ios - 在同一个 iOS 项目中混合使用 ARC 和非 ARC 代码有多安全?

iphone - 获取 UITableView 中的所有单元格?

ios - 方法返回的对象会被放入自动释放池吗?

iOS WKWebView 不加载 http 网页内容

iphone - 我如何在导航 Controller 中弹出

iphone - UITextView返回KeyType

ios - 核心数据 - 关系、获取和插入

ios - AFNetworking,使用正确的 token 获取 401