iOS: как использовать MPMoviePlayerController
Я создал пустой проект (iOS) и поместил его в мой viewDidLoad:
NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"];
MPMoviePlayerViewController *playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:moviePath]];
[self presentMoviePlayerViewControllerAnimated:playerController];
[playerController.moviePlayer play];
Когда приложение запускается, я вижу только белый экран с сообщениями об ошибках в журнале:
<Error>: CGContextSaveGState: invalid context 0x0
<Error>: CGContextClipToRect: invalid context 0x0
<Error>: CGContextTranslateCTM: invalid context 0x0
<Error>: CGContextDrawShading: invalid context 0x0
<Error>: CGContextRestoreGState: invalid context 0x0
Warning: Attempt to present <MPMoviePlayerViewController: 0x821e3b0> on <ViewController: 0x863aa40> whose view is not in the window hierarchy!
... и куча строк, касающихся отключения автозапуска. Я особенно не понимаю строки о том, что представление не является частью иерархии, так как это пустой iOS-проект "Single View Application", а код находится в ViewController.m. Это в иерархии представлений.
Я точно знаю, что сам файл фильма не является проблемой, потому что я получил его из примера кода Apple на MPMoviePlayer. И хотя я (казалось бы) попробовал все, что написано в примере, я просто не смог заставить плеер работать.
Вот еще одна попытка, на этот раз с MPMoviePlayerController (не MPMoviePlayerViewController):
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[player setContentURL:url];
[player setMovieSourceType:MPMovieSourceTypeFile];
[[player view] setFrame:self.view.bounds];
[player view].backgroundColor = [UIColor greenColor];
player.scalingMode = MPMovieScalingModeNone;
player.controlStyle = MPMovieControlModeDefault;
player.backgroundView.backgroundColor = [UIColor whiteColor];
player.repeatMode = MPMovieRepeatModeNone;
[self.view addSubview: [player view]];
[player play];
Аналогичный результат, с белым экраном и ошибками. Пожалуйста помоги....
4 ответа
Оказывается, все, что нам нужно сделать, это:
NSURL *movieURL = [NSURL URLWithString:@"http://example.com/somefile.mp4"];
movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
[self presentMoviePlayerViewControllerAnimated:movieController];
[movieController.moviePlayer play];
movieController
это примерMPMoviePlayerViewController
объявлено в.h файле.Важно: при определении URL используйте NSURL
URLWithString
метод, если вы хотите получить доступ к файлу через сеть и использовать NSURLfileUrlWithPath
если у вас есть файл локально![movieController.moviePlayer play]
не требуется, и игрок будет запускаться независимо от того, если вы не установили автозапуск на NO, но я заметил, что если вы установитеplay
в нем это начинается немного быстрее. Это может быть просто совпадением.Если вы хотите знать, когда пользователь нажал кнопку "Готово" (игрок будет автоматически удален), вы должны знать, что
-viewDidAppear
вызывается на контроллере представления, который появляется, когда игрок уволен. Вы могли бы установитьBOOL
переменная, когда игрок запускается и проверьтеBOOL
в вашем-viewDidAppear
так что вы знаете, что-viewDidAppear
был вызван, потому что игрок был уволен. В качестве альтернативы вы можете зарегистрироваться наMPMoviePlayerDidExitFullScreen
уведомление, но это не сработало для меня.
ИЛИ, если это не работает, вы можете просто сделать следующее
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"something" ofType:@"mp4"]]];
[self.moviePlayer.view setFrame:CGRectMake(0, 0, 320, 320)];
[self.moviePlayer play];
[self.view addSubview:self.moviePlayer.view];
self.movieplayer является экземпляром MPMoviePlayerController (не MPMoviePlayerViewController). По моему опыту, важно объявить его как свойство (например, так:
@property (strong, nonatomic) MPMoviePlayerController *moviePlayer;
), а не простой ивар, потому что иногда он просто не работает, если это иварустановка рамки также важна, потому что, если мы не установим ее, видео не будет отображаться вообще. Рамка может быть чем угодно, если вы определяете, что находится в пределах вашего обзора
Важно: Как и выше, при определении URL используйте NSURL
URLWithString
метод, если вы хотите получить доступ к файлу через сеть и использовать NSURLfileUrlWithPath
если у вас есть файл локально!
Вы должны попробовать это......
NSString *path = [[NSBundle mainBundle]pathForResource:@"test" ofType:@"mp4"];
player = [[MPMoviePlayerViewController alloc]initWithContentURL:[NSURL fileURLWithPath:path]];
[player.view setFrame:CGRectMake(0, 0, 320, 320)];
[self presentMoviePlayerViewControllerAnimated:player];
[player.moviePlayer play];
[self.view addSubview:player.view];
Попробуй это:
//Hello guise :- complete process here.
//1. add framework in .h
MediaPlayer/MediaPlayer.h
//2.add delegate in @interface, MPMediaPickerControllerDelegate
//3.@property (retain, nonatomic) MPMoviePlayerViewController *moviePlayerController;
//4.and synthesize in .m - @synthesize moviePlayerController;
//5.IN - tableViewdelegateMethod
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath{
//given path for song
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory1 = [paths1 objectAtIndex:0];
NSString *strPath = [NSString stringWithFormat:@"%@/%@",documentsDirectory1,[movieArray objectAtIndex:indexPath.row]];
NSLog(@"strPath %@",strPath);
//path for song.
//convert path in NSURL.
NSURL *videosURL = [NSURL fileURLWithPath:strPath];
moviePlayerController = [[MPMoviePlayerViewController alloc]initWithContentURL:videosURL];
[self presentMoviePlayerViewControllerAnimated:moviePlayerController];
[moviePlayerController.moviePlayer play];
}
//play song on UITableViewCell click.
Попробуй добавить
[player prepareToPlay];
после
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
Вы можете узнать больше о MPMoviePlayerController в документации Apple: http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html#//apple_ref/doc/c_ref/MPMoviePlayerControl