这是我的代码应该播放嵌入在子视图中的视频,但它只显示没有控件的静止图像。
- (void)displayVideo:(NSURL *)videoURL
{
if (self.mediaPlayer) {
[self.mediaPlayer.view removeFromSuperview];
self.mediaPlayer = nil;
}
self.mediaPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];
[self.mediaPlayer.moviePlayer prepareToPlay];
self.mediaPlayer.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
self.mediaPlayer.view.frame = CGRectMake(0, 0, self.mediaView.bounds.size.width, self.mediaView.bounds.size.height);
[self.mediaView addSubview:self.mediaPlayer.view];
[self.mediaPlayer.moviePlayer play];
}
我还尝试直接加载媒体播放器,其中mediaPlayer是MPMoviePlayerController而不是MPMoviePlayerViewController,但只有黑色视图我才能得到更少。
self.mediaPlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
[self.mediaPlayer prepareToPlay];
self.mediaPlayer.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
self.mediaPlayer.view.frame = CGRectMake(0, 0, self.mediaView.bounds.size.width, self.mediaView.bounds.size.height);
[self.mediaView addSubview:self.mediaPlayer.view];
[self.mediaPlayer play];
感谢您的帮助。
答案 0 :(得分:1)
第一个代码完全错误。使用MPMoviePlayerViewController的唯一方法是作为呈现的视图控制器(presentViewController:...
);你不能抓住它的观点,并试图将它推入你自己的界面。
第二个有更好的机会。所以这里有一些事情要考虑:
videoURL
有效吗?你怎么知道的?不,真的。并考虑格式,因为不是每种视频格式都可以在iOS下播放。
self.mediaPlayer
是否保留了电影播放器控制器?再次,仔细看;这至关重要。它必须有strong
或retain
政策。
您的界面中是否还有其他媒体播放器控制器视图?我注意到在第二个代码中你忘了删除前一个代码。这至关重要!只有一个这样的观点。
(顺便说一句,没有必要要求MPMovieControlStyleEmbedded
;这是此配置的默认设置。)
最后,与工作代码进行比较可能会有所帮助。我的书中的代码工作:
http://www.apeth.com/iOSBook/ch28.html#_mpmovieplayercontroller
NSURL* m = [[NSBundle mainBundle] URLForResource:@"ElMirage"
withExtension:@"mp4"];
MPMoviePlayerController* mp =
[[MPMoviePlayerController alloc] initWithContentURL:m];
self.mpc = mp; // retain policy
self.mpc.shouldAutoplay = NO;
[self.mpc prepareToPlay];
self.mpc.view.frame = CGRectMake(10, 10, 300, 250);
self.mpc.backgroundView.backgroundColor = [UIColor redColor];
[self.view addSubview:self.mpc.view];
您可以通过下载此示例来证明:
https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch28p786moviePlayer
答案 1 :(得分:0)
首先检查您的videoURL有效吗? iOS中的视频技术支持使用.mov,.mp4,.m4v和.3gp文件扩展名播放电影文件,并使用以下压缩标准:
1)H.264视频,高达1.5 Mbps,640 x 480像素,每秒30帧,H.264基线配置文件的低复杂度版本,AAC-LC音频高达160 Kbps,48 kHz,立体声.m4v,.mp4和.mov文件格式的音频
2)H.264视频,高达768 Kbps,320 x 240像素,每秒30帧,基线配置文件高达1.3级,AAC-LC音频高达160 Kbps,48 kHz,立体声音频,.m4v, .mp4和.mov文件格式
3)MPEG-4视频,高达2.5 Mbps,640 x 480像素,每秒30帧,简单配置文件,AAC-LC音频高达160 Kbps,48 kHz,立体声音频,.m4v,.mp4和.mov文件格式
-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:strSelectedVideoUrl]];
player.scalingMode = MPMovieScalingModeAspectFit;
player.movieSourceType = MPMovieSourceTypeFile;
player.view.frame = CGRectMake(0, 45, 320, 400);
player.shouldAutoplay = YES;
[player prepareToPlay];
[self.view addSubview:player.view];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:player];
[player play];
}
- (void) movieFinishedCallback:(NSNotification*) aNotification {
MPMoviePlayerController *player1 = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player1];
[player stop];
[player1.view removeFromSuperview];
//[player1 release];
player1 = nil;
[self.navigationController popViewControllerAnimated:YES];
}
答案 2 :(得分:0)
试试这个,它对我来说很完美
NSURL *movieURL = [NSURL URLWithString:@"http://........"];
// Initialize a movie player object with the specified URL
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
self.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
[self.moviePlayer.view setFrame:self.view.bounds];
[self.view addSubview:self.moviePlayer.view];
[self.moviePlayer play];