2015-09-30 26 views
7

私はUIViewの中にAVPlayerを埋め込み、URLからmp4ビデオファイルを再生しようとしています。問題は、私は黒のみのブランクビュー(スクリーンショットを参照)、それは私のために働いていた以前のiOSバージョンではAVPlayerはiOS9のURLからビデオを再生しません

enter image description here

を、受信ですが、iOS9にアップグレードするので、私はこの問題を得ました。私は、次のしている私の実装ファイル内のに対して

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

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


} 

私はここで何かをしないのです

私の.hファイルには、次のようになりますか?

ありがとうございます!

+5

のApp交通安全かもしれませ。 「https:」を介して動画を読み込んだり、http://stackoverflow.com/questions/30731785/how-do-i-load-an-http-url-with-app-transport-security-enabled-を見てください。 in-ios-9 – ChrisH

+1

私は既にこれを試しましたが、成功しません – Granit

+0

何かがあなたのデバッガに記録されますか? –

答えて

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

動画が再生されていない理由は唯一tlsバージョンによりHTTPの場合には古すぎるされApp Transport Security

+0

すでにinfo.plistに必要なキーを追加しようとしましたが、成功しませんでした – Granit

1

を参照してください。あなたはあなたに

playerViewController.player = player; 
+0

この行を追加しても空白です。 – shri

0

をこのコード行が欠落しているAVPlayerViewControllerとして作りますそれを提示したView ControllerのプロパティをviewDidLoad内に割り当てます。

0

1つのURLからビデオを再生する場合は、AVURLAssetを使用する必要はありません。ビデオやURLの数が多い場合は、AVURLAssetを使用する必要があります。あなたが1つのURLを持っている場合https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAsset_Class/index.html#//apple_ref/occ/cl/AVAsset

次のような方法、正常に動作します:

リファレンス(しかし、両方の方法は動作します)。

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]; 
関連する問題