2014-12-19 86 views
14

我試圖設置YouTube iframe API播放低質量的FullHD視頻。我的目標是節省移動設備的帶寬並縮短加載時間。我的HTML結構是古典播放器div,加上消息的調試div。Youtube iFrame API setPlaybackQuality在移動設備上被忽略

HTML

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

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

我試圖儘快調用setPlaybackQuality爲玩家準備好,以避免移動用戶在緩衝浪費時間(如本post建議)。我也在「BUFFERING」和「PLAYING」狀態中調用它。質量改變時,調試內容會以實際播放質量進行更新。

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"); 
    } 
} 

的代碼似乎在桌面上工作(調試正確設置爲「小」),但它在移動(調試設置爲「大」,與Android 4.2測試忽略。 2)。有沒有解決方案?

+2

+1。我遇到了同樣的問題,嘗試了onReady,onStateChange與BUFFERING和PLAYING,所有單獨和各種組合 - 都不起作用。我提出了此問題:https://code.google.com/p/gdata-issues/issues/detail?id=7191&thanks=7191&ts=1432253375 – 2015-05-22 00:11:56

+0

在iOS上,視頻質量直接根據iFrame播放器的大小設置。因此,無論您設置了多大尺寸,移動播放器都會覆蓋您的設置,以匹配最接近尺寸的任何尺寸。對於iOS開發者(這實際上只是網頁瀏覽中的iFrame播放器)提供的玩家幫手,這是一個巨大的問題。 YouTube聲稱這樣做是爲了避免在手機上使用不必要的數據。 – JAL 2015-05-26 20:07:22

+0

@JAL:嗯。那麼,我已經在規定的最小尺寸附近 - 約350 x 200.它不應該試圖將其設置爲240p?而且因爲它實際上是175 x 100 \ @ 2x,難道不會更接近144p嗎?我認爲這是YT iFrame API方面的一個問題,因爲我也注意到[在桌面上尋求降低質量不起作用,但尋求更高質量。](http://stackoverflow.com/questions/30468161/ loading-youtube-iframe-api-video-at-a-quality-quality) – 2015-05-26 21:27:08

回答

6

我找到的解決方法是,沒有videoId創建的球員,永遠不會調用setPlaybackQuality其他地方,但撥打loadVideoById(videoId, 0, desiredQuality)onReady處理器內部。這在測試時在Android和iOS上都得到了尊重,在Android和桌面上撥打onPlaybackQualityChanged時撥打的號碼質量正確一次,在iOS上撥打電話號碼爲兩次,絕不會將質量更改爲更高或更低。

不幸的是,如果您傳遞視頻中沒有的任何質量,它將強制「中等」。請注意這一點。此外,這不太可能破壞API在iOS上執行的任何質量上限,以防止3G/4G/LTE網絡上無關的數據使用。

+0

我按照你的步驟,但它不適合我。你知道自你的答案後API的行爲是否已經改變? – kakhkAtion 2016-02-04 22:10:56

+0

最近沒有檢查過。哪個平臺有問題,並且您確定您正在使用loadVideoById(而不是cueVideoById或類似的)3個參數,從不調用setPlaybackQuality,並且您正在播放的視頻實際上具有您嘗試設置的播放質量?它實際上設置了哪個質量? – 2016-02-07 15:47:39

+0

是的,我正在使用loadVideoById。我正在Android和iOS上嘗試Chrome。不管我做什麼,我總是在我的iPhone 5上獲得高質量的媒體,而在我的Nexus 5上獲得高質量的媒體。完全相同的代碼在桌面瀏覽器上工作得很好,我可以改變質量。 – kakhkAtion 2016-02-08 02:22:47

相關問題