2014-12-19 35 views
14

Próbuję skonfigurować interfejs API iframe YouTube, aby odtwarzać wideo FullHD o niższej jakości. Moim celem jest oszczędzanie przepustowości na urządzeniach mobilnych i skrócenie czasu ładowania. Moja struktura HTML to klasyczny div gracza, a także debug div dla wiadomości.Zestaw interfejsów API iFrame serwisu YoutubeOdtwarzanie Jakości ignorowane na urządzeniu mobilnym

HTML

<div id="debug"></div> 

<div id="your_video_id"> 
    <div id="player"></div> 
</div> 

Próbowałem powołać setPlaybackQuality jak tylko gracz jest gotowy, aby uniknąć marnowania czasu użytkowników mobilnych w buforowania (jak zasugerowano w tym post). Wezwałem go również w stanach "BUFFERING" i "PLAYING". Gdy zmienia się jakość, zawartość debugowania jest aktualizowana o rzeczywistą jakość odtwarzania.

JAVASCRIPT

/* Trigger player ready */ 
function onPlayerReady(event) 
{ 
    player.setPlaybackQuality("small"); 
} 

/* Detect playback quality changes */ 
function onQualityChange(event) 
{ 
    document.getElementById("debug").innerHTML = event.data; 
} 

/* Trigger player events */ 
function onPlayerStateChange(event) 
{ 
    if (event.data == YT.PlayerState.BUFFERING) 
    { 
     player.setPlaybackQuality("small"); 
    } 

    if (event.data == YT.PlayerState.PLAYING) 
    { 
     player.setPlaybackQuality("small"); 
    } 
} 

Kod wydaje się działać na pulpicie (debug jest prawidłowo ustawiony na „małe”), ale jest ignorowane przez telefon (debug ustawionym na „duże”, sprawdzony z Androidem 4.2. 2). Czy jest na to jakieś rozwiązanie?

+2

+1. Mam ten sam problem, próbowałem go w serwisie Onady, onStateChange z BUFFERING i PLAYING, wszystkie osobno iw różnych kombinacjach - nic z tego nie działa. Złożyłem ten problem: https://code.google.com/p/gdata-issues/issues/detail?id=7191&thanks=7191&ts=1432253375 –

+0

Na iOS jakość wideo jest ustawiana bezpośrednio na podstawie rozmiaru odtwarzacza iFrame. Bez względu na to, jaki rozmiar ustawisz, odtwarzacz mobilny zawsze będzie nadpisywać Twoje ustawienia, aby dopasować to, co jest najbliższe rozmiarowi odtwarzacza. Jest to ogromny problem z odtwarzaczem pomocniczym, który YouTube zapewnia programistom iOS (który jest tak naprawdę tylko odtwarzaczem iFrame w widoku internetowym). YouTube twierdzi, że robi to celowo, aby uniknąć niepotrzebnego wykorzystania danych na urządzeniach mobilnych. – JAL

+0

@JAL: Hm. Tak więc, mam go w pobliżu określonego minimalnego rozmiaru - około 350 x 200. Czy nie powinien on próbować ustawić go na 240p? A skoro w rzeczywistości jest to 175 x 100 \ @ 2x, czy nie byłoby bliżej do 144p? Myślę, że jest to problem na stronie YT iFrame API, ponieważ zauważyłem też, że [na komputerze, który stara się obniżyć jakość, nie działa, ale dąży do wyższej jakości.] (Http://stackoverflow.com/questions/30468161/ loading-youtube-iframe-api-video-at-a-lower-quality) –

Odpowiedz

6

Obejście znalazłem jest stworzenie odtwarzacza bez videoId, nigdy zadzwonić setPlaybackQuality gdziekolwiek indziej, ale zadzwonić loadVideoById(videoId, 0, desiredQuality) wewnątrz programu obsługi onReady. Było to przestrzegane na urządzeniach z Androidem i iOS podczas testowania, dzwoniąc pod numer onPlaybackQualityChanged z poprawną jakością raz na Androida i na komputerze oraz dwa razy w systemie iOS, nigdy nie zmieniając jakości na nic wyższą lub niższą.

Niestety, jeśli przekażesz jakąś jakość, która nie jest dostępna w filmie, wymusi "medium". Bądź tego świadomy. Jest również mało prawdopodobne, że złamie jakąkolwiek lukę jakościową, którą API wykonuje na iOS, aby zapobiec nadmiernemu zużyciu danych w sieciach 3G/4G/LTE.

+0

Podążyłem za twoimi krokami, ale to nie działa dla mnie. Czy wiesz, czy zachowanie API zmieniło się od czasu odpowiedzi? – kakhkAtion

+0

Nie sprawdzałem ostatnio. Na jakiej platformie masz problemy i czy jesteś absolutnie pewny, że używasz loadVideoById (nie cueVideoById lub podobnego) z 3 argumentami, nigdy nie nazywając setPlaybackQuality, a wideo, które grasz, ma rzeczywiście jakość odtwarzania, którą próbujesz ustawić? Jaka jest jakość ustawienia? –

+0

Tak, używam loadVideoById. Próbuję Chrome na Androida i iOS. Bez względu na to, co robię, zawsze otrzymuję wysokiej jakości medium na moim iPhone 5 i duże na moim Nexusie 5. Dokładnie ten sam kod działa dobrze na przeglądarkach komputerowych i mogę zmienić jego jakość. – kakhkAtion