webentwicklung-frage-antwort-db.com.de

Laden von Youtube-Videos über iframe in Android-Webansicht

Ich möchte Youtube-Videos mit iframe in Android-Webview laden

hier ist meine Layout-XML

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@Android:color/white"
Android:id="@+id/mainLayout">

<WebView
    Android:background="@Android:color/white"
    Android:id="@+id/webView"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" />
</RelativeLayout>

Mein Code lautet:

public class WebTube extends Activity {

private WebView wv;

String html = "<iframe class=\"youtube-player\" style=\"border: 0; width: 100%; height: 95%; padding:0px; margin:0px\" id=\"ytplayer\" type=\"text/html\" src=\"http://www.youtube.com/embed/WBYnk3zR0os"
            + "?fs=0\" frameborder=\"0\">\n"
            + "</iframe>";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    wv = (WebView)findViewById(R.id.webView); 
    wv.getSettings().setJavaScriptEnabled(true);
        wv.loadDataWithBaseURL("", html , "text/html",  "UTF-8", "");

     }
} 

Ich gebe auch <uses-permission Android:name="Android.permission.INTERNET"/>

& Android:hardwareAccelerated="true"

als ich das ausführte, bekam ich kein Ergebnis, es wurde nur ein schwarzer Bildschirm angezeigt 

Ich habe versucht, das ., Aber dieses Video über .3gp Quality. aber ich brauche die videos von youtube in originalqualität. Deshalb verwende ich iframe.

Ich versuche Code mit <object></object> und <video></video> anstelle von iframe. aber es löste mein Problem nicht.

wenn ich diesen Code auf dem Emulator ausführen, wird dies angezeigt

Vor dem Drücken der Wiedergabetaste

iframe result on emulator

Nach dem Drücken der Play-Taste auf dem Video

iframe result on emulator on play button click

Ich denke, wir können keine Videos auf dem Emulator streamen, da es sich um ein virtuelles Gerät handelt

Aber wenn ich das telefoniere, wird dieses Ergebnis nicht einmal angezeigt. 

Ich versuche, iframe mit einem angehängten Dokument zu verwenden, das sowohl auf dem Telefon als auch auf dem Emulator funktioniert 

String customHtml = "<iframe src='http://docs.google.com/viewer?url=http://www.iasted.org/conferences/formatting/presentations-tips.ppt&embedded=true' width='100%' height='100%' style='border: none;'></iframe>";

Helfen Sie mir bitte, Videos in diesen Frame zu laden.

(Ich lasse es am Telefon laufen). Was ist das Problem? Funktioniert auch iframe auf Android 2.1?

hat jemand versucht Youtube Api

11
edwin

Wie in der Android Webview-Dokumentation angegeben ,

HTML5-Video-Unterstützung

Um Inline-HTML5-Video in Ihrer Anwendung zu unterstützen, müssen Sie Hardwarebeschleunigung aktiviert und einen WebChromeClient setzen.

Für die Vollbildunterstützung sind Implementierungen von onShowCustomView (View, WebChromeClient.CustomViewCallback) und onHideCustomView () erforderlich. GetVideoLoadingProgressView () ist optional.

7
parser_failed

Ich habe iframe für Youtube-Ansicht vollständig angepasst 

public class Act_VideoPlayer extends Activity {

    WebView webView;
    ProgressBar progressBar;
    ImageView back_btn;

