Wie spiele ich YouTube-Videos in meiner Android-Anwendung ab?

84

Wie spiele ich YouTubeVideos in meiner Anwendung ab? Ich möchte play videoes direkt von YouTube streamen, ohne es herunterzuladen. Außerdem möchte ich beim Abspielen von Videos Menüoptionen bereitstellen. Ich möchte kein Video mit Standardabsicht abspielen. Wie kann ich das machen?

user446366
quelle
Mögliches Duplikat der Android YouTube App Video Intent
abspielen
1
Es ist nur 2 Minuten Arbeit, ermöglichen Youtube Option von Entwickler - Konsole herunterladen youtube Player jar - Datei, beginnen sie, ihre einfache Bookmarken beziehen feelzdroid.com/2017/01/...
Naruto

Antworten:

59

Dies ist das BTN-Klick-Ereignis

btnvideo.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

    startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.youtube.com/watch?v=Hxy8BZGQ5Jo")));
    Log.i("Video", "Video Playing....");

    }
}); 

Dieser Typ wurde auf einer anderen Seite mit dem Youtube geöffnet, auf der du dein Video zeigen kannst

Parag Chauhan
quelle
1
Dieser hängt von der YouTube-AAP ab, andernfalls wird das Video in der neuen WebView geöffnet. Ich möchte das Video in der VideoView abspielen, nicht in der Webansicht.
Abid A. Chaudhary
3
VideoViewerfordert die absolute URL des Videos, die im Fall von YouTube wahrscheinlich nicht verfügbar ist.
Aman Alam
3
Wenn Sie sich nicht sicher sind, warum dies möglicherweise nicht funktioniert, sollte in newIntent ein Leerzeichen vorhanden sein. neue Absicht
OrhanC1
9
Die Frage lautet wie folgt: "Ich möchte kein Video mit Standardabsicht abspielen."
Naresh
18

Schritte

  1. Erstellen Sie eine neue Aktivität für Ihren Player-Bildschirm (Vollbild) mit Menüoptionen. Führen Sie den Mediaplayer und die Benutzeroberfläche in verschiedenen Threads aus.

  2. Zum Abspielen von Medien - Im Allgemeinen gibt es für die Wiedergabe von Audio / Video eine Mediaplayer-API in Android. FILE_PATH ist der Pfad der Datei - kann ein URL-Stream (Youtube) oder ein lokaler Dateipfad sein

     MediaPlayer mp = new MediaPlayer();
        mp.setDataSource(FILE_PATH);
        mp.prepare();
        mp.start();

Überprüfen Sie auch: Android YouTube App Play Video Intent haben dies bereits ausführlich besprochen.

Naresh
quelle
7
Wie kann FILE_PATH auf ein Youtube-Video verweisen? Ein Youtube-Link ist eine Webseite, auf der das Video abgespielt wird, kein Link zur Datei selbst.
Marty Miller
3
Youtube hat keine absolute URL. Das war das ursprüngliche Anliegen des OP.
Noob
1
@MartyMiller Stream URL von YouTube abrufen ist eine andere Frage. Es geht um YouTube-APIs.
Naresh
11

Verwenden Sie die YouTube Android Player-API.

activity_main.xml:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"

tools:context="com.example.andreaskonstantakos.vfy.MainActivity">

<com.google.android.youtube.player.YouTubePlayerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="visible"
    android:layout_centerHorizontal="true"
    android:id="@+id/youtube_player"
    android:layout_alignParentTop="true" />

<Button
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="195dp"
android:visibility="visible"
android:id="@+id/button" />


</RelativeLayout>

MainActivity.java:

package com.example.andreaskonstantakos.vfy;


import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;



public class MainActivity extends YouTubeBaseActivity {

YouTubePlayerView youTubePlayerView;
Button button;
YouTubePlayer.OnInitializedListener onInitializedListener;

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

     youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player);
     button = (Button) findViewById(R.id.button);


     onInitializedListener = new YouTubePlayer.OnInitializedListener(){

         @Override
         public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

            youTubePlayer.loadVideo("Hce74cEAAaE");

             youTubePlayer.play();
     }

         @Override
         public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

         }
     };

    button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

youTubePlayerView.initialize(PlayerConfig.API_KEY,onInitializedListener);
        }
    });
}
}

und die PlayerConfig.java-Klasse:

    package com.example.andreaskonstantakos.vfy;

/**
 * Created by Andreas Konstantakos on 13/4/2017.
 */

