MPMoviePlayerController 只播放第一次,第三次,第五次……以此类推

Posted

技术标签:

【中文标题】MPMoviePlayerController 只播放第一次,第三次,第五次……以此类推【英文标题】:MPMoviePlayerController only play the first time, the third time, the fifth... and so on 【发布时间】:2012-04-01 22:24:46 【问题描述】:

大家好,我对 MPMoviePlayerController 有一个奇怪的行为

我播放它的视频的几率... 偶数没有!

正如这里所说的MPMoviePlayerController will play once, then throw an error 问题可能是网址,但我无法找到解决方案..

这是我的代码

NSURL *myUrl = [[NSURL alloc] initWithString:CDNRequest];

    moviecontroller = [[MMRMovieViewController alloc] initWithContentURL:myUrl];

    [[moviecontroller moviePlayer] setScalingMode:MPMovieScalingModeAspectFit];
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(playbackFinished:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification object:[moviecontroller moviePlayer]];
    [self moviecontroller]; 

MMRMovieViewController 是一个视图控制器,它只是扩展了 MPMoviePlayerViewController。 这是playbackFinished方法

- (void)playbackFinished:(NSNotification*)notification 
MPMoviePlayerController *moviePlayer = [notification object];
NSNumber* reason = [[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
switch ([reason intValue]) 
    case MPMovieFinishReasonPlaybackEnded:
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        NSLog(@"playback ended");
        break;
    case MPMovieFinishReasonPlaybackError:
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        NSLog(@"playback error");
        NSError* error = [[notification userInfo] valueForKey:@"error"];
        NSLog(@"error=%@", error);

        break;
    case MPMovieFinishReasonUserExited:
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        NSLog(@"user exited");
        break;
    default:
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        break;

if (moviePlayer == TRUE) 
    [moviePlayer setFullscreen:NO animated:YES];


[moviePlayer stop];
[moviePlayer removeFromSuperview];
moviePlayer = nil;
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

错误日志显示:“rror = "Error Domain=MediaPlayerErrorDomain Code=-12847 \"不支持此电影格式。\" UserInfo=0x5b60030 NSLocalizedDescription=不支持此电影格式。" 但有时它会消失!所以不可能是这个原因!

感谢任何帮助!

谢谢!

【问题讨论】:

设置断点/NSLog语句并打印出CDNRequest的值。您用于设置 CDNRequest 变量的任何逻辑都可能每隔一段时间将其设置为错误值。 播放视频的格式..! 这是 CDNRequest 值的样子:cdnselector.xuniplay.fdnames.com/… NSLog 在视频不播放时也会打印此值。格式应为 m3u8 可能和这个链接有关 [How to play movies files without file extension on ios with MPMoviePlayerController or AVPlayer?] ***.com/questions/5501670/… 【参考方案1】:

这肯定是流问题。

选项:

视频格式不兼容 -- 你可以排除这种情况

视频传送服务器设置有缺陷 -- 您应该使用 Charles 或类似的 HTTP 代理来分析流量

要排除您自己的代码的任何问题,请尝试在移动 Safari 浏览器中输入流 URL。如果该播放失败,则不是客户端/代码相关问题。

【讨论】:

以上是关于MPMoviePlayerController 只播放第一次,第三次,第五次……以此类推的主要内容,如果未能解决你的问题,请参考以下文章

MPMoviePlayerController 只播放第一次,第三次,第五次……以此类推

Airplay:从 MPMoviePlayerController 播放电影只会导致音频流式传输到 Apple tv

Swift 中的 MPMoviePlayerController

MPMoviePlayerController 仅显示白色背景

如何在横向模式下显示 MPMoviePlayerController

MPMoviePlayerController "加载电影..."