    String video_url = "KK9bwTlAvgo", html = "";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.full_screen_youtube_video_screen);

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        back_btn = (ImageView) findViewById(R.id.full_videoview_btn);
            back_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    webView.loadData("", "text/html", "UTF-8");
                    finish();
                }
            });

            webView = (WebView) findViewById(R.id.webView);
               progressBar = (ProgressBar) findViewById(R.id.progressBar);

            if (video_url.equalsIgnoreCase("")) {
                finish();
                return;
            }

            WebSettings ws = webView.getSettings();
            ws.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
            ws.setPluginState(WebSettings.PluginState.ON);
            ws.setJavaScriptEnabled(true);
            webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
            webView.reload();

            if (networkUtil.isConnectingToInternet(Act_VideoPlayer.this)) {
                html = getHTML(video_url);
            } else {
                html = "" + getResources().getString(R.string.The_internet_connection_appears_to_be_offline);
                CustomToast.animRedTextMethod(Act_VideoPlayer.this, getResources().getString(R.string.The_internet_connection_appears_to_be_offline));
            }

            webView.loadData(html, "text/html", "UTF-8");

            WebClientClass webViewClient = new WebClientClass(progressBar);
            webView.setWebViewClient(webViewClient);
            WebChromeClient webChromeClient = new WebChromeClient();
            webView.setWebChromeClient(webChromeClient);
    }




    @Override
    protected void onDestroy() {
        super.onDestroy();
        try {
            webView.loadData("", "text/html", "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        try {
            webView.loadData("", "text/html", "UTF-8");
            finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public class WebClientClass extends WebViewClient {
        ProgressBar ProgressBar = null;

        WebClientClass(ProgressBar progressBar) {
            ProgressBar = progressBar;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            ProgressBar.setVisibility(View.VISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            ProgressBar.setVisibility(View.GONE);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            LogShowHide.LogShowHideMethod("webview-click :", "" + url.toString());
            view.loadUrl(getHTML(video_url));
            return true;
        }
    }

    public String getHTML(String videoId) {
        String html = "<iframe class=\"youtube-player\" " + "style=\"border: 0; width: 100%; height: 96%;"
                + "padding:0px; margin:0px\" " + "id=\"ytplayer\" type=\"text/html\" "
                + "src=\"http://www.youtube.com/embed/" + videoId
                + "?&theme=dark&autohide=2&modestbranding=1&showinfo=0&autoplay=1\fs=0\" frameborder=\"0\" "
                + "allowfullscreen autobuffer " + "controls onclick=\"this.play()\">\n" + "</iframe>\n";
        LogShowHide.LogShowHideMethod("video-id from html url= ", "" + html);
        return html;
    }

}
6
tej shah

Das hat für mich funktioniert:

WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);

        String frameVideo = "<html><body>Youtube video .. <br> <iframe width=\"320\" height=\"315\" src=\"https://www.youtube.com/\" frameborder=\"0\" allowfullscreen></iframe></body></html>";

        mWebView.loadData(frameVideo, "text/html", "utf-8");

        mWebView.loadUrl("http://www.youtube.com/");


        mWebView.setWebViewClient(new WebViewClient());
1
user2924714

Probieren Sie es aus, es funktioniert gut ..

    mWebView = (WebView) findViewById(R.id.web);
    String  videoURL = "https://www.youtube.com/embed/R52bof3tvZs";

    String vid = "<html><body style=\"margin: 0; padding: 0\"><iframe  width=\"100%\" height=\"100%\" src=\""+videoURL+"\" type=\"text/html\" frameborder=\"0\"></iframe><body><html>";

    WebChromeClient mWebChromeClient = new WebChromeClient(){
        public void onProgressChanged(WebView view, int newProgress) {
        }
    };

    mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
    mWebView.setWebChromeClient(mWebChromeClient);
    mWebView.setWebViewClient(new WebViewClient() {
        public void onPageFinished(WebView view, String url) {
            mWebView.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()");
        }
    });
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setAppCacheEnabled(true);
    mWebView.setInitialScale(1);
    mWebView.getSettings().setLoadWithOverviewMode(true);
    mWebView.getSettings().setUseWideViewPort(true);
    if (Build.VERSION.SDK_INT < 17) {
        Log.i("GPSNETWORK", "<17");
    } else {
        Log.i("GPSNETWORK", Build.VERSION.SDK_INT+">=17");
        mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
    }

    String myUrl = "&lt;html&gt;&lt;body style='margin:0px;padding:0px;'&gt;\n" +
            "        &lt;script type='text/javascript' src='http://www.youtube.com/iframe_api'&gt;&lt;/script&gt;&lt;script type='text/javascript'&gt;\n" +
            "                var player;\n" +
            "        function onYouTubeIframeAPIReady()\n" +
            "        {player=new YT.Player('playerId',{events:{onReady:onPlayerReady}})}\n" +
            "        function onPlayerReady(event){player.mute();player.setVolume(0);player.playVideo();}\n" +
            "        &lt;/script&gt;\n" +
            "        &lt;iframe id='playerId' type='text/html' width='1280' height='720'\n" +
            "        src=\""+videoURL+"\"?enablejsapi=1&amp;rel=0&amp;playsinline=1&amp;autoplay=1&amp;showinfo=0&amp;autohide=1&amp;controls=0&amp;modestbranding=1' frameborder='0'&gt;\n" +
            "        &lt;/body&gt;&lt;/html&gt;";
    mWebView.loadData(""+Html.fromHtml(myUrl), "text/html", "UTF-8");
1
Deepak Gupta

Es ist nicht direkt eine direkte Antwort auf Ihre Frage, aber ich glaube, Sie möchten vielleicht die neu veröffentlichte Android Youtube API verwenden. Es sollte das Hinzufügen von Youtube-Videos in Ihre Apps ermöglichen, sodass Sie sie nicht in einen Webview in einem iFrame einfügen müssen. Das ist nur dumm, und nicht auf allen Android-Geräten ist Flash installiert :)

https://developers.google.com/youtube/Android/player/

0
Artiom Chilaru

Sie können meine Frage noch einmal besuchen. Iv'e hat eine Funktion erstellt, mit der Sie alle direkten Links des Youtube-Videos (einschließlich HQ-Links) erhalten. Jetzt kannst du mp4 verwenden und so anstelle des armen 3gp.

0
eviabs

Ich bin kein Experte für Android Webview, aber ich hatte ähnliche Probleme mit der Webseite.

Was ich tun musste, war Tag zu verwenden und sicherzustellen, dass es onclick = "this.play (); im Tag. Das Onclick-Ereignis war speziell für Android. Chrome, Safari und Firefox brauchten es nicht.

Zum Beispiel:

<video id="video" width="320" height="240" autobuffer controls onclick="this.play();">

Ohne den Onclick würde der Android-Browser nicht funktionieren. Da webview den Browser anruft, vermute ich, dass es genauso ist.

Stellen Sie sicher, dass Sie im Quell-Tag KEIN Codec-Attribut verwenden.

Hoffe das hilft dir.

0
T1000

Mit WebChromeClient können Sie Javascript-Dialoge, Favoriten, Titel und den Fortschritt bearbeiten:

wv = setWebChromeClient(new WebChromeClient());
0