public class PlayerConfig {

PlayerConfig(){}

public static final String API_KEY = 
"xxxxx";
}

Ersetzen Sie die "Hce74cEAAaE" durch Ihre Video-ID von https://www.youtube.com/watch?v=Hce74cEAAaE . Holen Sie sich Ihren API_KEY von Console.developers.google.com und ersetzen Sie ihn auch in PlayerConfig.API_KEY. Weitere Informationen finden Sie im folgenden Tutorial Schritt für Schritt: https://www.youtube.com/watch?v=3LiubyYpEUk

Andreas Konstantakos
quelle
Wenn ich die dynamische Video-ID verwenden möchte, erhalte ich "YouTubeAndroidPlayerAPI: Die eingebettete Konfiguration wird in RemoteEmbeddedPlayer nicht unterstützt." Fehler und es wird mein Video nicht abgespielt. Kannst du mir helfen? Danke im Voraus.
Amit Pandya
youTubePlayerView.initialize existiert nicht, möglicherweise entfernt?
Alberto M
4

Ich wollte nicht, dass die YouTube-App auf dem Gerät vorhanden ist, also habe ich dieses Tutorial verwendet:

http://www.viralandroid.com/2015/09/how-to-embed-youtube-video-in-android-webview.html

... um diesen Code in meiner App zu erstellen:

WebView mWebView; 

@Override
public void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.video_webview);
    mWebView=(WebView)findViewById(R.id.videoview);

    //build your own src link with your video ID
    String videoStr = "<html><body>Promo video<br><iframe width=\"420\" height=\"315\" src=\"https://www.youtube.com/embed/47yJ2XCRLZs\" frameborder=\"0\" allowfullscreen></iframe></body></html>";

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
        }
    });
    WebSettings ws = mWebView.getSettings();
    ws.setJavaScriptEnabled(true);
    mWebView.loadData(videoStr, "text/html", "utf-8");

}

//video_webview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="0dp"
    android:layout_marginRight="0dp"
    android:background="#000000"
    android:id="@+id/bmp_programme_ll"
    android:orientation="vertical" >

   <WebView
    android:id="@+id/videoview" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />  
</LinearLayout>     

Das hat genau so funktioniert, wie ich es wollte. Es wird nicht automatisch abgespielt, sondern die Videostreams in meiner App. Beachten Sie, dass einige eingeschränkte Videos beim Einbetten nicht abgespielt werden können.

JanB
quelle
1
Ja, Sie haben richtig eingebettet in Ihre App mit Webview ohne YouTube-API. Schöne Möglichkeit, Videos in die App zu laden. Vielen Dank. JanB
Ajay Pandya
Eine großartige, einfache Lösung, bei der Sie sich nicht für einen API-Schlüssel wie die YouTube Android Player-API anmelden müssen . Hat für mich gearbeitet!
Michael Osofsky
3

Sie können iframe wie unter https://developers.google.com/youtube/iframe_api_reference beschrieben verwenden

Ich folge den Google-Empfehlungen nicht genau, aber dies ist der Code, den ich verwende, und er funktioniert einwandfrei

public class CWebVideoView {

    private String url;
    private Context context;
    private WebView webview;
    private static final String HTML_TEMPLATE = "webvideo.html";

    public CWebVideoView(Context context, WebView webview) {
        this.webview = webview;
        this.context = context;
        webview.setBackgroundColor(0);
        webview.getSettings().setJavaScriptEnabled(true);
    }

    public void load(String url){
        this.url = url;
        String data = readFromfile(HTML_TEMPLATE, context);
        data = data.replace("%1", url);
        webview.loadData(data, "text/html", "UTF-8");
    }

    public String readFromfile(String fileName, Context context) {
        StringBuilder returnString = new StringBuilder();
        InputStream fIn = null;
        InputStreamReader isr = null;
        BufferedReader input = null;
        try {
            fIn = context.getResources().getAssets().open(fileName, Context.MODE_WORLD_READABLE);
            isr = new InputStreamReader(fIn);
            input = new BufferedReader(isr);
            String line = "";
            while ((line = input.readLine()) != null) {
                returnString.append(line);
            }
        } catch (Exception e) {
            e.getMessage();
        } finally {
            try {
                if (isr != null)
                    isr.close();
                if (fIn != null)
                    fIn.close();
                if (input != null)
                    input.close();
            } catch (Exception e2) {
                e2.getMessage();
            }
        }
        return returnString.toString();
    }

