web-dev-qa-db-fra.com

AVPlayer ne lit pas les vidéos à partir d'url dans iOS9

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)

 enter image description here

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!

7
Granit
@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

2
Syed Ali Salman

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) 

Référence: https://developer.Apple.com/library/ios/documentation/AVFoundation/Reference/AVAsset_Class/index.html#// Apple_ref/occ/cl/AVAsset

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];
0
Shahul Hasan

Il vous manque cette ligne de code

 playerViewController.player = player;
0
Vikram Parimi

Définissez AVPlayerViewController comme propriété du contrôleur de vue qui le présente, puis allouez-le dans viewDidLoad.

0
Sujoy Singh