web-dev-qa-db-ja.com

AVPlayerがiOS9のURLからビデオを再生しない

UIView内にAVPlayerを埋め込み、URLからmp4ビデオファイルを再生しようとしています。問題は、黒い空白のビューしか表示されないことです(スクリーンショットを参照)

enter image description here

以前のiOSバージョンでは機能しましたが、iOS9にアップグレードしてからこの問題が発生しました。

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

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


}

ここで何か不足していますか?

前もって感謝します!

8
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];
}

ビデオが再生されない理由は、tlsHTTPの場合に古すぎるためです。参照 App Transport Security

2
Syed Ali Salman

1つのURLからビデオを再生する場合は、AVURLAssetを使用する必要はありません。多数の動画またはURLがある場合は、AVURLAssetを使用する必要があります。 (しかし、両方の方法が機能します)

リファレンス: https://developer.Apple.com/library/ios/documentation/AVFoundation/Reference/AVAsset_Class/index.html#//Apple_ref/occ/cl/AVAsset

次のメソッドは、1つの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

あなたにはあなたのこのコード行がありません

 playerViewController.player = player;
0
Vikram Parimi

AVPlayerViewControllerを、それを提示するビューコントローラーのプロパティとして作成し、viewDidLoad内に割り当てます。

0
Sujoy Singh