¿Cómo reproducir videos de YouTube en mi aplicación de Android?


84

¿Cómo reproduzco YouTubevideos en mi aplicación? Quiero play videotransmitirlo directamente desde YouTube sin descargarlo. Además, mientras reproduzco videos, quiero proporcionar opciones de menú. No quiero reproducir videos con la intención predeterminada. ¿Cómo puedo hacer esto?



1
Son solo 2 minutos de trabajo, habilite la opción de Youtube desde la consola del desarrollador, descargue el archivo jar del reproductor de youtube, comience a usarlo, es simple consultar esta publicación feelzdroid.com/2017/01/…
Naruto

Respuestas:


59

Este es el evento btn click

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

    }
}); 

este tipo se abrió en otra página con youtube donde puedes mostrar tu video


1
este depende del aap de YouTube; de ​​lo contrario, abre el video en un nuevo webView, quiero reproducir el video en VideoView, no en webview ... que sugerir de alguna manera por favor.
Abid A. Chaudhary

3
VideoViewrequiere la URL absoluta del video, que en el caso de YouTube probablemente no esté disponible.
Aman Alam

3
Para cualquier copy & peters, si está confundido sobre por qué esto puede no funcionar, debería haber un espacio en newIntent. nueva intención
OrhanC1

10
La pregunta es como esta: "No quiero reproducir videos con la intención predeterminada".
Naresh

18

Pasos

  1. Cree una nueva actividad, para la pantalla de su jugador (pantalla completa) con opciones de menú. Ejecute el reproductor multimedia y la interfaz de usuario en diferentes hilos.

  2. Para reproducir medios: en general, para reproducir audio / video, hay una api de mediaplayer en Android. FILE_PATH es la ruta del archivo; puede ser una secuencia de url (youtube) o una ruta de archivo local

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

Verifique también: la aplicación de YouTube para Android Play Video Intent ya lo ha discutido en detalle.


8
¿Cómo puede FILE_PATH apuntar a un video de YouTube? Un enlace de YouTube es una página web que reproduce el video, no un enlace al archivo en sí.
Marty Miller

3
Youtube no tiene ninguna URL absoluta. Esa fue la preocupación original del OP.
novato

1
@MartyMiller Obtener la URL de transmisión de youtube es una cuestión diferente. Se trata de las API de youtube.
Naresh

11

Utilice la API del reproductor de Android de YouTube.

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

y la clase 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";
}

Reemplaza "Hce74cEAAaE" con tu ID de video de https://www.youtube.com/watch?v=Hce74cEAAaE . Obtenga su API_KEY de Console.developers.google.com y también reemplácela en PlayerConfig.API_KEY. Para obtener más información, puede seguir el siguiente tutorial paso a paso: https://www.youtube.com/watch?v=3LiubyYpEUk


Si quiero usar el ID de video dinámico, obtengo "YouTubeAndroidPlayerAPI: Embed config no es compatible con RemoteEmbeddedPlayer". error y no está reproduciendo mi video. Puedes ayudarme ... Gracias de antemano.
amit pandya

youTubePlayerView.initialize no existe, ¿tal vez se eliminó?
Alberto M

5

No quería tener la aplicación de YouTube presente en el dispositivo, así que usé este tutorial:

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

... para producir este código en mi aplicación:

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>     

Esto funcionó exactamente como lo quería. No se reproduce automáticamente, pero el video se transmite dentro de mi aplicación. Vale la pena señalar que algunos videos restringidos no se reproducirán cuando estén integrados.


1
Si usted en este integrado con su aplicación con vistas web sin youtube api manera agradable de vídeo dentro de la carga de aplicaciones Gracias JanB
Ajay Pandya

Gran solución sencilla que no requiere registrarse para obtener una clave API como la API del reproductor de Android de YouTube . ¡Trabajó para mi!
Michael Osofsky

3

Puede utilizar iframe como se describe en https://developers.google.com/youtube/iframe_api_reference

No sigo los consejos de Google exactamente, pero este es el código que estoy usando y funciona bien

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

en / assets tengo un archivo llamado 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>

y ahora defino una vista web dentro de mi diseño principal

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

y uso CWebVideoView dentro de mi actividad

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

Gracias por tu respuesta. ¿Puede poner una captura de pantalla para que también podamos ver el resultado del código?
Saeed Jassani

2

Esta respuesta podría llegar muy tarde, pero es útil.

Puede reproducir videos de youtube en la propia aplicación usando android-youtube-player .

Algunos fragmentos de código:

Para reproducir un video de youtube que tiene una identificación de video en la URL, simplemente llame a la OpenYouTubePlayerActivityintención

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

donde v es la identificación del video.

Agregue los siguientes permisos en el archivo de manifiesto:

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

y también declarar esta actividad en el archivo de manifiesto:

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

Se puede obtener más información en las primeras partes de este archivo de código.

¡Espero que ayude a alguien!


2

Google tiene una API de YouTube para Android que le permite incorporar la funcionalidad de reproducción de video en sus aplicaciones de Android. La API en sí es muy fácil de usar y funciona bien. Por ejemplo, aquí se explica cómo crear una nueva actividad para reproducir un video usando la API.

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

Vea esto para más detalles.


1

Puede usar este proyecto para reproducir cualquier video de You Tube, en su aplicación de Android. Ahora para otro video, o ID de video ... puedes hacer esto https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ donde eminemvevo = canal .

después de encontrar la identificación de video, puede poner esa identificación en cueVideo("video_id")

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

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

Y especialmente para leer ese video_id de una mejor manera, ábralo y como un 1st_filearchivo xml [ ] en su escritorio después de que cree un nuevo archivo Xml en su projecto cargue ese [ 1st_file] archivo guardado en su proyecto, y haga clic derecho en él, y ábralo con el archivo xml_editor, aquí encontrará la identificación de video del video en particular.

ingrese la descripción de la imagen aquí


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.