Come riprodurre i video di YouTube nella mia applicazione Android?


84

Come riproduco i YouTubevideo nella mia applicazione? Voglio play videotrasmetterlo in streaming direttamente da YouTube senza scaricare. Inoltre, durante la riproduzione di video, desidero fornire opzioni di menu. Non voglio riprodurre video utilizzando l'intento predefinito. Come posso fare questo?



1
Funziona in soli 2 minuti, abilita l'opzione Youtube dalla console degli sviluppatori, scarica il file jar del player di YouTube, inizia a usarlo, è semplice fare riferimento a questo post feelzdroid.com/2017/01/…
Naruto

Risposte:


59

Questo è l'evento click btn

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....");

    }
}); 

questo tipo si è aperto in un'altra pagina con youtube dove puoi mostrare il tuo video


1
questo dipende da YouTube aap, altrimenti apre il video in una nuova webView, voglio riprodurre il video in VideoView non in webview .. che suggerire in qualche modo plz.
Abid A. Chaudhary

3
VideoViewrichiede l'URL assoluto del video, che nel caso di YouTube probabilmente non è disponibile.
Aman Alam

3
Per qualsiasi copy & pasters, se sei confuso sul motivo per cui questo potrebbe non funzionare, dovrebbe esserci uno spazio in newIntent. nuovo intento
OrhanC1

10
La domanda è del tipo "Non voglio riprodurre video utilizzando l'intento predefinito".
Naresh

18

Passi

  1. Crea una nuova attività per lo schermo del tuo giocatore (a schermo intero) con opzioni di menu. Esegui il lettore multimediale e l'interfaccia utente in thread diversi.

  2. Per la riproduzione di contenuti multimediali - In generale per riprodurre audio / video c'è l'API mediaplayer in Android. FILE_PATH è il percorso del file - può essere il flusso URL (youtube) o il percorso del file locale

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

Controlla anche: L' app YouTube per Android Play Video Intent ne ha già discusso in dettaglio.


8
come può FILE_PATH puntare a un video di YouTube? Un collegamento di YouTube a una pagina Web che riproduce il video, non un collegamento al file stesso.
Marty Miller

3
Youtube non ha alcun URL assoluto. Questa era la preoccupazione originaria del PO.
noob

1
@MartyMiller Ottenere l'URL dello streaming da YouTube è una domanda diversa. Riguarda le API di YouTube.
Naresh

12

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

e la classe PlayerConfig.java:

    package com.example.andreaskonstantakos.vfy;

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

public class PlayerConfig {

PlayerConfig(){}

public static final String API_KEY = 
"xxxxx";
}

Sostituisci "Hce74cEAAaE" con il tuo ID video da https://www.youtube.com/watch?v=Hce74cEAAaE . Ottieni la tua API_KEY da Console.developers.google.com e sostituiscila anche su PlayerConfig.API_KEY. Per ogni ulteriore informazione puoi seguire passo passo il seguente tutorial: https://www.youtube.com/watch?v=3LiubyYpEUk


Se desidero utilizzare l'ID video dinamico, ottengo "YouTubeAndroidPlayerAPI: la configurazione incorporata non è supportata in RemoteEmbeddedPlayer". errore e non sta riproducendo il mio video. Puoi aiutarmi ... Grazie in anticipo.
amit pandya

youTubePlayerView.initialize non esiste, forse rimosso?
Alberto M

6

Non volevo che l'app YouTube fosse presente sul dispositivo, quindi ho utilizzato questo tutorial:

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

... per produrre questo codice nella mia app:

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>     

Funzionava proprio come volevo. Non viene riprodotto automaticamente ma il video è in streaming all'interno della mia app. Vale la pena notare che alcuni video con limitazioni non verranno riprodotti quando incorporati.


1
Sì, hai correttamente integrato con la tua app con visualizzazione web senza API di YouTube un bel modo per caricare video all'interno dell'app grazie JanB
Ajay Pandya

Ottima soluzione semplice che non richiede la registrazione per una chiave API come YouTube Android Player API . Ha funzionato per me!
Michael Osofsky

3

Puoi utilizzare iframe come descritto in https://developers.google.com/youtube/iframe_api_reference

Non sto seguendo esattamente i consigli di Google, ma questo è il codice che sto usando e funziona bene

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 ho un file chiamato 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>

e ora definisco una visualizzazione web all'interno del mio layout principale

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

e utilizzo CWebVideoView all'interno della mia attività

videoView = (WebView) view.findViewById(R.id.video);
videoView.setVisibility(View.VISIBLE);
cWebVideoView = new CWebVideoView(context, videoView);
cWebVideoView.load(url);

Grazie per la tua risposta. Puoi mettere uno screenshot in modo che possiamo vedere anche il risultato del codice?
Saeed Jassani

2

Questa risposta potrebbe essere davvero tardiva, ma è utile.

Puoi riprodurre i video di YouTube nell'app stessa utilizzando Android-youtube-player .

Alcuni frammenti di codice:

Per riprodurre un video di YouTube che ha un ID video nell'URL, devi semplicemente chiamare l' OpenYouTubePlayerActivityintento

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

dove v è l'ID video.

Aggiungi le seguenti autorizzazioni nel file manifest:

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

e dichiara anche questa attività nel file manifest:

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

Ulteriori informazioni possono essere ottenute dalle prime parti di questo file di codice.

Spero che aiuti chiunque!


2

Google dispone di un'API di YouTube Android Player che ti consente di incorporare la funzionalità di riproduzione video nelle tue applicazioni Android. L'API stessa è molto facile da usare e funziona bene. Ad esempio, ecco come creare una nuova attività per riprodurre un video utilizzando l'API.

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

Vedi questo per maggiori dettagli.


1

puoi usare questo progetto per riprodurre qualsiasi video di You Tube, nella tua app Android. Ora per altri video, o ID video ... puoi farlo https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ dove eminemvevo = channel .

dopo aver trovato, ID video, puoi inserire quell'ID in cueVideo("video_id")

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

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

E specialmente per leggere quel video_id in un modo migliore, aprilo e come 1st_filefile xml [ ] sul desktop dopo aver creato un nuovo file Xml nel tuo projecto caricare quel 1st_filefile [ ] salvato nel tuo progetto, e fai clic destro su di esso, e aprilo con il file xml_editor, qui troverai l'ID video del video specifico.

inserisci qui la descrizione dell'immagine


1
MediaPlayer mp=new MediaPlayer(); 
mp.setDataSource(path);
mp.setScreenOnWhilePlaying(true);
mp.setDisplay(holder);
mp.prepare();
mp.start();

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.