2013-06-12 76 views
25

我正在使用WebView顯示嵌入的Youtube視頻並且適用於Galaxcy S2(OS 2.3.5),並且不適用於Nexus S(OS 2.3.4),我只能看到是沒有任何視頻顯示的白色屏幕。在Android應用程序中嵌入Youtube視頻

這裏是代碼片段我使用,並在清單文件中聲明:

private WebView wv; 

private void setWebView() 
{ 
wv = (WebView) findViewById(R.id.webView); 

wv.setWebChromeClient(new WebChromeClient()); 

wv.getSettings().setPluginState(WebSettings.PluginState.ON); 

wv.setWebViewClient(new WebViewClient()); 

wv.getSettings(); 

wv.setBackgroundColor(0x00000000); 

wv.setKeepScreenOn(true); 

wv.setHorizontalScrollBarEnabled(false); 
wv.setVerticalScrollBarEnabled(false); 

wv.getSettings().setBuiltInZoomControls(true); 

final String mimeType = "text/html"; 
final String encoding = "UTF-8"; 
String html = getHTML(); 

wv.loadDataWithBaseURL("", html, mimeType, encoding, ""); 

} 


public String getHTML() 
{ 

String html = "<html>" 

    + "<head>" 
+ "</head>" 
+ "<body style=\"border: 0; padding: 0\">" 
+ "<iframe " 
+ "type=\"text/html\" " 
+ "class=\"youtube-player\" " 
+ "width= 100%\"" 
+ "\" " 
+ "height= 95%\"" 
+ "\" " 
+ "src=\"http://www.youtube.com/v/" 
+ selected_video 
    + "?controls=0&showinfo=0&showsearch=0&modestbranding=0" + 
"&autoplay=1&fs=1&vq=hd720\" " + "frameborder=\"0\"></iframe>" 
    + "</body>" 
    + "</html>"; 

return html; 
} 

注:參數「selected_video」是視頻(視頻ID)的哈希值。

在清單文件中聲明:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android=http://schemas.android.com/apk/res/android 
. 
. 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

<application 
    . 
    . 
    android:hardwareAccelerated="true" > 

    . 
    . 

請讓我知道你認識什麼我應該在我的代碼更改,或者用一個完整的代碼幫助它可以支持所有Android設備和OS用於顯示嵌入式情況(應用內)Youtube視頻高品質。

更新: 請注意,我正在尋找的解決方案應該顯示高分辨率視頻。我在使用VideoView類的不同設備和操作系統上工作,但視頻質量不夠好。因此,包括VideoView或WebView或任何其他方式在內的任何解決方案只有在能夠顯示高品質YouTube視頻的情況下才能被接受。感謝所有的迴應者!

+0

我不知道,但它可能是閃光燈的概率,閃光燈安裝在Nexus S的??? http://stackoverflow.com/questions/5791035/what-does-install-flash-plugin-in-webview-mean – idan

+0

我可以使用其他的應用程序,在我的Nexus S上做同樣的事情。我不想閃光燈必須使用應用程序... – Idan

+0

我的意思是我認爲它不工作,因爲Youtube需要Flash,請檢查設備是否可以瀏覽YouTube網站並觀看電影?並讓我知道結果(不要試圖YouTube的應用程序只是youtube網站)maby ather應用程序使用,youtube android player? https://developers.google.com/youtube/android/player/ – idan

回答

2

它的工作原理是這樣的:

String item = "http://www.youtube.com/embed/"; 

String ss = "your url"; 
ss = ss.substring(ss.indexOf("v=") + 2); 
item += ss; 
DisplayMetrics metrics = getResources().getDisplayMetrics(); 
int w1 = (int) (metrics.widthPixels/metrics.density), h1 = w1 * 3/5; 
wv.getSettings().setJavaScriptEnabled(true); 
wv.setWebChromeClient(chromeClient); 
wv.getSettings().setPluginsEnabled(true); 