    public void reload() {
        if (url!=null){
            load(url);
        }
    }
}

In / Assets habe ich eine Datei namens webvideo.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            iframe   { border: 0; position:fixed; width:100%; height:100%; bgcolor="#000000"; }
            body     { margin: 0; bgcolor="#000000"; }
        </style>        
    </head>
    <body>
        <iframe src="%1" frameborder="0" allowfullscreen></iframe>
    </body>
</html>

und jetzt definiere ich eine Webansicht in meinem Hauptlayout

<WebView
    android:id="@+id/video"
    android:visibility="gone"
    android:background="#000000"
    android:layout_centerInParent="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

und ich verwende CWebVideoView in meiner Aktivität

videoView = (WebView) view.findViewById(R.id.video);
videoView.setVisibility(View.VISIBLE);
cWebVideoView = new CWebVideoView(context, videoView);
cWebVideoView.load(url);
jmhostalet
quelle
Danke für deine Antwort. Können Sie einen Screenshot erstellen, damit wir auch das Ergebnis des Codes sehen können?
Saeed Jassani
2

Diese Antwort könnte sehr spät sein, ist aber nützlich.

Sie können YouTube-Videos in der App selbst mit dem Android-YouTube-Player abspielen .

Einige Codefragmente:

Um ein YouTube-Video abzuspielen, dessen URL eine Video-ID enthält, rufen Sie einfach die OpenYouTubePlayerActivityAbsicht auf

Intent intent = new Intent(null, Uri.parse("ytv://"+v), this, 
            OpenYouTubePlayerActivity.class);
startActivity(intent);

Dabei ist v die Video-ID.

Fügen Sie der Manifestdatei die folgenden Berechtigungen hinzu:

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

und deklarieren Sie diese Aktivität auch in der Manifestdatei:

<activity 
        android:name="com.keyes.youtube.OpenYouTubePlayerActivity"></activity>

Weitere Informationen finden Sie in den ersten Abschnitten dieser Codedatei.

Hoffe das hilft jedem!

Ratat-a-tat-a-tat Ratatouille
quelle
2

Google verfügt über eine YouTube Android Player-API , mit der Sie Videowiedergabefunktionen in Ihre Android-Anwendungen integrieren können. Die API selbst ist sehr einfach zu bedienen und funktioniert gut. Hier erfahren Sie beispielsweise, wie Sie eine neue Aktivität zum Abspielen eines Videos mithilfe der API erstellen.

Intent intent = YouTubeStandalonePlayer.createVideoIntent(this, "<<YOUTUBE_API_KEY>>", "<<Youtube Video ID>>", 0, true, false);   
startActivity(intent);

Sehen Sie dies für weitere Details.

Sapan Diwakar
quelle
1

Sie können dieses Projekt verwenden, um jedes Ihrer Röhrenvideos in Ihrer Android-App abzuspielen. Jetzt für ein anderes Video oder eine andere Video-ID ... können Sie dies unter https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ tun, wobei eminemvevo = channel .

Nachdem Sie die Video-ID gefunden haben, können Sie diese eingeben cueVideo("video_id")

src -> com -> examples -> youtubeapidemo -> PlayerViewDemoActivity

  @Override
  public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player , boolean wasRestored) {
    if (!wasRestored) {
      player.cueVideo("wKJ9KzGQq0w");
    }
  }

Und speziell zum besseren Lesen dieser video_id öffnen Sie diese und sie als xml [ 1st_file] -Datei auf Ihrem Desktop, nachdem Sie eine neue xml-Datei in Ihrem erstellt projectoder die [ 1st_file] gespeicherte Datei in Ihrem Projekt hochgeladen haben, und klicken Sie mit der rechten Maustaste darauf und Öffnen Sie es mit der Datei xml_editor. Hier finden Sie die Video-ID des jeweiligen Videos.

Geben Sie hier die Bildbeschreibung ein

Tushar Pandey
quelle
1
MediaPlayer mp=new MediaPlayer(); 
mp.setDataSource(path);
mp.setScreenOnWhilePlaying(true);
mp.setDisplay(holder);
mp.prepare();
mp.start();
user1642835
quelle
-6
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watchv=cxLG2wtE7TM"));
startActivity(intent);
Hassanuzzaman Khan
quelle
"Ja wirklich?" "Ich möchte kein Video mit Standardabsicht abspielen.", Vorletzte Zeile.
Eichhörnchenkiller
Dies ist nur eine Wiederholung dieser bestehenden Antwort .
Pang