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 .