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
MPMoviePlayerController stops playing after a few seconds
提问by Luna
MPMoviePlayerController
stops 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
回答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];
回答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;