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

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

У меня есть требование, чтобы видео должно было играть в портретный, полный экран, пейзаж. Моя проблема заключается в том, как определить, что видео воспроизводит полноэкранный альбом или портрет. Я 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 чтобы определить, находитесь ли вы в пейзаже или на портрете.

  • Swift: UnsafeMutablePointer.deinitialize фатальная ошибка с отрицательным счетчиком при добавлении к массиву
  • Swift - Воспроизведение видео с iOS PHAsset
  • Что заставляет AVMutableComposition значительно увеличить размер видео? - iOS, Swift, AVFoundation
  • Воспроизведение видео на YouTube с помощью MPMoviePlayerController вместо UIWebView
  • Как не допустить, чтобы мой MPMoviePlayerController стал черным, когда вернулся из webView, содержащего видео YouTube iOS
  • Использование GPUImage с AVVideoCompositing
  • Где моя память AVPlayer и как мне ее вернуть?
  • Как настроить rect на использование собственного видеопроигрывателя при установке fullscreenmode на «exactFit» в Livecode?
  • Как играть в файл H264 Video с помощью VideoToolbox.framework в iOS 8?
  • Можно ли воспроизводить видео с помощью Avplayer в фоновом режиме?
  • Библиотека Sitecore Media не совместима с iOS?
  • Interesting Posts

    Как перезагрузить только раздел данных UICollectionView?

    Почему существуют две папки Cordova www?

    Ошибка iOS 5 JSON для таблицыView

    Проект Xcode: разные языки для разных целей

    iOS сохраняет состояние UIWebView?

    Как проверить, является ли устройство Ipad mini

    Как мне (или приостановить) приложение IP-приложения Flex 4.5 через код?

    Objective-C: можете ли вы проверить неинициализированный указатель на тип статического класса?

    На моей кнопке есть тень

    Как настроить передающую функцию, связанную с Head (HRTF) в OpenAL или Core Audio?

    Не удалось выполнить завершение кода автозаполнения кода Xcode 7.3.1

    Можем ли мы обнаружить, прошел ли пользователь через домашнюю кнопку или кнопку блокировки, не прослушивая уведомления darwin?

    Использование CALayer для выделения текста в UITextView, который охватывает несколько строк

    Передача данных между контроллерами просмотра в Swift

    Может ли использовать SegueWithIdentifier с AppDelegate?

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