youtube-ios-player-helper
to biblioteka typu open source, która ułatwia umieszczanie odtwarzacza iframe YouTube w aplikacji na iOS. Biblioteka tworzy WebView
i most między kodem celu C a kodem JavaScript odtwarzacza YouTube, pozwalając aplikacji iOS na kontrolowanie odtwarzacza YouTube. Z tego artykułu dowiesz się, jak zainstalować bibliotekę i zacząć korzystać z niej w aplikacji na iOS.
Montaż
W tym artykule zakładamy, że masz utworzony nowy projekt aplikacji na iOS z pojedynczym widokiem kierowany na najnowszą wersję iOS i że podczas tworzenia projektu dodajesz te pliki:
Main.storyboard
ViewController.h
ViewController.m
Możesz zainstalować bibliotekę za pomocą CocoaPods lub przez skopiowanie biblioteki i plików źródłowych ze strony projektu na GitHubie.
- Biblioteka jest dostępna do zainstalowania za pomocą CocoaPods. Pliki biblioteki i źródłowe są też dostępne na stronie GitHub Twojego projektu i można je skopiować do istniejącego projektu.
Instalowanie biblioteki za pomocą CocoaPods
Jeśli w projekcie używasz CocoaPods, dodaj poniższy wiersz do pliku Podfile, aby zainstalować bibliotekę.
W tym wierszu zastąp x.y.z
najnowszą wersją poda, która zostanie zidentyfikowana na stronie projektu na GitHubie.
pod "youtube-ios-player-helper", "~> x.y.z"
W wierszu poleceń wpisz pod install
, aby zaktualizować obszar roboczy zależności.
Wskazówka: jeśli używasz CocoaPods, musisz otworzyć plik .xcworkspace
w Xcode, a nie .xcodeproj
.
Więcej informacji znajdziesz w samouczku CocoaPods.
Ręczne instalowanie biblioteki
Aby zainstalować bibliotekę pomocniczą ręcznie, pobierz źródło za pomocą linku do pobrania z GitHuba lub skopiuj repozytorium. Gdy już będziesz mieć lokalną kopię kodu, wykonaj te czynności:
Otwórz przykładowy projekt w Xcode lub Finderze.
Wybierz
YTPlayerView.h
,YTPlayerView.m
i folder Zasoby. Jeśli otworzysz obszar roboczy w Xcode, znajdziesz go w sekcjach Pods -> Development Pods -> YouTube-Player-iOS-Helper i Pods -> Development Pods -> YouTube-Player-iOS-Helper -> Zasoby. W Finderze znajdują się one w katalogu głównym projektu w katalogach Classes i Assets.Przeciągnij te pliki i foldery do projektu. Upewnij się, że opcja Kopiuj elementy do folderu grupy docelowej jest zaznaczona. Podczas przeciągania folderu Zasoby sprawdź, czy jest zaznaczona opcja Utwórz odwołania do folderów dla wszystkich dodanych folderów.
Biblioteka powinna być teraz zainstalowana.
Dodaj YTPlayerView
za pomocą Kreatora interfejsów lub scenorysu
Aby dodać element YTPlayerView
za pomocą konstruktora interfejsu lub scenorysu:
-
Przeciągnij instancję
UIView
do widoku. -
Wybierz Inspektora tożsamości i zmień klasę widoku na
YTPlayerView
. -
Otwórz plik
ViewController.h
i dodaj ten nagłówek:#import “YTPlayerView.h”
Dodaj też tę właściwość:
@property(nonatomic, strong) IBOutlet YTPlayerView *playerView;
-
W Kreatorze interfejsu utwórz połączenie z elementu View zdefiniowanego w poprzednim kroku z właściwością
playerView
Controller. -
Teraz otwórz
ViewController.m
i dodaj ten kod na końcu metodyviewDidLoad
:[self.playerView loadWithVideoId:@"M7lc1UVf-VE"];
skompilować i uruchomić aplikację. Po wczytaniu miniatury filmu dotknij miniatury, aby włączyć odtwarzacz wideo na pełnym ekranie.
Sterowanie odtwarzaniem filmów
Metoda ViewController::loadWithVideoId:
ma wariant loadWithVideoId:playerVars:
, który pozwala deweloperom przekazywać do widoku dodatkowe zmienne odtwarzacza. Zmienne te odpowiadają parametrom odtwarzacza w interfejsie IFrame Player API. Parametr playsinline
umożliwia odtwarzanie filmu bezpośrednio w widoku, a nie w trybie pełnoekranowym. Gdy film jest odtwarzany w treści, aplikacja zawierająca aplikację na iOS może automatycznie sterować odtwarzaniem.
Zastąp wywołanie loadWithVideoId:
tym kodem:
NSDictionary *playerVars = @{ @"playsinline" : @1, }; [self.playerView loadWithVideoId:@"M7lc1UVf-VE" playerVars:playerVars];
Otwórz scenorys lub Kreator interfejsu. Przeciągnij 2 przyciski do widoku, przypisując mu etykietę Odtwórz i Zatrzymaj. Otwórz ViewController.h
i dodaj te metody, które zostaną zmapowane na przyciski:
- (IBAction)playVideo:(id)sender; - (IBAction)stopVideo:(id)sender;
Teraz otwórz ViewController.m
i określ te 2 funkcje:
- (IBAction)playVideo:(id)sender { [self.playerView playVideo]; } - (IBAction)stopVideo:(id)sender { [self.playerView stopVideo]; }
Większość funkcji interfejsu IFrame Player API ma swoje odpowiedniki w celu C, ale niektóre nazwy mogą się nieznacznie różnić od wytycznych dotyczących kodowania Goal-C. Wyjątkami są metody sterujące głośnością filmu, ponieważ te funkcje są kontrolowane przez sprzęt telefoniczny lub mają wbudowane wystąpienia UIView
przeznaczone do tego celu, takie jak MPVolumeView
.
Otwórz scenorys lub konstruktor interfejsu i przeciągnij go, by połączyć przyciski Odtwórz i Zatrzymaj z metodami playVideo:
i stopVideo:
.
Teraz skompiluj i uruchom aplikację. Po wczytaniu miniatury filmu powinno być możliwe odtworzenie i zatrzymanie filmu za pomocą elementów sterujących odtwarzaczem oraz elementów sterujących odtwarzaczem.
Obsługa wywołań zwrotnych odtwarzacza
Może być przydatna przy automatycznym obsłudze zdarzeń odtwarzania, takich jak zmiany stanu odtwarzania czy błędy odtwarzania. W interfejsie JavaScript API służy do tego detektory zdarzeń. W języku celu C jest to realizowane za pomocą przekazania dostępu.
Poniższy kod pokazuje, jak zaktualizować deklarację interfejsu w ViewController.h
, aby klasa była zgodna z protokołem przekazywania. Zmień deklarację interfejsu ViewController.h
w ten sposób:
@interface ViewController : UIViewController<YTPlayerViewDelegate>
YTPlayerViewDelegate
to protokół obsługi zdarzeń odtwarzania w odtwarzaczu.
Aby można było zaktualizować ViewController.m
w celu obsługi niektórych zdarzeń, musisz najpierw skonfigurować instancję ViewController
jako przedstawiciela instancji YTPlayerView
. Aby wprowadzić tę zmianę, dodaj następujący wiersz do metody viewDidLoad
w ViewController.h
.
self.playerView.delegate = self;
Teraz dodaj do metody ViewController.m
tę metodę:
- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state { switch (state) { case kYTPlayerStatePlaying: NSLog(@"Started playback"); break; case kYTPlayerStatePaused: NSLog(@"Paused playback"); break; default: break; } }
skompilować i uruchomić aplikację. Śledź dane wyjściowe logu w Xcode, gdy zmienia się stan odtwarzacza. Po włączeniu lub zakończeniu odtwarzania filmu powinny pojawić się aktualizacje.
Dla wygody i czytelności biblioteka zawiera stałe wartości zaczynające się od prefiksu kYT*
. Pełną listę tych stałych znajdziesz na YTPlayerView.m
.
Sprawdzone metody i ograniczenia
Biblioteka jest oparta na API IFrame Player przez utworzenie WebView
i renderowanie kodu HTML oraz JavaScript wymaganego dla podstawowego odtwarzacza. Zadaniem biblioteki jest stworzenie jak najprostszej w użyciu i połączonych metod, których programiści często muszą zapisywać w pakietach. Pamiętaj o kilku ograniczeniach:
- Biblioteka nie obsługuje jednoczesnego odtwarzania filmów w wielu instancjach
YTPlayerView
. Jeśli aplikacja ma wiele wystąpieńYTPlayerView
, zaleca się wstrzymanie lub zatrzymanie odtwarzania w dowolnej z instancji, zanim rozpocznie się odtwarzanie w innej instancji. W przykładowej aplikacji dołączonej do projektu elementy ViewViewler używająNSNotificationCenter
do wysyłania powiadomień o rozpoczęciu odtwarzania. Inne kontrolery ViewControl otrzymają powiadomienia i wstrzymają odtwarzanie w swoich instancjachYTPlayerView
. - Jeśli to możliwe, ponownie wykorzystaj istniejące, wczytane instancje
YTPlayerView
. Gdy w widoku danych trzeba zmienić film, nie twórz nowej instancjiUIView
ani nowej instancjiYTPlayerView
ani wywołaj właściwościloadVideoId:
lubloadPlaylistId:
. Zamiast tego użyj rodziny funkcjicueVideoById:startSeconds:
, które nie ładują ponownieWebView
. Występuje znaczne opóźnienie podczas wczytywania całego odtwarzacza IFrame. - Ten odtwarzacz nie może odtwarzać filmów prywatnych, ale może odtwarzać filmy niepubliczne. Ponieważ ta biblioteka otacza istniejący odtwarzacz iframe, jego działanie powinno być niemal takie samo jak w przypadku odtwarzacza umieszczonego na stronie internetowej w przeglądarce mobilnej.
Opublikowane treści
Ponieważ jest to projekt typu open source, należy wprowadzać poprawki i ulepszenia w gałęzi głównej projektu w GitHubie.