1

Im пытается отобразить локальное записанное видео в AVPlayerLayer, который работает иногда. Я слышу звук из записанного видео, но не вижу видео. Иногда работают как видео, так и аудио, иногда только аудио.AVPlayerLayer показывает черный экран, но звук работает

Я пробовал как с AVPlayerLayer и AVPlayerViewController, но та же проблема возникает в обоих случаях. Так что это не из-за неправильной работы фреймов.

Пример кода AVPlayerViewController:

let player = AVPlayer(url: url) 
let playerController = AVPlayerViewController() 
playerController.player = player 

self.present(playerController, animated: true) { 
    player.play() 
} 

Пример кода AVPlayerLayer:

let asset = AVAsset(url: url) 
let item = AVPlayerItem(asset: asset) 

self.player = AVPlayer(playerItem: item) 
self.player?.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions(), context: nil) 
self.playerLayer = AVPlayerLayer(player: self.player!) 
self.playerLayer?.frame = imageView.bounds 
imageView.layer.addSublayer(self.playerLayer!) 

Редактировать 1:

При наблюдении статус игрока, ошибка является nil и статус является readyToPlay

Edit 2:

работает хорошо, если URL является маловероятной.

Edit 3:

Кажется работать, если я подожду пару секунд после того, как видео завершила экспорт. Может ли быть что-то иметь с файлом, не написанным на 100% файловой системой?

Редактировать 4: Video проблемы, в этом случае он играл в третий раз.

+0

Показать код экспорта. – matt

+0

Экспортный код можно найти здесь. http://pastebin.com/aiSvV6i8 –

+0

Итак, есть _multiple_ видео? – matt

ответ

1

Вот как я установил AVPlayerLayer с работающим видео (я думаю, что вам не хватает параметра videoGravity).

let bundle = Bundle.main 
let moviePath = bundle.path(forResource: "myVideo", ofType: "mp4") 
let moviePlayer = AVPlayer(url: URL(fileURLWithPath: moviePath!)) 

playerLayer = AVPlayerLayer(player: moviePlayer) 
playerLayer.frame = movieView.bounds 
playerLayer.videoGravity = AVLayerVideoGravityResizeAspect 
movieView.layer.addSublayer(playerLayer) 
playerLayer.player?.play() 
+0

Спасибо за ответ, но, как я уже сказал, он работает иногда. И всегда, если видео формирует удаленный URL. И поскольку это те же проблемы в AVPlayerViewController, я предполагаю, что это не из-за этого. –

Смежные вопросы