J'essaie d'intégrer un AVPlayer dans UIView et de lire un fichier vidéo MP4 à partir d'une URL. Le problème est que je ne reçois qu'une vue en noir et blanc (voir la capture d'écran)
Dans les versions précédentes, cela fonctionnait pour moi, mais ce problème est survenu depuis la mise à niveau vers iOS9.
Mon fichier .h ressemble à ceci:
@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIView *viewPlayerContainer;
Alors que dans mon fichier d'implémentation, j'ai les éléments suivants:
@import AVFoundation;
@import AVKit;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
NSURL *url = [NSURL URLWithString:@"http://techslides.com/demos/sample-videos/small.mp4"];
AVURLAsset *asset = [AVURLAsset assetWithURL: url];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];
AVPlayer * player = [[AVPlayer alloc] initWithPlayerItem: item];
[playerViewController.view setFrame:CGRectMake(0, 0, _viewPlayerContainer.bounds.size.width, _viewPlayerContainer.bounds.size.width)];
playerViewController.showsPlaybackControls = NO;
[_viewPlayerContainer addSubview:playerViewController.view];
[player play];
}
Est-ce que j'ai râté quelque chose?
Merci d'avance!
@implementation ViewController{
AVPlayerViewController *playerViewController;
}
- (void)viewDidLoad {
[super viewDidLoad];
playerViewController = [[AVPlayerViewController alloc] init];
}
- (IBAction)playVideo:(id)sender {
NSURL *url = [NSURL URLWithString:@"http://techslides.com/demos/sample-videos/small.mp4"];
AVURLAsset *asset = [AVURLAsset assetWithURL: url];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];
AVPlayer * player = [[AVPlayer alloc] initWithPlayerItem: item];
playerViewController.player = player;
[playerViewController.view setFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.width)];
playerViewController.showsPlaybackControls = YES;
[self.view addSubview:playerViewController.view];
[player play];
}
La raison pour laquelle la vidéo ne joue pas est uniquement due à la version tls
est trop ancienne pour HTTP
, veuillez consulter App Transport Security
Si vous souhaitez lire une vidéo à partir d'une URL, vous n'avez pas besoin d'utiliser AVURLAsset. Vous devez utiliser AVURLAsset lorsque vous avez le nombre de vidéos ou d’URL. (Mais les deux manières fonctionnent)
La méthode suivante fonctionne bien si vous avez une URL.
NSURL *url = [NSURL URLWithString:@“<your_url_here>”];
AVPlayer *player = [[AVPlayer alloc] initWithURL: url];
AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
controller.player = player;
controller.delegate = self;// if you want to use delegates...
controller.showsPlaybackControls=YES;
controller.view.frame = self.view.frame;
[self.view addSubview:controller.view];
[player play];
Il vous manque cette ligne de code
playerViewController.player = player;
Définissez AVPlayerViewController comme propriété du contrôleur de vue qui le présente, puis allouez-le dans viewDidLoad.