Jak odtwarzać wideo z YouTube'a w mojej aplikacji na Androida?

84

Jak odtwarzać YouTubefilmy w mojej aplikacji? Chcę, aby play videoprzesyłać strumieniowo bezpośrednio z YouTube bez pobierania. Ponadto podczas odtwarzania filmów chcę podać opcje menu. Nie chcę odtwarzać wideo przy użyciu domyślnej intencji. Jak mogę to zrobić?

user446366
źródło
możliwy duplikat aplikacji Android YouTube Play Video Intent
DroidDev
1
To tylko 2 minuty pracy, włącz opcję Youtube z konsoli programisty, pobierz plik jar odtwarzacza youtube, zacznij go używać, Po prostu zapoznaj się z tym postem feelzdroid.com/2017/01/…
Naruto

Odpowiedzi:

59

To jest zdarzenie kliknięcia 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....");

    }
}); 

ten typ otworzył się na innej stronie z youtube, gdzie możesz pokazać swój film

Parag Chauhan
źródło
1
ten zależy od aap YouTube, w przeciwnym razie otwiera wideo w nowym webView, chcę odtwarzać wideo w VideoView nie w webview .. niż sugeruję w jakiś sposób plz.
Abid A. Chaudhary
3
VideoViewwymaga bezwzględnego adresu URL filmu, który w przypadku YouTube prawdopodobnie nie jest dostępny.
Aman Alam,
3
Jeśli jesteś zdezorientowany, dlaczego to może nie zadziałać, powinno być miejsce w newIntent. nowy zamiar
OrhanC1
10
Pytanie brzmi tak: „Nie chcę odtwarzać wideo przy użyciu domyślnych intencji”.
Naresh
18

Kroki

  1. Utwórz nową aktywność na ekranie swojego odtwarzacza (pełny ekran) z opcjami menu. Uruchom odtwarzacz mediów i interfejs użytkownika w różnych wątkach.

  2. Do odtwarzania multimediów - ogólnie do odtwarzania audio / wideo w systemie Android jest dostępny interfejs API odtwarzacza multimediów. FILE_PATH to ścieżka do pliku - może to być strumień URL (youtube) lub lokalna ścieżka do pliku

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

Zobacz także: Aplikacja YouTube na Androida Play Video Intent już to szczegółowo omówiono.

Naresh
źródło
8
w jaki sposób FILE_PATH może wskazywać na film z YouTube? Link do youtube do strony internetowej, która odtwarza wideo, a nie link do samego pliku.
Marty Miller,
3
Youtube nie ma żadnego bezwzględnego adresu URL. Taka była pierwotna troska PO.
noob
1
@MartyMiller Pobieranie adresu URL transmisji z youtube to inna kwestia. Dotyczy to interfejsów API YouTube.
Naresh
11

Użyj 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);
        }
    });
}
}

i klasa 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";
}

Zastąp „Hce74cEAAaE” swoim identyfikatorem wideo z https://www.youtube.com/watch?v=Hce74cEAAaE . Pobierz swój API_KEY z Console.developers.google.com, a także zamień go na PlayerConfig.API_KEY. Aby uzyskać więcej informacji, postępuj zgodnie z następującym samouczkiem krok po kroku: https://www.youtube.com/watch?v=3LiubyYpEUk

Andreas Konstantakos
źródło
Jeśli chcę użyć dynamicznego identyfikatora wideo, otrzymuję komunikat „YouTubeAndroidPlayerAPI: konfiguracja osadzania nie jest obsługiwana w RemoteEmbeddedPlayer”. błąd i nie odtwarza mojego filmu. Możesz mi pomóc ... Z góry dziękuję.
amit pandya
youTubePlayerView.initialize nie istnieje, może został usunięty?
Alberto M
5

Nie chciałem mieć aplikacji YouTube na urządzeniu, więc skorzystałem z tego samouczka:

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

... aby stworzyć ten kod w mojej aplikacji:

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>     

