J'ai créé un projet vide (iOS) et l'ai mis dans ma vueDidLoad:
NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"];
MPMoviePlayerViewController *playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:moviePath]];
[self presentMoviePlayerViewControllerAnimated:playerController];
[playerController.moviePlayer play];
Lorsque l'application démarre, tout ce que je reçois est un écran blanc avec des messages d'erreur dans le journal:
<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!
... et un tas de lignes concernant la désactivation de la lecture automatique. Je ne comprends surtout pas la ligne sur la vue ne faisant pas partie de la hiérarchie car c'est un projet iOS "Single View Application" vide et le code est dans ViewController.m. Il IS dans la hiérarchie des vues.
Je sais pertinemment que le fichier vidéo lui-même n'est pas le problème parce que je l'ai obtenu à partir de l'exemple de code d'Apple sur MPMoviePlayer. Et même si j'ai (apparemment) essayé tout ce qui est écrit dans l'échantillon, je n'ai tout simplement pas réussi à faire fonctionner le lecteur.
Voici un autre essai, cette fois avec MPMoviePlayerController (pas 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];
Résultat similaire, avec écran blanc et erreurs. Veuillez aider ....
Il s'avère que tout ce que nous avons à faire est le suivant:
NSURL *movieURL = [NSURL URLWithString:@"http://example.com/somefile.mp4"];
movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
[self presentMoviePlayerViewControllerAnimated:movieController];
[movieController.moviePlayer play];
movieController
est une instance de MPMoviePlayerViewController
déclarée dans le fichier .h.
Important: lors de la définition de l'URL, utilisez la méthode URLWithString
de NSURL si vous souhaitez accéder au fichier via un réseau et utilisez fileUrlWithPath
de NSURL si vous avez le fichier localement!
[movieController.moviePlayer play]
n'est pas requis et le lecteur démarrera peu importe si vous n'avez pas défini la lecture automatique sur NO, mais j'ai remarqué que si vous mettez play
dedans, il démarre un peu plus vite. Cela pourrait être juste une coïncidence.
Si vous voulez savoir lorsque l'utilisateur a appuyé sur le bouton terminé (le joueur sera automatiquement renvoyé), vous devez savoir que -viewDidAppear
Est appelé sur le contrôleur de vue qui apparaît lorsque le joueur est renvoyé. . Vous pouvez définir une variable BOOL
au démarrage du lecteur et rechercher la BOOL
dans votre -viewDidAppear
Afin de savoir que -viewDidAppear
A été appelé parce que le le joueur a été renvoyé. Alternativement, vous pouvez vous inscrire à la notification MPMoviePlayerDidExitFullScreen
, mais cela n'a pas fonctionné pour moi.
OU, si cela ne fonctionne pas, vous pouvez simplement faire ce qui suit
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 est une instance de MPMoviePlayerController (pas MPMoviePlayerViewController). D'après mon expérience, il est important de le déclarer comme une propriété (comme ceci: @property (strong, nonatomic) MPMoviePlayerController *moviePlayer;
) plutôt qu'un simple ivar, car parfois cela ne fonctionne tout simplement pas s'il s'agit d'un ivar
le réglage du cadre est également important, car si nous ne le définissons pas, la vidéo n'apparaîtra pas du tout. Le cadre peut être n'importe quoi tant que ce que vous définissez est dans les limites de votre vue
Important: Comme ci-dessus, lors de la définition de l'URL, utilisez la méthode URLWithString
de NSURL si vous souhaitez accéder au fichier via un résea et utilisez fileUrlWithPath
si vous avez le fichier localement!
Tu dois essayer ça......
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];
Essaye ça:
//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.
Essayez d'ajouter
[player prepareToPlay];
après
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
Vous pouvez en savoir plus sur MPMoviePlayerController dans Apple: http://developer.Apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference. html # // Apple_ref/doc/c_ref/MPMoviePlayerController