try { 
    wv.loadData(
    "<html><body><iframe class=\"youtube-player\" type=\"text/html5\" width=\"" 
    + (w1 - 20) 
    + "\" height=\"" 
    + h1 
    + "\" src=\"" 
    + item 
    + "\" frameborder=\"0\"\"allowfullscreen\"></iframe></body></html>", 
          "text/html5", "utf-8"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

private WebChromeClient chromeClient = new WebChromeClient() { 

    @Override 
    public void onShowCustomView(View view, CustomViewCallback callback) { 
     super.onShowCustomView(view, callback); 
     if (view instanceof FrameLayout) { 
      FrameLayout frame = (FrameLayout) view; 
      if (frame.getFocusedChild() instanceof VideoView) { 
       VideoView video = (VideoView) frame.getFocusedChild(); 
       frame.removeView(video); 
       video.start(); 
      } 
     } 

    } 
}; 
+0

這段代碼沒有編譯(度量標準應該是度量標準)。究竟應該在「你的網址」上?你能提供一個更好的例子嗎? – Idan

33

有官方YouTube Android Player API至極,你可以使用。這有點複雜,但比其他使用webclient的解決方案更好。

首先,您必須在Googles API Console中註冊您的應用程序。這是完全免費的,直到你的應用程序每月獲得25k以上的請求(或類似的東西)。鏈接下有完整的教程。我希望你能理解他們。如果沒有,問! :)

+0

謝謝!我多麼愚蠢,我無法找到YouTube的API。大聲笑 –

+2

Youtube android player api需要安裝youtube app和google play服務,但Embed Youtube視頻在每臺設備上運行 – vuhung3990

4

雖然我建議使用youtube API或調用新的意圖,並使系統處理它(即youtube應用程序),在這裏可以幫助你的一些代碼,它有一個調用隱藏的方法,因爲你不能暫停和恢復webview

import java.lang.reflect.Method; 

import android.annotation.SuppressLint; 
import android.os.Bundle; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 

import android.app.Activity; 

@SuppressLint("SetJavaScriptEnabled") 
public class MultimediaPlayer extends Activity 
{ 
    private WebView mWebView; 
    private boolean mIsPaused = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 

     String media_url = VIDEO_URL; 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.setWebChromeClient(new WebChromeClient()); 

     WebSettings ws = mWebView.getSettings(); 
     ws.setBuiltInZoomControls(true); 
     ws.setJavaScriptEnabled(true); 

     mIsPaused = true; 
     resumeBrowser(); 
     mWebView.loadUrl(media_url); 
    } 

    @Override 
    protected void onPause() 
    { 
     pauseBrowser(); 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() 
    { 
     resumeBrowser(); 
     super.onResume(); 
    } 

    private void pauseBrowser() 
    { 
     if (!mIsPaused) 
     { 
      // pause flash and javascript etc 
      callHiddenWebViewMethod(mWebView, "onPause"); 
      mWebView.pauseTimers(); 
      mIsPaused = true; 
     } 
    } 

    private void resumeBrowser() 
    { 
     if (mIsPaused) 
     { 
      // resume flash and javascript etc 
      callHiddenWebViewMethod(mWebView, "onResume"); 
      mWebView.resumeTimers(); 
      mIsPaused = false; 
     } 
    } 

    private void callHiddenWebViewMethod(final WebView wv, final String name) 
    { 
     try 
     { 
      final Method method = WebView.class.getMethod(name); 
      method.invoke(mWebView); 
     } catch (final Exception e) 
     {} 
    } 
} 
-1

從谷歌使用此Youtube Embed API谷歌。

+0

爲了我的理解,我必須在設備上安裝Youtube應用,這不是我想要的。 – Idan

+0

您不能使用https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubePlayerView YouTubePlayerView將視頻直接插入您的應用中。它需要是特定的活動,但用於啓動YouTubePlayerView的方法不包含意圖,因此無法啓動YouTube應用程序。 –

+0

我認爲API只是使用YouTube應用程序附帶的庫文件的代碼部分。因此,您應用的任何用戶都需要在手機上放置YouTube應用。你的應用程序可以查詢它是否已安裝,並指導用戶安裝它。 –

0

視頻質量取決於是否使用連接速度API

或者其他比API是指未經YouTube應用程序,你可以按照這個link

相關問題