To działało tak, jak chciałem. Nie odtwarza się automatycznie, ale wideo jest przesyłane strumieniowo w mojej aplikacji. Warto zauważyć, że niektóre filmy z ograniczeniami nie będą odtwarzane po osadzeniu.

JanB
źródło
1
Tak, masz rację osadzoną w swojej aplikacji z przeglądarką internetową bez interfejsu API YouTube. Dobry sposób na ładowanie wideo w aplikacji, dziękuję JanB
Ajay Pandya
Świetne, łatwe rozwiązanie, które nie wymaga rejestracji klucza API, takiego jak YouTube Android Player API . Pracował dla mnie!
Michael Osofsky
3

Możesz użyć iframe zgodnie z opisem na https://developers.google.com/youtube/iframe_api_reference

Nie postępuję zgodnie z zaleceniami Google, ale to jest kod, którego używam i działa dobrze

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

w / asset mam plik o nazwie 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>

a teraz definiuję widok sieciowy w moim głównym układzie

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

i używam CWebVideoView w mojej działalności

videoView = (WebView) view.findViewById(R.id.video);
videoView.setVisibility(View.VISIBLE);
cWebVideoView = new CWebVideoView(context, videoView);
cWebVideoView.load(url);
jmhostalet
źródło
Dzięki za odpowiedź. Czy możesz umieścić zrzut ekranu, abyśmy mogli zobaczyć również wynik kodu?
Saeed Jassani
2

Ta odpowiedź może być naprawdę późna, ale jest przydatna.

Możesz odtwarzać filmy z YouTube'a w samej aplikacji za pomocą android-youtube-player .

Niektóre fragmenty kodu:

Aby odtworzyć wideo z YouTube, które ma identyfikator wideo w adresie URL, po prostu wywołaj OpenYouTubePlayerActivityintencję

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

gdzie v jest identyfikatorem wideo.

Dodaj następujące uprawnienia w pliku manifestu:

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

a także zadeklaruj tę aktywność w pliku manifestu:

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

Więcej informacji można znaleźć w pierwszych częściach tego pliku kodu.

Mam nadzieję, że to pomoże każdemu!

Rat-a-tat-a-tat Ratatuj
źródło
2

Google ma interfejs API odtwarzacza YouTube Android, który umożliwia włączenie funkcji odtwarzania wideo do aplikacji na Androida. Samo API jest bardzo łatwe w użyciu i działa dobrze. Na przykład poniżej opisano, jak utworzyć nowe działanie do odtwarzania wideo za pomocą interfejsu API.

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

Zobacz to, aby uzyskać więcej informacji.

Sapan Diwakar
źródło
1

możesz użyć tego projektu do odtwarzania dowolnego wideo z YouTube w aplikacji na Androida. Teraz dla innego wideo lub identyfikatora wideo ... możesz to zrobić https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ gdzie eminemvevo = kanał .

po znalezieniu identyfikatora wideo możesz go umieścić cueVideo("video_id")

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

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

Specjalnie do lepszego odczytania tego video_id otwórz to i jako plik xml [ 1st_file] na pulpicie po utworzeniu nowego pliku Xml w twoim projectlub załadowaniu tego [ 1st_file] zapisanego pliku do twojego projektu i kliknięciu prawym przyciskiem myszy w nim, i otwórz go za pomocą pliku xml_editor, tutaj znajdziesz identyfikator wideo konkretnego wideo.

wprowadź opis obrazu tutaj

Tushar Pandey
źródło
1
MediaPlayer mp=new MediaPlayer(); 
mp.setDataSource(path);
mp.setScreenOnWhilePlaying(true);
mp.setDisplay(holder);
mp.prepare();
mp.start();
user1642835
źródło
-6
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watchv=cxLG2wtE7TM"));
startActivity(intent);
Hassanuzzaman Khan
źródło
Naprawdę? „Nie chcę odtwarzać wideo przy użyciu domyślnej intencji”, przedostatnia linia.
Squirrelkiller
To tylko powtórzenie tej istniejącej odpowiedzi .
Pang