2015-09-30 9 views
7

Sto cercando di incorporare un AVPlayer in un UIView e riprodurre un file video mp4 da un URL. Il problema è che ricevere solo una visione in bianco nero (vedi screenshot)AVPlayer non riprodurrà video dall'URL in iOS9

enter image description here

Nelle versioni precedenti di iOS ha funzionato per me, ma dal momento che l'aggiornamento a iOS9 ho ottenuto questo problema.

mio file h si presenta così:

@interface ViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UIView *viewPlayerContainer; 

considerando che il mio file di implementazione ho il seguente:

@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]; 


} 

mi manca qualcosa qui?

Grazie in anticipo!

+5

Può essere App Transport Security. Prova a caricare un video tramite 'https:' e/o guardando http://stackoverflow.com/questions/30731785/how-do-i-load-an-http-url-with-app-transport-security-enabled- in-ios-9 – ChrisH

+1

Ho già provato questo, ma senza successo – Granit

+0

Qualcosa viene registrato nel debugger? –

risposta

13
@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]; 
} 
1

Il motivo video non viene riprodotto è dovuta solo la versione tls è troppo vecchia in caso di HTTP vedere App Transport Security

+0

I già provato ad aggiungere le chiavi necessarie al mio info.plist ma senza successo – Granit

1

Vi manca questa riga di codice nel vostro

playerViewController.player = player; 
+0

Aggiunta questa riga di codice è ancora vuota. – shri

0

Fare l'AVPlayerViewController come la proprietà del controller della vista che la presenta e quindi la assegna all'interno di viewDidLoad.

0

Se si desidera riprodurre video da un URL, non è necessario utilizzare AVURLAsset. Dovresti usare AVURLAsset quando hai un numero di video o URL. (Ma in entrambi i sensi di lavoro)

Riferimento: https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAsset_Class/index.html#//apple_ref/occ/cl/AVAsset

Seguendo il metodo funziona bene, se si dispone di un 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];