在ios 6的模拟器和真机中,使用MPMoviePlayerController无法播放视频,提示如下:
2012-08-23 15:36:45.559 VideoTest1[11398:c07] [MPAVController] Autoplay: Disabling autoplay for pause
2012-08-23 15:36:45.560 VideoTest1[11398:c07] [MPAVController] Autoplay: Disabling autoplay
2012-08-23 15:37:18.186 VideoTest1[11398:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0)
找遍网络,有几个说法如下
1。stackoverflow中有人说加prepareToPlay,就搞定了。我试了试不行。还有说加MPMoviePlayerPlaybackDidFinishNotification就ok。实际也不行
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
[self.moviePlayer prepareToPlay];
self.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.moviePlayer];
[self.moviePlayer play];
2。第二种方法,就是把MPMoviePlayerController加入当前view中也是不行的。
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
[self.moviePlayer prepareToPlay];
self.moviePlayer.view.frame = self.view.frame;
self.moviePlayer.shouldAutoplay=YES;
self.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
self.moviePlayer.controlStyle = MPMovieControlStyleNone;
[self.moviePlayer setFullscreen:YES animated:YES];
[self.view addSubview:moviePlayer.view];
[self.moviePlayer play];
实际就是这个原因。我拿成员变量(retain)类型,接了一下MPMoviePlayerController,注意以下代码
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
实际上alloc的时候我没加autorelease,后面也没有加release。这时retaincount应该是2。
这样就能播放了。
4。后来又测试了一番,使用一个独立的viewcontroller来放MPMoviePlayerController,播放了两个地址,发现必须要用正确的播放地址才行。否则会有问题。
通过以上测试,我还是不太清楚为什么?