Como reproduzir um vídeo do YouTube em meu aplicativo Android?

84

Como faço para reproduzir YouTubevídeos em meu aplicativo? Eu quero fazer play videostreaming diretamente do YouTube sem fazer download. Além disso, durante a reprodução de vídeos, desejo fornecer opções de menu. Não quero reproduzir o vídeo usando a intenção padrão. Como posso fazer isso?

user446366
fonte
1
São apenas 2 minutos de trabalho, habilite a opção Youtube no console do desenvolvedor, baixe o arquivo jar do youtube player, comece a usá-lo, é simples consultar este post feelzdroid.com/2017/01/…
Naruto

Respostas:

59

Este é o 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 abriu em outra página com o youtube onde vc pode mostrar o seu vídeo

Parag Chauhan
fonte
1
este depende do YouTube aap, caso contrário, ele abre o vídeo em novo webView, eu quero reproduzir o vídeo em VideoView não em webview .. do que sugerir alguma forma, por favor.
Abid A. Chaudhary,
3
VideoViewrequer o URL absoluto do vídeo, que no caso do YouTube provavelmente não está disponível.
Aman Alam de
3
Para qualquer cópia e pasters, se você não souber por que isso pode não funcionar, deve haver um espaço em newIntent. nova intenção
OrhanC1
10
A pergunta é como esta "Não quero reproduzir vídeo usando a intenção padrão."
Naresh
18

Passos

  1. Crie uma nova atividade, para a tela do seu jogador (tela cheia) com opções de menu. Execute o mediaplayer e a IU em threads diferentes.

  2. Para reproduzir mídia - Em geral, para reproduzir áudio / vídeo, há api mediaplayer no Android. FILE_PATH é o caminho do arquivo - pode ser url (youtube) stream ou caminho do arquivo local

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

Verifique também: a intenção de reprodução de vídeo do aplicativo YouTube para Android já discutimos isso em detalhes.

Naresh
fonte
8
como pode FILE_PATH apontar para um vídeo do youtube? Um link do YouTube é uma página da web que reproduz o vídeo, não um link para o arquivo em si.
Marty Miller de
3
O Youtube não tem nenhum url absoluto. Essa era a preocupação original do OP.
noob
1
@MartyMiller Obter o URL do stream do youtube é outra questão. Trata-se de APIs do YouTube.
Naresh
11

Use a API do YouTube Android Player.

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 a 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";
}

Substitua o "Hce74cEAAaE" pelo ID do seu vídeo em https://www.youtube.com/watch?v=Hce74cEAAaE . Obtenha sua API_KEY em Console.developers.google.com e substitua-a também em PlayerConfig.API_KEY. Para mais informações, você pode seguir o seguinte tutorial passo a passo: https://www.youtube.com/watch?v=3LiubyYpEUk

Andreas Konstantakos
fonte
Se eu quiser usar o ID de vídeo dinâmico, estou obtendo "YouTubeAndroidPlayerAPI: A configuração de incorporação não é compatível com RemoteEmbeddedPlayer." erro e não está reproduzindo meu vídeo. Você pode me ajudar ... Agradecemos antecipadamente.
amit pandya,
youTubePlayerView.initialize não existe, talvez tenha sido removido?
Alberto M
5

Eu não queria ter o aplicativo do YouTube presente no dispositivo, então usei este tutorial:

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

... para produzir este código em meu aplicativo:

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>     

Funcionou exatamente como eu queria. Ele não é reproduzido automaticamente, mas o vídeo é transmitido em meu aplicativo. É importante notar que alguns vídeos restritos não serão reproduzidos quando incorporados.

JanB
fonte
1
Sim, você incorporou seu aplicativo com webview sem youtube api. Boa maneira de carregar o vídeo no aplicativo, obrigado JanB
Ajay Pandya
Ótima solução fácil que não requer inscrição para uma chave de API como a API do YouTube Android Player . Funcionou para mim!
Michael Osofsky
3

Você pode usar iframe conforme descrito em https://developers.google.com/youtube/iframe_api_reference

Não estou seguindo os conselhos do google exatamente, mas este é o código que estou usando e está funcionando bem

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

em / assets, tenho um arquivo chamado 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 agora eu defino uma webview dentro do meu layout 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" />

e eu uso CWebVideoView dentro da minha atividade

videoView = (WebView) view.findViewById(R.id.video);
videoView.setVisibility(View.VISIBLE);
cWebVideoView = new CWebVideoView(context, videoView);
cWebVideoView.load(url);
jmhostalet
fonte
Obrigado pela sua resposta. Você pode colocar uma captura de tela para que possamos ver o resultado do código também?
Saeed Jassani
2

Esta resposta pode estar muito atrasada, mas é útil.

Você pode reproduzir vídeos do YouTube no próprio aplicativo usando o android-youtube-player .

Alguns trechos de código:

Para reproduzir um vídeo do YouTube que tem um id de vídeo no url, basta chamar o OpenYouTubePlayerActivityintent

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

onde v é o id do vídeo.

Adicione as seguintes permissões no arquivo de manifesto:

<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 também declara essa atividade no arquivo de manifesto:

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

Mais informações podem ser obtidas nas primeiras partes deste arquivo de código.

Espero que ajude alguém!

Rat-a-tat-a-tat Ratatouille
fonte
2

O Google possui uma API do YouTube Android Player que permite incorporar a funcionalidade de reprodução de vídeo em seus aplicativos Android. A API em si é muito fácil de usar e funciona bem. Por exemplo, aqui está como criar uma nova atividade para reproduzir um vídeo usando a API.

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

Veja isto para mais detalhes.

Sapan Diwakar
fonte
1

você pode usar este projeto para reproduzir qualquer vídeo do You Tube, em seu aplicativo Android. Agora, para outro vídeo ou ID de vídeo ... você pode fazer isso https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ onde eminemvevo = canal .

depois de encontrar, id de vídeo, você pode colocar essa id em 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 especialmente para ler esse video_id de uma maneira melhor, abra isso, e como um 1st_filearquivo xml [ ] em sua área de trabalho, depois de criar um novo arquivo Xml em seu projectou enviar esse arquivo [ 1st_file] salvo em seu projeto, e clicar com o botão direito nele, e abra-o com o arquivo xml_editor, aqui você encontrará o id do vídeo em questão.

insira a descrição da imagem aqui

Tushar Pandey
fonte
1
MediaPlayer mp=new MediaPlayer(); 
mp.setDataSource(path);
mp.setScreenOnWhilePlaying(true);
mp.setDisplay(holder);
mp.prepare();
mp.start();
user1642835
fonte
-6
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watchv=cxLG2wtE7TM"));
startActivity(intent);
Hassanuzzaman Khan
fonte
Realmente? "Não quero reproduzir o vídeo usando a intenção padrão.", Penúltima linha.
Squirrelkiller de
Esta é apenas uma repetição da resposta existente .
Pang