web-dev-qa-db-fra.com

Intégrer une vidéo Youtube dans une application Android

J'utilise une WebView pour afficher une vidéo Youtube intégrée et cela fonctionne sur Galaxcy S2 (OS 2.3.5) et non sur Nexus S (OS 2.3.4). Tout ce que j'obtiens est un écran blanc sans affichage vidéo.

Voici l'extrait de code que j'utilise et les déclarations dans le fichier 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;
}

Remarque: le paramètre "selected_video" est le hachage de la vidéo (VideoID).

Les déclarations dans le fichier manifeste:

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

    .
    .

Faites-le moi savoir au cas où vous reconnaissez quelque chose que je devrais changer dans mon code, ou aidez-moi avec un code complet pouvant supporter tous les appareils Android et tous les systèmes d'exploitation pour l'affichage de vidéos Youtube (In-App) intégrées de haute qualité.

MISE À JOUR: .__ Faites attention, la solution que je cherche devrait afficher une vidéo haute résolution. Je l’ai fait fonctionner sur les différents appareils et systèmes d’exploitation en utilisant la classe VideoView, mais la qualité vidéo n’est pas assez bonne. Ainsi, toute solution, y compris VideoView ou WebView, ou tout autre moyen, ne sera acceptée que si elle permet d’afficher des vidéos YouTube de haute qualité. Merci à tous les intervenants! 

26
Idan

il existe un API de lecteur Android YouTube que vous pouvez utiliser. C’est un peu plus compliqué, mais cela fonctionne mieux que d’autres solutions utilisant des clients Web.

Tout d'abord, vous devez enregistrer votre application dans Console d'API Googles . Ceci est totalement gratuit jusqu'à ce que votre application reçoive plus de 25 000 requêtes par mois (ou quelque chose du genre). Il y a des tutoriels complets et excellents sous le lien. J'espère que vous pourrez les comprendre. Si non, demandez! :)

36
raptor

bien que je suggère d'utiliser youtube api ou call new intent et de faire en sorte que le système la gère (c'est-à-dire youtube app), voici un code qui peut vous aider, il appelle une méthode cachée, car vous ne pouvez pas suspendre et reprendre la visualisation 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)
        {}
    }
}
4
sherpya

Cela fonctionne comme ceci:

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

    }
};
3
VINIL SATRASALA

A quoi ça ressemble:

 enter image description here

Meilleure solution à mon cas. J'ai besoin d'afficher la taille de la vidéo sur Internet .Utiliser un lien youtube intégré avec votre identifiant vidéoExemple:

WebView youtubeWebView; //todo find or bind web view
String myVideoYoutubeId = "-bvXmLR3Ozc";

outubeWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });

WebSettings webSettings = youtubeWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);

youtubeWebView.loadUrl("https://www.youtube.com/embed/" + myVideoYoutubeId);

Web view code xml

<WebView
        Android:id="@+id/youtube_web_view"
        Android:layout_width="match_parent"
        Android:layout_height="200dp"/>
2

L'intégration du lecteur YouTube dans Android est très simple et dure à peine 10 minutes. 

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

Voici les étapes détaillées http://www.feelzdroid.com/2017/01/embed-youtube-video-player-Android-app-example.html

Il suffit de vous référer et si vous rencontrez un problème, faites le moi savoir, malade de vous aider

1
Naruto

Assez simple: il suffit de le mettre dans une méthode statique.

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(linkYouTube)));
0
Thiago Silva

La qualité de la vidéo dépend de la vitesse de connexion à l'aide de l'API

sinon, pour des moyens autres que l'API, sans application YouTube, vous pouvez suivre ce link

0
Trikaldarshi

Reportez-vous à cette réponse: Comment pouvons-nous lire le code intégré de YouTube dans une application Android en utilisant Webview?

Il utilise WebViews et charge une iframe dedans ... et oui cela fonctionne.

0
Kamran Ahmed