2015-06-01 33 views
1

我想要使用webview和youtube iframe api在Android設備上播放YouTube視頻。當在4.2設備上測試它時,它確實在4.2.2 Nexus 4上工作。但是當我在Sony Xpedia L上嘗試它時,它顯示緩衝狀態,但視頻從未加載(附帶屏幕截圖)。有什麼可以解決這個問題?有什麼建議麼...?!?!Youtube iframe無法在Android中加載

When Clicking on Play Button

When trying to seek/jump to a point using Javascript

我的代碼如下..

Java代碼

wvVideo = (WebView)findViewById(R.id.wvVideo); 
wvVideo.setWebChromeClient(new WebChromeClient()); 
WebSettings webSettings = wvVideo.getSettings(); 
webSettings.setJavaScriptEnabled(true); 
webSettings.setMediaPlaybackRequiresUserGesture(false); 
wvVideo.addJavascriptInterface(new WebAppInterface(this), "Android"); 
wvVideo.loadUrl("http://test.com/iframeYouTube.html?videoid="+videoURL); 
wvVideo.loadUrl("javascript:playVideo();"); 

XML

<WebView 
android:id="@+id/wvVideo" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_centerInParent="true" 
android:background="#212121"></WebView> 

HTML

<!DOCTYPE html> 
<html style="height:100%;margin:0;padding:0;width:100%"> 
<head> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
</head> 
    <body style="background:#212121;height:100%;margin:0;padding:0"> 

<!-- 1. The <iframe> (and video player) will replace this <div> tag. --> 
<div id="player" style="margin:0;padding:0"></div> 

<script> 

    var Query = function() { 

    var query_string = {}; 
    var query = window.location.search.substring(1); 
    var vars = query.split("&"); 
    for (var i=0;i<vars.length;i++) { 
    var pair = vars[i].split("="); 

    if (typeof query_string[pair[0]] === "undefined") { 
     query_string[pair[0]] = pair[1]; 

    } else if (typeof query_string[pair[0]] === "string") { 
     var arr = [ query_string[pair[0]], pair[1] ]; 
     query_string[pair[0]] = arr; 

    } else { 
     query_string[pair[0]].push(pair[1]); 
    } 
    } 

    return query_string; 
    }(); 

    var tag = document.createElement('script'); 

    tag.src = "https://www.youtube.com/iframe_api"; 
    var firstScriptTag = document.getElementsByTagName('script')[0]; 
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

    var player; 
    function onYouTubeIframeAPIReady() { 
    player = new YT.Player('player', { 
    height:'100%',width:'100%', 

    videoId: Query.videoid, 
    playerVars: { 'autoplay': 0, 'controls': 0, 'showinfo':0, 'modestbranding':1}, 
    events: { 

    'onReady': onPlayerReady, 
    'onStateChange': onPlayerStateChange 

    } 
    }); 


    } 

    function onPlayerReady(event) { 
    cueCheck(); 
    timerFunction(); 
    videoLength(); 
    } 

    var done = false; 

    function onPlayerStateChange(event) { 
    Android.playState(event.data+""); 

    if (event.data == YT.PlayerState.PLAYING && !done) { 
     done = true; 
    } 
    } 

    function cueCheck() 
    { 
    Android.playState("cued"); 
    } 

    function timerFunction(){ 
    console.log("function"); 
    Android.updateTimer(player.getCurrentTime()+""); 
    setTimeout(timerFunction, 20); 
} 

function videoLength(){ 
    Android.getVideoLength(player.getDuration()+""); 
} 

    function seekTo(val) { 
    player.seekTo(val); 
    // player.playVideo(); 
    } 

    function pauseVideo(){ 
    player.pauseVideo() 
    } 

    function playVideo(){ 
    player.playVideo() 
    } 



    </script> 

    </body> 
</html> 
+0

時,谷歌瀏覽器在同一手機打開同樣的視頻網址工作正常!它在應用程序中,它有一個問題.. –

回答

0
String html = getHTML(url); 
MainActivity.webview.getSettings().setJavaScriptEnabled(true); 
MainActivity.webview.getSettings().setPluginState(PluginState.ON); 
final String mimeType = "text/html"; 
final String encoding = "UTF-8"; 
MainActivity.webview.setWebViewClient(new WebViewClient()); 
MainActivity.webview.setWebChromeClient(new WebChromeClient()); 
webview.loadDataWithBaseURL("", html, mimeType, 
       encoding, ""); 

public static String getHTML(String str) { 

    String html = "<iframe class=\"youtube-player\" style=\"overflow:hidden; width: 100%; height: 95%; scrolling=\"no\" padding:0px; margin:0px\" id=\"ytplayer\" type=\"text/html\" src=\"http://www.youtube.com/embed/" 
      + str 
      + "?html5=1&autoplay=1 & fs=0\" frameborder=\"0\" >\n" 
      + "</iframe>\n "; 

    return html; 
} 
+0

試過這個..問題持續:( –

+0

對不起兄弟,但它爲我的所有設備工作,但我沒有索尼手機:( – wadali

+0

你也面臨同樣的問題? –

0

我面臨着同樣的問題,我可以說的是,該錯誤會隨着Android版本相關的唯一的事情。特別是,我貼here

  • 在Android 4的版本中,無法自動播放。用戶必須按下播放按鈕進入iframe才能開始播放視頻。特別是:

    • 在Android 4.1中,它重現了音頻而不是圖像。
    • 在Android 4.3中,我測試了可以複製音頻但沒有 視頻和無法再現任何內容的設備的設備。
    • 在Android 4.4系統不會重現什麼
  • 從Android的5 +一切工作正常。

我花那麼多時間試圖做到這一點我沒有找到辦法:(