61 votes

iPhone SDK: Comment lire une vidéo dans une vue? Plutôt qu'en plein écran

J'essaie de lire une vidéo dans un UIView , alors ma première étape a été d'ajouter une classe pour cette vue et de commencer à y lire un film en utilisant le code suivant:

 - (IBAction)movie:(id)sender{
    NSBundle *bundle = [NSBundle mainBundle];
        NSString *moviePath = [bundle pathForResource:@"Movie" ofType:@"m4v"];
    NSURL *movieURL = [[NSURL fileURLWithPath:moviePath] retain];
    MPMoviePlayerController *theMovie = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
    theMovie.scalingMode = MPMovieScalingModeAspectFill;
    [theMovie play];
}
 

Mais cela ne fait que bloquer l'application lorsque cette méthode est utilisée dans sa propre classe, mais c'est très bien ailleurs. Est-ce que quelqu'un sait lire une vidéo dans une vue? et éviter qu'il soit en plein écran?

83voto

tobyc Points 1550

À partir du SDK 3.2, vous pouvez accéder à la propriété de vue de MPMoviePlayerController , modifier son cadre et l'ajouter à votre hiérarchie de vues.

 MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:url]];
player.view.frame = CGRectMake(184, 200, 400, 300);
[self.view addSubview:player.view];
[player play];
 

Il y a un exemple ici: http://www.devx.com/wireless/Article/44642/1954

34voto

mdziadkowiec Points 318

Le meilleur moyen consiste à utiliser des couches au lieu de vues:

 AVPlayer *player = [AVPlayer playerWithURL:[NSURL url...]]; // 

AVPlayerLayer *layer = [AVPlayerLayer layer];

[layer setPlayer:queuePlayer];
[layer setFrame:CGRectMake(10, 10, 300, 200)];
[layer setBackgroundColor:[UIColor redColor].CGColor];
[layer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

[self.view.layer addSublayer:layer];

[player play];
 

N'oubliez pas d'ajouter des frameworks:

 #import <QuartzCore/QuartzCore.h>
#import "AVFoundation/AVFoundation.h"
 

15voto

jrc Points 1834

En regardant votre code, vous devez définir le cadre de la vue du contrôleur de lecteur de film et également ajouter la vue du contrôleur de lecteur de film à votre vue. N'oubliez pas non plus d'ajouter MediaPlayer.framework à votre cible.

Voici un exemple de code:

 #import <MediaPlayer/MediaPlayer.h>

@interface ViewController () {
    MPMoviePlayerController *moviePlayerController;
}

@property (weak, nonatomic) IBOutlet UIView *movieView; // this should point to a view where the movie will play

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // Instantiate a movie player controller and add it to your view
    NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"mov"];
    NSURL *movieURL = [NSURL fileURLWithPath:moviePath];    
    moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
    [moviePlayerController.view setFrame:self.movieView.bounds];  // player's frame must match parent's
    [self.movieView addSubview:moviePlayerController.view];

    // Configure the movie player controller
    moviePlayerController.controlStyle = MPMovieControlStyleNone;        
    [moviePlayerController prepareToPlay];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    // Start the movie
    [moviePlayerController play];
}

@end
 

6voto

SheshPai Points 154

Rassembler diverses solutions en un seul endroit pour lire une vidéo avec iOS 4.2

http://codevelle.wordpress.com/2011/01/07/videoplayer-for-ios-4-2/

5voto

Shailesh Points 39
NSString * pathv = [[NSBundle mainBundle] pathForResource:@"vfile" ofType:@"mov"];
playerv = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:pathv]];

[self presentMoviePlayerViewControllerAnimated:playerv];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X