2013-06-12 54 views
25

Tôi đang sử dụng WebView để hiển thị video Youtube được nhúng và hoạt động trên Galaxcy S2 (OS 2.3.5) và không hoạt động trên Nexus S (OS 2.3.4), tất cả những gì tôi nhận được là màn hình trắng mà không có bất kỳ màn hình video nào.Nhúng video Youtube vào trong ứng dụng Android

Dưới đây là đoạn mã Tôi đang sử dụng và khai báo trong tập tin Manifest:

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

Lưu ý: tham số "selected_video" là băm của video (ID Video).

Các tờ khai trong tập tin Manifest:

<?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" > 

    . 
    . 

Xin vui lòng cho tôi biết trong trường hợp bạn nhận ra bất cứ điều gì tôi nên thay đổi trong mã của tôi, hoặc giúp đỡ với một mã hoàn chỉnh mà có thể hỗ trợ tất cả các thiết bị Android và OS để hiển thị nhúng (Trong ứng dụng) Youtube video với chất lượng cao.

CẬP NHẬT: Chú ý, giải pháp tôi đang tìm kiếm sẽ hiển thị video có độ phân giải cao. Tôi đã làm việc trên các thiết bị khác nhau và hệ điều hành bằng cách sử dụng lớp VideoView nhưng chất lượng video không đủ tốt. Vì vậy, bất kỳ giải pháp bao gồm VideoView hoặc WebView hoặc bất kỳ cách nào khác sẽ chỉ được chấp nhận nếu nó làm cho video YouTube chất lượng cao được hiển thị. Cảm ơn tất cả những người phản hồi!

+0

Tôi không chắc nhưng nó có thể là đèn flash prob, Flash được cài đặt trong Nexus S ??? http://stackoverflow.com/questions/5791035/what-does-install-flash-plugin-in-webview-mean – idan

+0

Tôi có thể sử dụng các ứng dụng khác hoạt động tương tự trên Nexus S. Tôi không muốn flash là phải sử dụng ứng dụng ... – Idan

+0

Tôi có nghĩa là tôi nghĩ rằng nó không hoạt động vì Youtube yêu cầu Flash, hãy kiểm tra xem các thiết bị có thể duyệt trang web YouTube và xem phim không? và cho tôi biết kết quả (không thử ứng dụng YouTube chỉ là trang web youtube) sử dụng ứng dụng maby ather, trình phát youtube android? https://developers.google.com/youtube/android/player/ – idan

Trả lời

2

Nó hoạt động như thế này:

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

Mã này không biên dịch (chỉ số phải là Số liệu). Những gì nên được trên "url của bạn" chính xác? bạn có thể cung cấp một ví dụ tốt hơn không? – Idan

33

có một YouTube Android Player API Mà chính thức mà bạn có thể sử dụng. Điều này phức tạp hơn một chút nhưng nó hoạt động tốt hơn các giải pháp khác bằng cách sử dụng webclients.

Trước tiên, bạn phải đăng ký ứng dụng của mình theo số Googles API Console. Điều này là hoàn toàn miễn phí cho đến khi ứng dụng của bạn nhận được hơn 25k yêu cầu một tháng (hoặc một cái gì đó như thế). Có một hướng dẫn tuyệt vời anf dưới liên kết. Tôi hy vọng bạn có thể hiểu chúng. Nếu không, hãy hỏi! :)

+0

Cảm ơn! Làm thế nào ngớ ngẩn của tôi tôi không thể tìm thấy có một API cho youtube. Lol –

+2

Trình phát Youtube android api yêu cầu ứng dụng youtube được cài đặt và dịch vụ google play, nhưng nhúng video Youtube để chạy trên mọi thiết bị – vuhung3990

4

mặc dù tôi đề nghị sử dụng youtube api hoặc gọi mục đích mới và làm cho hệ thống xử lý nó (tức là ứng dụng youtube), ở đây một số mã có thể giúp bạn, nó có cuộc gọi đến một phương pháp ẩn vì bạn không thể tạm dừng và tiếp tục xem web

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

Sử dụng số Youtube Embed API này từ google.

+0

Để hiểu biết của tôi khi sử dụng tôi phải có ứng dụng Youtube trên thiết bị, Đó không phải điều tôi muốn. – Idan

+0

Bạn không thể sử dụng https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubePlayerView YouTubePlayerView để chèn video trực tiếp vào ứng dụng của bạn. Nó cần phải là một hoạt động cụ thể, nhưng phương pháp được sử dụng để khởi tạo YouTubePlayerView không bao gồm mục đích và do đó không thể khởi chạy ứng dụng youtube. –

+0

Tôi cho rằng API chỉ sử dụng phần mã của các tệp thư viện đi kèm với ứng dụng YouTube. Vì vậy, bất kỳ người dùng ứng dụng nào của bạn sẽ cần phải có ứng dụng YouTube trên điện thoại của họ. Ứng dụng của bạn có thể truy vấn để xem nó có được cài đặt hay không và hướng dẫn người dùng cài đặt nó. –

0

Chất lượng video phụ thuộc vào tốc độ kết nối sử dụng API

cách khác cho khác hơn API có nghĩa là không ứng dụng YouTube, bạn có thể làm theo này link

1

Nhúng trình phát YouTube trong Android rất đơn giản & nó hầu như không đưa bạn 10 phút,

1) Enable YouTube API from Google API console 
2) Download YouTube player Jar file 
3) Start using it in Your app 

Dưới đây là các bước chi tiết http://www.feelzdroid.com/2017/01/embed-youtube-video-player-android-app-example.html.

Chỉ cần tham khảo nó & nếu bạn gặp phải bất kỳ vấn đề, cho tôi biết, bệnh giúp bạn

Các vấn đề liên quan