Приложение отправителя iOS для Google Cast Обзор MediaControl

Это вторая статья из серии из трех, где я покажу вам, как добавить управление мультимедиа, когда ваше приложение iOS имеет активный сеанс трансляции. Вы можете прочитать мою предыдущую статью о базовой интеграции для iOS Sender App от Google cast здесь. Я предполагаю, что вы прочитали предыдущую статью и у вас есть минимум кода, который может транслировать видео в Chrome Cast. Теперь, когда мы можем транслировать видео, мы можем показать большой и малый медиа-контроллер внутри нашего приложения, как это делает Netflix (добавление снимка экрана ниже).

Расширенный медиа-контроллер

Открыть расширенный медиа-контроллер в приложении-отправителе очень просто. Google Cast предоставляет простой метод, который можно использовать для открытия этого контроллера. Добавьте код ниже после строки, в которую вы загрузили запрос трансляции.

GCKCastContext.sharedInstance().presentDefaultExpandedMediaControls()

Таким образом, ваш блок кода будет выглядеть примерно так после того, как вы добавите медиа-контроллер.

Теперь транслируйте любое видео, и вы увидите расширенный медиа-контроллер, как на этом скриншоте. Это контроллер по умолчанию, предоставляемый Google Cast. Вы можете настроить этот контроллер в соответствии с вашими требованиями, обратившись к официальной документации.

Мини-медиа-контроллер

Согласно контрольному списку дизайна от Google Cast, приложение-отправитель должно обеспечивать постоянный контроль, известный как мини-контроллер, который должен появляться, когда пользователь уходит. Однако это полностью зависит от вашего приоритета / выбора, где вы хотите это показать или скрыть. Есть два способа добавить этот мини-контроллер мультимедиа.

  • Вариант 1. Позвольте платформе Cast управлять компоновкой мини-контроллера, обернув существующий контроллер представления его собственным контроллером представления. Для этого вам необходимо подключить мини-контроллер представления мультимедиа к вашему Контроллер навигации.
  • Вариант 2. Управляйте компоновкой виджета мини-контроллера самостоятельно, добавляя его к существующему контроллеру представления, предоставляя вложенное представление в раскадровке. Выбрав этот вариант, вы можете добавить мини-контроллер мультимедиа к любому существующего контроллера представления, добавив его как subview.

Вариант 1: переход к существующему контроллеру представления

Внутри своего делегата приложения получите экземпляр контроллера навигации (не контроллер представления) и позвольте SDK Google Cast взять на себя все функции по подключению мини-контроллера мультимедиа.

let appStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = appStoryboard.instantiateViewController(withIdentifier: "MainNavigation")
let castContainerVC =         GCKCastContext.sharedInstance().createCastContainerController(for: navigationController)
  castContainerVC.miniMediaControlsItemEnabled = true
  window = UIWindow(frame: UIScreen.main.bounds)
  window!.rootViewController = castContainerVC
  window!.makeKeyAndVisible()

Теперь этот код выглядит очень простым и легким, но что делать, если вы не хотите добавлять мини-медиа в свою основную навигацию. Что делать, если у вас несколько раскадровок и ваш контроллер навигации другой. Что делать, если у вас есть TabView. Этот поток немного сложен, и вы, конечно, не захотите добавлять его непосредственно в основную навигацию.

Варианты 2: Добавить в качестве подзаголовка

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

private var miniMediaControlsViewController: GCKUIMiniMediaControlsViewController! 
var mediaView: UIView!

и внутри viewDidLoad программно добавьте этот mediaView

mediaView = UIView(frame: CGRect(x: 0, y: self.view.frame.height - 70 - (UIApplication.shared.keyWindow?.safeAreaInsets.bottom)!, width: self.view.frame.width, height: 70))
self.view.addSubview(mediaView!)

Теперь пора создать мини-контроллер представления мультимедиа и добавить его к существующему контроллеру представления и установить его как представление контейнера в существующий контроллер представления.

let castContext = GCKCastContext.sharedInstance()
sessionManager.add(self)
miniMediaControlsViewController = castContext.createMiniMediaControlsViewController()
miniMediaControlsViewController.delegate = self
installViewController(miniMediaControlsViewController, inContainerView: mediaView!)
func installViewController(_ viewController: UIViewController?, inContainerView containerView: UIView) {
  if let viewController = viewController {
    addChild(viewController)
    viewController.view.frame = containerView.bounds
    containerView.addSubview(viewController.view)
    viewController.didMove(toParent: self)
  }
}

Теперь ваш блок кода будет выглядеть примерно так, как показано на скриншоте ниже.

Вы можете контролировать видимость базы мини-медиа-контроллера по своему усмотрению. Метод updateControlBarVisibility используется для обеспечения видимости контроллера. Теперь запустите приложение и начните трансляцию. Это даст вам мини-медиа, как показано на скриншоте ниже.

Хорошо !! Итак, теперь ваше приложение полностью соответствует требованиям контрольного списка Google Cast для приложения-отправителя. Вы можете настроить пользовательский интерфейс контроллера в соответствии с вашими потребностями при изучении Google Cast SDK.

На этом я заканчиваю статью и добавляю ссылку Github этого проекта. Вы можете клонировать его и поиграть, изменив код.