Обнаружение воспроизведения видео в полноэкранном режиме в портретном или альбомном режиме

Я занимался этим более двух дней. Я не мог получить какое-либо решение, пожалуйста.

У меня есть требование, чтобы видео должно было играть в портретный, полный экран, пейзаж. Моя проблема заключается в том, как определить, что видео воспроизводит полноэкранный альбом или портрет. Я viewWillTransitionToSize метод viewWillTransitionToSize . Но AVPlayer имеет полноэкранную кнопку со стрелкой. Как я могу определить, что пользователь нажал эту опцию.

Второе требование, после завершения видео, создать представление поверх воспроизведения видеовызовов или следующей или предыдущей опции.

Это мой код;

  if videoCellVal == nil { videoCellVal = videoCell comPlayerControl = AVPlayerViewController() if let player = comPlayerControl { let videoURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/"+selectedSubmission.transcodeRefId+"/format/applehttp/protocol/http/a.m3u8" let playerItem = AVPlayerItem(URL: NSURL(string: videoURL)! ) commmentPlayer = AVPlayer(playerItem: playerItem) player.player = commmentPlayer player.view.frame = videoCell.frame player.view.sizeToFit() player.showsPlaybackControls = true NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem) videoCell.addSubview(player.view) } } func playerDidFinishPlaying(note: NSNotification) { print("Video Finished") let DynamicView=UIView(frame: CGRectMake(100, 200, 100, 100)) DynamicView.backgroundColor=UIColor.greenColor() DynamicView.layer.cornerRadius=25 DynamicView.layer.borderWidth=2 DynamicView.bringSubviewToFront(self.view) self.view.addSubview(DynamicView) } 

введите описание изображения здесь

2 Solutions collect form web for “Обнаружение воспроизведения видео в полноэкранном режиме в портретном или альбомном режиме”

Для обнаружения изменения полного экрана или размера видео вы можете использовать KVO для AVPlayerViewController, код может выглядеть следующим образом:

 [comPlayerControl .addObserver(self, forKeyPath:"videoBounds" , options: NSKeyValueObservingOptions.New, context: nil)] override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { print("KeyPath \(keyPath)") if keyPath == "videoBounds" { print("New Video Bounds \(change)") } } 

В словаре change вы можете проверить изменение в изменении видео рамки / границ

Для вращения, как вы упомянули, вам может UIDeviceOrientationDidChangeNotification уведомление viewWillTransitionToSize или UIDeviceOrientationDidChangeNotification или вы можете проверить текущую ориентацию с помощью UIDevice.currentDevice().orientation поскольку я не нашел никакого способа, который мог бы проверить изменение текущего видео

Тем не менее, если вам необходимо определить ориентацию видео, вы можете проверить эту ссылку: https://stackoverflow.com/a/25833399/4557505 и другой ответ в этой ссылке

Для повторения видео вы можете установить время в ноль, как это в вашем коде:

 func playerDidFinishPlaying(notification: NSNotification) { if let item = notification.object as? AVPlayerItem { item.seekToTime(kCMTimeZero) //you may directly play the video or can do further processing } } 

для воспроизведения элемента в очереди в конце элемента, который вы можете попробовать с помощью commmentQueuePlayer.advanceToNextItem()

Вы можете попробовать поставить повтор, следующую, предыдущую кнопку в contentOverlayView

 let topView = UIView(frame: CGRectMake(0,0, comPlayerControl.view.bounds.width,44)) topView.backgroundColor = UIColor ( red: 0.5, green: 0.5, blue: 0.5, alpha: 0.379 ) let btnNext = UIButton(frame:CGRectMake(0,0,80,44)) btnNext.setTitle("Next", forState:.Normal) btnNext.addTarget(self, action:"playNext", forControlEvents:.TouchUpInside) btnNext.userInteractionEnabled = true btnNext.enabled = true topView.addSubview(btnNext) comPlayerControl.contentOverlayView?.addSubview(topView) 

Обновить

Для observeValueForKeyPath вы можете попробовать что-то вроде этого

 var avWidth:CGFloat = 0 var avHeight:CGFloat = 0 override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { if keyPath == "videoBounds" { let rect = change!["new"]! as! NSValue if let newrect = rect.CGRectValue() as CGRect? { if newrect.width > 0 || newrect.height > 0 { if avWidth > 0 || avHeight > 0 { if newrect.width > avWidth || newrect.height > avHeight { print("Full Screen") } else if newrect.width < avWidth || newrect.height < avHeight { print("Normal screen") } else { } } avWidth = newrect.width avHeight = newrect.height } } } } 

если вы посмотрите на AVPlayerItem AVPlayer тогда у него есть параметр videoComposition который имеет renderSize – вы можете изучить width и height renderSize чтобы определить, находитесь ли вы в пейзаже или на портрете.

  • Сжатие ios видео с AVSession
  • iOS 10 Webkit Воспроизведение нескольких видеороликов Inline
  • Запись, сохранение и / или конвертирование видео в формате mp4?
  • CVOpenGLESTextureCacheCreateTextureFromImage vs glTexImage2D
  • Загрузка видео в Facebook с использованием FB SDK на iOS, удаление ориентации. Как это исправить?
  • UIImagePickerController: получение изображения с видео
  • autoplay = 1 не работает для <iframe> при воспроизведении видео на мобильных устройствах
  • Записывайте видео автоматически в течение 15 секунд и сохраняйте его в каталоге
  • Синхронизация видео с анимацией openGL
  • 3D.js видео текстуры в ios воспроизводить в отдельно запущенном игроке - идеи?
  • AVFoundation Vs VideoToolbox - Аппаратное кодирование
  • Interesting Posts

    быстрое различие iOS между: и ()

    NSArray и быстрое перечисление, всегда идут в порядке индекса?

    iOS – как пересылать штрихи к основному uiview

    Создание статической библиотеки и добавление ее в проект

    Как TestFlightApp знает, какое устройство я использую через Интернет?

    performSegueWithIdentifier не инициирует Segue

    Невозможно выполнить запрос на основе идентификатора пользователя в Cloudkit

    Каков наилучший / простой способ создания макета типа «раскладка» в iOS

    iPhone X: используется некорректная ориентация экрана запуска

    Правильное использование intrinsicContentSize и sizeThatFits: в подклассе UIView с автозапуском

    Добавление опции «Открыть в …» для приложения iOS

    Поддельная длительная экспозиция на iOS

    Как я могу предотвратить рождение ребенка из SKSpriteNode со своим родителем?

    Может ли устройство iOS действовать как iBeacon, слушая другие iBeacons?

    Подождите, пока многие асинхронные вызовы будут выполнять обратный вызов

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.