2015-09-30 9 views
7

Ich versuche einen AVPlayer in eine UIView einzubetten und eine mp4 Videodatei von einer URL abzuspielen. Das Problem ist, erhalte ich nur eine schwarze leere Ansicht (siehe Screenshot)AVPlayer spielt kein Video von der URL in iOS9

enter image description here

In früheren iOS-Versionen es für mich gearbeitet, aber zu iOS9 seit dem Upgrade bekam ich dieses Problem.

Meine .h-Datei sieht wie folgt aus:

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

Während in meiner Implementierung-Datei habe ich die folgenden:

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


} 

bin ich etwas fehlt hier?

Vielen Dank im Voraus!

+5

Mai App Transport Security sein. Versuchen Sie, ein Video über 'https:' und/oder http://stackoverflow.com/questions/30731785/how-do-i-load-an-http-url-with-app-transport-security-enabled- zu laden. in-ios-9 – ChrisH

+1

Ich habe das schon versucht, aber ohne Erfolg – Granit

+0

Alles wird in Ihrem Debugger eingeloggt? –

Antwort

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

Der Grund Video abgespielt wird nicht nur durch die tls Version zu alt ist, bei HTTP bitte App Transport Security

+0

I habe schon versucht, die nötigen Schlüssel zu meiner info.plist hinzuzufügen, aber ohne Erfolg – Granit

1

Sie vermissen diese Codezeile in Ihrem

playerViewController.player = player; 
+0

Diese Codezeile wurde hinzugefügt, es ist noch leer. – shri

0

Machen Sie das AVPlayerViewController sehen, wie die Eigenschaft des View-Controllers, der es darstellt, und es dann in viewDidLoad zuweist.

0

Wenn Sie Videos von einer URL wiedergeben möchten, müssen Sie AVURLAsset nicht verwenden. Sie sollten AVURLAsset verwenden, wenn Sie eine Anzahl von Videos oder URLs haben. (Aber in beiden Richtungen arbeiten)

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

Nach Methode funktioniert gut, wenn Sie eine URL haben.

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]; 
Verwandte Themen