Avplayer иногда показывает черный экран, но звук в порядке

Я использую AVPlayer с AVPlayerViewController. Я играю видео после добавления водяного знака в видео. Иногда он работает нормально, но иногда показывает только черный экран, и в обоих случаях со звуком все в порядке.

vPlayer = [AVPlayer playerWithURL:_videoFilePath];
// create a player view controller
AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
controller.videoGravity=AVLayerVideoGravityResizeAspect;
controller.player = vPlayer;
[vPlayer seekToTime:kCMTimeZero];

// show the view controller
[self addChildViewController:controller];
[vPlayer play];
controller.view.frame =_imgForVidFrame.frame;
[self.view addSubview:controller.view];

person Deepak Chaudhary    schedule 07.10.2016    source источник
comment
это иос10? Вы пробовали бета-версию iOS10.1?   -  person Rhythmic Fistman    schedule 07.10.2016
comment
да, работаю на iOS10, на 10.1 не пробовал   -  person Deepak Chaudhary    schedule 07.10.2016
comment
@DeepakChaudhary ты нашел ответ?   -  person Pankaj Gupta    schedule 21.11.2016
comment
@PankajGupta не совсем так, но я внес некоторые изменения в тот же код, который лучше предыдущего: '// показываем контроллер представления controller.view.frame =_imgForVidFrame.frame; [самостоятельно addChildViewController:контроллер]; [self.view addSubview:controller.view]; [Воспроизведение через vPlayer];'   -  person Deepak Chaudhary    schedule 25.11.2016
comment
Я столкнулся с той же проблемой и написал об этом здесь . Сталкиваетесь ли вы с этой проблемой с локальными и/или удаленными видео?   -  person Viktor Gardart    schedule 21.12.2016
comment
@ViktorGardart Я работал с локальным видео, добавлял звук, который загружался по URL-адресу, затем объединялся с видео и воспроизводился. Теперь он работает нормально, но иногда показывает черный экран только на том устройстве, где мало памяти.   -  person Deepak Chaudhary    schedule 24.12.2016


Ответы (1)


Убедитесь, что _imgForVidFrame.frame каждый раз возвращает правильный кадр! Вы можете поставить точку останова на эту строку, чтобы проверить, возвращает ли она правильный размер или нет!

и ваша последняя строка должна быть [self.view addSubview:controller.view];, а не controller.view.frame =_imgForVidFrame.frame;, так что поменяйте местами!

Обновление:

то вы можете сделать что-то вроде ниже без AVPlayerViewController,

AVPlayer *player = [AVPlayer playerWithURL:_videoFilePath];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame = self.view.bounds;
[self.view.layer addSublayer:playerLayer];
[player play];

или вы можете представить AVPlayerViewController что-то вроде,

 AVPlayer *player = [AVPlayer playerWithURL:_videoFilePath];
 AVPlayerViewController *playerViewController = [AVPlayerViewController new];
 playerViewController.player = player;
 [self presentViewController:playerViewController animated:YES completion:nil];
person Ketan Parmar    schedule 07.10.2016
comment
Кадр правильный, потому что игрок виден в ожидаемой позиции. Я думаю, что есть проблема с avplayer, иногда он работает идеально. - person Deepak Chaudhary; 07.10.2016
comment
Я хочу видео в определенном кадре, но по этим я не могу установить кадры - person Deepak Chaudhary; 07.10.2016
comment
попробуйте установить желаемый кадр вместо playerLayer.frame = self.view.bounds; в первом решении!! - person Ketan Parmar; 07.10.2016