AVPlayer не будет воспроизводить видео с URL в iOS9

Я пытаюсь встроить AVPlayer в UIView и воспроизвести видеофайл mp4 с URL. Проблема в том, что я получаю только черный пустой вид (см. Скриншот)

В предыдущих версиях 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];


}

Я что-то здесь упускаю?

Заранее спасибо!

5 ответов

Решение
@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];
}

Причина, по которой видео не воспроизводится, связана только с tls версия слишком старая в случае HTTP пожалуйста, смотрите приложение Транспортная безопасность

Вы пропустили эту строку кода в вашем

 playerViewController.player = player;

Сделайте AVPlayerViewController как свойство контроллера представления, представляющего его, а затем разместите его внутри viewDidLoad.

Если вы хотите воспроизводить видео с одного URL, вам не нужно использовать AVURLAsset. Вы должны использовать AVURLAsset, когда у вас есть количество видео или URL. (Но оба способа работают)

Ссылка: https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAsset_Class/index.html

Следующий метод работает нормально, если у вас есть один 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];
Другие вопросы по тегам