2015-09-30 33 views
7

Próbuję osadzić AVPlayer w UIView i odtwarzać plik wideo MP4 z adresu URL. Problemem jest to, że otrzymują tylko czarną pusty widok (patrz zrzut ekranu)AVPlayer nie odtwarza wideo z adresu URL w iOS9

enter image description here

W poprzednich wersjach systemu iOS pracował dla mnie, ale ponieważ uaktualnieniu do iOS9 mam ten problem.

Mój plik .h wygląda następująco:

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

Natomiast w moim pliku implementacji Mam następujący:

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


} 

jestem brakuje czegoś tutaj?

Z góry dziękuję!

+5

Może być App Bezpieczeństwa Transportu. Spróbuj załadować wideo przez 'https:' i/lub oglądając http://stackoverflow.com/questions/30731785/how-do--load-an-http-url-with-app-transport-security-enabled- in-ios-9 – ChrisH

+1

Próbowałem już tego, ale bez powodzenia – Granit

+0

Coś zostanie zarejestrowane w debuggerze? –

Odpowiedz

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

Powodem film nie jest odtwarzany jest tylko z powodu wersja tls jest zbyt stara w przypadku HTTP zobacz App Transport Security

+0

I już próbowałem dodać niezbędne klucze do mojego pliku info.plist, ale bez powodzenia – Granit

1

Brakuje tej linii kodu w zamierzonej

playerViewController.player = player; 
+0

Dodano tę linię kodu nadal jest pusta. – shri

0

Dokonać AVPlayerViewController jako właściwość kontrolera widoku, który go wyświetla, a następnie przydzielaj go w viewDidLoad.

0

Jeśli chcesz odtwarzać wideo z jednego adresu URL, nie musisz używać zestawu AVURLA. Powinieneś używać AVURLAsset, gdy masz liczbę filmów lub adresów URL. (Ale obie strony działają)

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

następująca metoda działa dobrze, jeśli masz jeden adres 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]; 
Powiązane problemy