xcode MPMoviePlayerController 在几秒钟后停止播放

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12556764/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 01:35:48  来源:igfitidea点击:

MPMoviePlayerController stops playing after a few seconds

iphoneobjective-ciosxcodempmovieplayercontroller

提问by Luna

MPMoviePlayerControllerstops playing after a few seconds, this is the code I'm using:

MPMoviePlayerController几秒钟后停止播放,这是我正在使用的代码:

NSString *urlAddress = @"http://67.159.28.74:8730";
NSURL *url = [NSURL URLWithString:urlAddress];

MPMoviePlayerController *player = [[MPMoviePlayerController alloc]initWithContentURL:url];
player.movieSourceType = MPMovieSourceTypeStreaming;

player.view.hidden = NO;
[self.view addSubview:player.view];
[player prepareToPlay];

if(player){
    [player play];
}

The error im getting in the console is:

我在控制台中得到的错误是:

2012-09-23 18:07:56.618 Reader[696:c07] [MPAVController] Autoplay: Disabling autoplay for pause

2012-09-23 18:07:56.619 Reader[696:c07] [MPAVController] Autoplay: Disabling autoplay

2012-09-23 18:07:56.638 Reader[696:c07] [MPAVController] Autoplay: Disabling autoplay for pause

2012-09-23 18:07:56.638 Reader[696:c07] [MPAVController] Autoplay: Disabling autoplay

2012-09-23 18:07:56.643 Reader[696:c07] [MPAVController] Autoplay: Enabling autoplay

2012-09-23 18:07:56.645 Reader[696:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0

2012-09-23 18:07:56.646 Reader[696:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.

2012-09-23 18:07:56.648 Reader[696:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0

2012-09-23 18:07:56.648 Reader[696:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.

2012-09-23 18:07:56.650 Reader[696:c07] [MPAVController] Autoplay: Enabling autoplay

2012-09-23 18:07:56.652 Reader[696:c07] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0

2012-09-23 18:07:58.746 Reader[696:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0

2012-09-23 18:07:58.746 Reader[696:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.

2012-09-23 18:07:58.747 Reader[696:c07] [MPAVController] Autoplay: _streamLikelyToKeepUp: 0 -> 1

2012-09-23 18:07:58.748 Reader[696:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 1

2012-09-23 18:07:58.748 Reader[696:c07] [MPAVController] Autoplay: Enabling autoplay`

回答by Luna

solved it:

解决了:

I turned my MPMoviePlayerController into a property:

我把我的 MPMoviePlayerController 变成了一个属性:

//add in header

//在标题中添加

@property (strong,nonatomic) MPMoviePlayerController *myPlayer;

//add in .m file

//添加.m文件

- (IBAction)playStream:(id)sender {
    NSString *urlAddress = @"http://67.159.28.74:8730";
    NSURL *url = [NSURL URLWithString:urlAddress];

    MPMoviePlayerController *player = [[MPMoviePlayerController alloc]initWithContentURL:url];
    [player prepareToPlay];
    //Remember you have to add MediaPlayer.framework to your project
    /*[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:player];*/

    player.movieSourceType = MPMovieSourceTypeStreaming;



    player.view.hidden = YES;

    self.myPlayer = player;

    [self.view addSubview:self.myPlayer.view];


    if(player){
      [self.myPlayer play];
    }
}

回答by Logi24

You have to set a class variable like this:

你必须像这样设置一个类变量:

@property (nonatomic, retain) MPMoviePlayerController *moviePlayer;

My code looks like this:

我的代码如下所示:

NSURL *theUrl = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"mp4"];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:theUrl];
[moviePlayer prepareToPlay];
[moviePlayer.view setFrame: self.view.bounds];
moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[self.view addSubview: moviePlayer.view];
[moviePlayer play];

This works perfect for me!

这对我来说非常适合!

回答by Artem Levkovich

on xCode 4.6.1 it worked fine.

在 xCode 4.6.1 上它运行良好。

But i had this problem with xCode 5!

但是我在使用 xCode 5 时遇到了这个问题!

But this solution is very helpful:

但是这个解决方案非常有帮助:

"The solution is that the player would have to be an instance variable or property of the view controller. ie We must use the instance of MPMoviePlayerController

“解决方案是播放器必须是视图控制器的实例变量或属性。即我们必须使用 MPMoviePlayerController 的实例

@property (nonatomic,strong) MPMoviePlayerController *myMovieController;"

@property (nonatomic,strong) MPMoviePlayerController *myMovieController;"

Thank author very much!

非常感谢作者!

And this is my code:

这是我的代码:

UIGraphicsBeginImageContext(CGSizeMake(1,1));

NSString *path = [[NSBundle mainBundle] pathForResource:@"video" ofType:@"mp4"];
NSURL *videoURL = [NSURL fileURLWithPath:path];
self.moviePlayerView = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
[self.moviePlayerView prepareToPlay];
[self.moviePlayerView.view setFrame:CGRectMake(0, 0, 320, self.view.frame.size.height/2)];
self.moviePlayerView.view.backgroundColor = [UIColor clearColor];
[self.moviePlayerView setContentURL:videoURL];

self.moviePlayerView.movieSourceType = MPMovieSourceTypeFile;
self.moviePlayerView.controlStyle = MPMovieControlStyleDefault;
[self.view addSubview:self.moviePlayerView.view];
self.moviePlayerView.shouldAutoplay = NO;
[self.moviePlayerView play];

UIGraphicsEndImageContext();

回答by coco

You can try to do this just after you instantiate your player: [player prepareToPlay]

您可以在实例化播放器后尝试执行此操作: [player prepareToPlay]

More info here: iOS 6 streaming player com.apple.coremedia.networkbuffering bug

更多信息:iOS 6 流媒体播放器 com.apple.coremedia.networkbuffering 错误

回答by dhaya

Try this it's work well for me in ios6

试试这个,它在 ios6 中对我很有效

NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"ddd" ofType:@"mp4"];
NSLog(@"%@",resourcePath);
NSURL *url = [NSURL fileURLWithPath:resourcePath];
NSLog(@"%@",url);
MPMoviePlayerViewController *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
moviePlayer.view.frame = self.view.frame;
moviePlayer.moviePlayer.shouldAutoplay=YES;
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer.moviePlayer setFullscreen:YES animated:YES];
[self.view addSubview:moviePlayer.view];
[moviePlayer.moviePlayer play];

回答by Murali-snowtint

Here is an interesting line of code which you are missing.

这是您缺少的有趣代码行。

According to Apple's document

根据苹果的文件

" When you add a movie player's view to your app's view hierarchy, be sure to size the frame correctly, as shown here: http://tinyurl.com/9wgv9wc

" 当您将电影播放器​​的视图添加到应用程序的视图层次结构时,请确保正确调整框架的大小,如下所示:http: //tinyurl.com/9wgv9wc

MPMoviePlayerController *player =

    [[MPMoviePlayerController alloc] initWithContentURL: myURL];

[player prepareToPlay];

[player.view setFrame: myView.bounds];  // player's frame must match parent's

[myView addSubview: player.view];

// ...

[player play];

http://tinyurl.com/aeh9f84

http://tinyurl.com/aeh9f84

回答by Vicky

The solution is that the player would have to be an instance variable or property of the view controller. ie We must use the instance of MPMoviePlayerController

解决方案是玩家必须是视图控制器的实例变量或属性。即我们必须使用 MPMoviePlayerController 的实例

@property (nonatomic,strong) MPMoviePlayerController *myMovieController;

@property (nonatomic,strong) MPMoviePlayerController *myMovieController;