youtube-ios-player-helper — это библиотека с открытым исходным кодом, которая поможет вам встроить проигрыватель YouTube iframe в приложение iOS. Библиотека создает WebView и мост между кодом Objective-C вашего приложения и кодом JavaScript проигрывателя YouTube, тем самым позволяя приложению iOS управлять проигрывателем YouTube. В этой статье описываются шаги по установке библиотеки и началу ее использования из приложения iOS.
Монтаж
В этой статье предполагается, что вы создали новый проект приложения Single View для iOS, предназначенный для последней версии iOS, и добавили следующие файлы при создании проекта:
-  Main.storyboard
-  ViewController.h
-  ViewController.m
Вы можете установить библиотеку через CocoaPods или скопировав библиотеку и исходные файлы со страницы проекта на GitHub .
- Библиотека доступна для установки через CocoaPods. Кроме того, библиотека и исходные файлы доступны на странице проекта GitHub и могут быть скопированы в существующий проект.
Установить библиотеку через CocoaPods
 Если ваш проект использует CocoaPods, добавьте строку ниже в свой подфайл, чтобы установить библиотеку. В этой строке замените xyz последней версией модуля, которая будет указана на странице проекта GitHub.
pod "youtube-ios-player-helper", "~> x.y.z"
 В командной строке введите pod install , чтобы обновить рабочую область зависимостями.
 Совет: помните, что при использовании CocoaPods вы должны открыть файл .xcworkspace в Xcode, а не файл .xcodeproj .
Ознакомьтесь с учебным пособием CocoaPods , чтобы узнать больше.
Вручную установить библиотеку
Чтобы установить вспомогательную библиотеку вручную, либо загрузите исходный код по ссылке для скачивания на GitHub , либо клонируйте репозиторий. Получив локальную копию кода, выполните следующие действия:
- Откройте пример проекта в Xcode или Finder. 
- Выберите - YTPlayerView.h,- YTPlayerView.mи папку Assets . Если вы откроете рабочую область в Xcode, они будут доступны в разделе Модули -> Модули разработки -> YouTube-Player-iOS-Helper и Модули -> Модули разработки -> YouTube-Player-iOS-Helper -> Ресурсы . В Finder они доступны в корневом каталоге проекта в каталогах Classes и Assets .
- Перетащите эти файлы и папки в свой проект. Убедитесь, что установлен флажок Копировать элементы в папку целевой группы . При перетаскивании папки «Активы» убедитесь, что установлен флажок «Создать ссылки на папки для любых добавленных папок» . 
Теперь библиотека должна быть установлена.
Добавьте YTPlayerView через конструктор интерфейсов или раскадровку.
 Чтобы добавить YTPlayerView через Interface Builder или Storyboard:
- Перетащите экземпляр - UIViewв свой вид.
- Выберите Identity Inspector и измените класс представления на - YTPlayerView.
- Откройте - ViewController.hи добавьте следующий заголовок:- #import “YTPlayerView.h” - Также добавьте следующее свойство: - @property(nonatomic, strong) IBOutlet YTPlayerView *playerView; 
- В Interface Builder создайте соединение из элемента View, который вы определили на предыдущем шаге, со свойством - playerViewконтроллера представления.
- Теперь откройте - ViewController.mи добавьте следующий код в конец вашего метода- viewDidLoad:- [self.playerView loadWithVideoId:@"M7lc1UVf-VE"]; 
Создайте и запустите приложение. Когда миниатюра видео загрузится, коснитесь миниатюры видео, чтобы запустить полноэкранный видеоплеер.
Управление воспроизведением видео
 Метод ViewController::loadWithVideoId: имеет вариант loadWithVideoId:playerVars: , который позволяет разработчикам передавать в представление дополнительные переменные проигрывателя. Эти переменные проигрывателя соответствуют параметрам проигрывателя в IFrame Player API . Параметр playsinline позволяет воспроизводить видео непосредственно в представлении, а не в полноэкранном режиме. Когда видео воспроизводится как встроенное, содержащее его приложение iOS может программно управлять воспроизведением.
 Замените вызов loadWithVideoId: на этот код:
NSDictionary *playerVars = @{
  @"playsinline" : @1,
};
[self.playerView loadWithVideoId:@"M7lc1UVf-VE" playerVars:playerVars]; Откройте раскадровку или интерфейсный конструктор. Перетащите две кнопки на свой вид, пометив их Play и Stop . Откройте ViewController.h и добавьте эти методы, которые будут сопоставлены с кнопками:
- (IBAction)playVideo:(id)sender; - (IBAction)stopVideo:(id)sender;
 Теперь откройте ViewController.m и определите эти две функции:
- (IBAction)playVideo:(id)sender {
  [self.playerView playVideo];
}
- (IBAction)stopVideo:(id)sender {
  [self.playerView stopVideo];
} Большинство функций API-интерфейса IFrame Player имеют эквиваленты в Objective-C, хотя некоторые названия могут немного отличаться, чтобы более точно соответствовать рекомендациям по написанию кода в Objective-C. Заметными исключениями являются методы, управляющие громкостью видео, поскольку они контролируются аппаратным обеспечением телефона или встроенными экземплярами UIView , разработанными для этой цели, такими как MPVolumeView .
 Откройте раскадровку или интерфейсный конструктор и перетащите, удерживая нажатой клавишу Control, чтобы соединить кнопки «Воспроизвести » и «Стоп» с методами playVideo: и stopVideo:
Теперь соберите и запустите приложение. После загрузки миниатюры видео вы сможете воспроизводить и останавливать видео, используя собственные элементы управления в дополнение к элементам управления проигрывателя.
Обрабатывать обратные вызовы игроков
Может быть полезно программно обрабатывать события воспроизведения, такие как изменения состояния воспроизведения и ошибки воспроизведения. В JavaScript API это делается с помощью прослушивателей событий . В Objective-C это делается с помощью делегата .
 В следующем коде показано, как обновить объявление интерфейса в ViewController.h , чтобы класс соответствовал протоколу делегата. Измените объявление интерфейса ViewController.h следующим образом:
@interface ViewController : UIViewController<YTPlayerViewDelegate>
 YTPlayerViewDelegate — это протокол для обработки событий воспроизведения в плеере. Чтобы обновить ViewController.m для обработки некоторых событий, сначала необходимо установить экземпляр ViewController в качестве делегата экземпляра YTPlayerView . Чтобы внести это изменение, добавьте следующую строку в метод viewDidLoad в ViewController.h .
self.playerView.delegate = self;
 Теперь добавьте в ViewController.m следующий метод:
- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state {
  switch (state) {
    case kYTPlayerStatePlaying:
      NSLog(@"Started playback");
      break;
    case kYTPlayerStatePaused:
      NSLog(@"Paused playback");
      break;
    default:
      break;
  }
}Соберите и запустите приложение. Наблюдайте за выводом журнала в Xcode по мере изменения состояния проигрывателя. Вы должны видеть обновления, когда видео воспроизводится или останавливается.
 Библиотека предоставляет константы, начинающиеся с префикса kYT* , для удобства и удобочитаемости. Полный список этих констант см. в YTPlayerView.m . 
Лучшие практики и ограничения
 Библиотека строится на основе API-интерфейса IFrame Player, создавая WebView и отображая HTML и JavaScript, необходимые для базового проигрывателя. Цель библиотеки — сделать ее максимально простой в использовании, объединяя методы, которые разработчикам часто приходится записывать в пакет. Следует отметить несколько ограничений:
-  Библиотека не поддерживает одновременное воспроизведение видео в нескольких экземплярах YTPlayerView. Если ваше приложение имеет несколько экземпляровYTPlayerView, рекомендуется приостановить или остановить воспроизведение в любых существующих экземплярах, прежде чем запускать воспроизведение в другом экземпляре. В примерном приложении, которое поставляется с проектом, ViewControllers используютNSNotificationCenterдля отправки уведомлений о начале воспроизведения. Другие контроллеры ViewController получают уведомление и приостанавливают воспроизведение в своих экземплярахYTPlayerView.
-  По возможности повторно используйте существующие загруженные экземпляры YTPlayerView. Когда видео необходимо изменить в представлении, не создавайте новый экземплярUIViewили новый экземплярYTPlayerViewи не вызывайте ниloadVideoId:ниloadPlaylistId:. Вместо этого используйте семейство функцийcueVideoById:startSeconds:которые не перезагружаютWebView. Заметна задержка при загрузке всего проигрывателя IFrame.
- Этот проигрыватель не может воспроизводить частные видео, но может воспроизводить видео, не включенные в список . Поскольку эта библиотека является оболочкой для существующего проигрывателя iframe, поведение проигрывателя должно быть почти таким же, как у проигрывателя, встроенного в веб-страницу в мобильном браузере.
Взносы
Поскольку это проект с открытым исходным кодом, отправьте исправления и улучшения в главную ветку проекта GitHub .