2012-12-11 26 views
21

Sto sviluppando un'applicazione Android che richiede un video player di YouTube incorporato al suo interno. Ho ottenuto con successo l'URL video RTSP dall'API, ma durante il tentativo di caricare questo URL rtsp nella mia vista video Android, si dice "Can't play this video.". In precedenza ho sviluppato un'applicazione simile in questo metodo, e ha funzionato bene in quel momento, ma non riusciva a caricare ora.Come riprodurre i video di Youtube in Android Video View?

Ne sono sicuro, sto ricevendo l'URL RTSP corretto dall'API. rtsp://v6.cache6.c.youtube.com/CiULENy73wIaHAlV9VII3c64lRMYESARFEgGUglwbGF5bGlzdHMM/0/0/0/video.3gp

Ecco il mio codice di attività:

mVideoURL = getIntent().getStringExtra("EXT_URL"); 
    Log.i("VIDEO URL", " " + mVideoURL); 

    MediaController mc = new MediaController(this); 
    mVideoStreamView = (VideoView) findViewById(R.id.vidPlayer); 

    mVideoStreamView.setVideoURI(Uri.parse(mVideoURL)); 
    mVideoStreamView.setMediaController(mc); 
    mVideoStreamView.requestFocus(); 
    mVideoStreamView.start(); 

EDIT Trovato alcune informazioni aggiuntive dal logcat:

ARTSPConnection(6607): status: RTSP/1.0 200 OK 
ASessionDescription(6607): v=0 
ASessionDescription(6607): o=GoogleStreamer 378992432 328144046 IN IP4 74.125.213.182 
ASessionDescription(6607): s=Video 
ASessionDescription(6607): c=IN IP4 0.0.0.0 
ASessionDescription(6607): b=AS:29 
ASessionDescription(6607): t=0 0 
ASessionDescription(6607): a=control:* 
ASessionDescription(6607): a=range:npt=0-1703.000000 
ASessionDescription(6607): m=video 0 RTP/AVP 98 
ASessionDescription(6607): b=AS:17 
ASessionDescription(6607): a=rtpmap:98 H263-2000/90000 
ASessionDescription(6607): a=control:trackID=0 
ASessionDescription(6607): a=cliprect:0,0,144,176 
ASessionDescription(6607): a=framesize:98 176-144 
ASessionDescription(6607): a=fmtp:98 profile=0;level=10 
ASessionDescription(6607): m=audio 0 RTP/AVP 99 
ASessionDescription(6607): b=AS:12 
ASessionDescription(6607): a=rtpmap:99 AMR/8000/1 
ASessionDescription(6607): a=control:trackID=1 
ASessionDescription(6607): a=fmtp:99 octet-align 
ARTSPConnection(6607): status: RTSP/1.0 200 OK 
ARTSPConnection(6607): status: RTSP/1.0 200 OK 
ARTSPConnection(6607): status: RTSP/1.0 200 OK 
ARTSPConnection(6607): status: RTSP/1.0 200 OK 
ARTSPConnection(6607): status: RTSP/1.0 200 OK 
ASessionDescription(6607): v=0 
ASessionDescription(6607): o=GoogleStreamer 1299458498 503248054 IN IP4 74.125.213.182 
ASessionDescription(6607): s=Video 
ASessionDescription(6607): c=IN IP4 0.0.0.0 
ASessionDescription(6607): b=AS:29 
ASessionDescription(6607): t=0 0 
ASessionDescription(6607): a=control:* 
ASessionDescription(6607): a=range:npt=0-1703.000000 
ASessionDescription(6607): m=video 0 RTP/AVP 98 
ASessionDescription(6607): b=AS:17 
ASessionDescription(6607): a=rtpmap:98 H263-2000/90000 
ASessionDescription(6607): a=control:trackID=0 
ASessionDescription(6607): a=cliprect:0,0,144,176 
ASessionDescription(6607): a=framesize:98 176-144 
ASessionDescription(6607): a=fmtp:98 profile=0;level=10 
ASessionDescription(6607): m=audio 0 RTP/AVP 99 
ASessionDescription(6607): b=AS:12 
ASessionDescription(6607): a=rtpmap:99 AMR/8000/1 
ASessionDescription(6607): a=control:trackID=1 
ASessionDescription(6607): a=fmtp:99 octet-align 
ARTSPConnection(6607): status: RTSP/1.0 461 Unsupported Transport 
ARTSPConnection(6607): status: RTSP/1.0 461 Unsupported Transport 

Per favore mi suggeriscono un modo per caricare i video di YouTube in video vista Android .

Grazie in anticipo ...

EDIT appena controllato in un altro dispositivo, HTC Desire (2.2). Il codice ha funzionato bene. Mi chiedo come pensi, quale sarà il problema con Nexus (4.1) ??

+0

verificarlo: http://stackoverflow.com/questions/5162088/video-view-not-playing-youtube-video –

+0

si dovrebbe usare youtube API per Android, è il modo più semplice – vuhung3990

+0

Ecco il link che aiuterà .. http://www.truiton.com/2013/08/android-videoview-example-with-youtube-playback/ –

risposta

27

Poiché non riesco a trovare alcun modo per caricare l'URL rtsp nella visualizzazione video (per tutte le versioni di dispositivi &), ho risolto il mio problema con un altro lavoro. Ho usato una webview per incorporare il player di youtube al suo interno, e questo metodo funziona bene su tutti i dispositivi testati.

Ecco il mio codice:

mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.getSettings().setPluginState(PluginState.ON); 
mWebView.loadUrl("http://www.youtube.com/embed/" + videoID + "?autoplay=1&vq=small"); 
mWebView.setWebChromeClient(new WebChromeClient()); 

La ringrazio molto per il vostro aiuto ragazzi.

+7

Questo dovrebbe essere obbligatorio con lettore flash nel dispositivo, ma ora l'Android (sopra 4.0) non supporta più il contenuto flash –

+0

Usa questo link .. http://www.truiton.com/2013/08/android-videoview-example-with-youtube-playback/ –

0

Utilizzando Video Vista:

1.Code nel xml di layout:

<VideoView 

     android:layout_width=”wrap_content” 

     android:layout_height=”wrap_content” 

     android:id=”@+id/YoutubeVideoView” /> 

2.Code in classe Java:

VideoView v = (VideoView) findViewById(R.id.YoutubeVideoView); 

v.setVideoURI(Uri.parse(“rtsp://v4.cache3.c.youtube.com/CjYLENy73wIaLQlW_ji2apr6AxMYDSANFEIJbXYtZ29vZ2xlSARSBXdhdGNoYOr_86Xm06e5UAw=/0/0/0/video.3gp”)); 

v.setMediaController(new MediaController(this)); //sets MediaController in the video view 

// MediaController containing controls for a MediaPlayer        

v.requestFocus();//give focus to a specific view 

v.start();//starts the video 

Abbiamo impostato il VIDEOURI specificando il link 3gp di video di YouTube per piattaforme mobili. Per aggiungere controlli multimediali come Riproduci, Pausa, Riavvolgi, Avanzamento rapido e un cursore di avanzamento, aggiungiamo MediaController alla VideoView.

uri.parse (link 3gp del video) ... è possibile ottenere questo da youtube

+0

Sto anche usando questo stesso metodo, ma il video non si sta caricando. Penso che potrebbe essere un problema con il protocollo rtsp nella mia rete. Ho modificato la mia domanda per includere alcuni registri. Si prega di dare un'occhiata .. Grazie per il vostro tempo .. – Midhu

+0

im postare un altro codice che ti aiuta a ottenere l'URL RTSP per il video .. Spero che questo ti aiuti ..... –

+0

basta dare un'occhiata ... –

14
private class YourAsyncTask extends AsyncTask<Void, Void, Void> 
    { 
     ProgressDialog progressDialog; 

     @Override 
     protected void onPreExecute() 
     { 
      super.onPreExecute(); 
      progressDialog = ProgressDialog.show(AlertDetail.this, "", "Loading Video wait...", true); 
     } 

     @Override 
     protected Void doInBackground(Void... params) 
     { 
      try 
      { 
       String url = "http://www.youtube.com/watch?v=1FJHYqE0RDg"; 
       videoUrl = getUrlVideoRTSP(url); 
       Log.e("Video url for playing=========>>>>>", videoUrl); 
      } 
      catch (Exception e) 
      { 
       Log.e("Login Soap Calling in Exception", e.toString()); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) 
     { 
      super.onPostExecute(result); 
      progressDialog.dismiss(); 
/* 
      videoView.setVideoURI(Uri.parse("rtsp://v4.cache1.c.youtube.com/CiILENy73wIaGQk4RDShYkdS1BMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp")); 
      videoView.setMediaController(new MediaController(AlertDetail.this)); 
      videoView.requestFocus(); 
      videoView.start();*/    
      videoView.setVideoURI(Uri.parse(videoUrl)); 
      MediaController mc = new MediaController(AlertDetail.this); 
      videoView.setMediaController(mc); 
      videoView.requestFocus(); 
      videoView.start();   
      mc.show(); 
     } 

    } 

public static String getUrlVideoRTSP(String urlYoutube) 
    { 
     try 
     { 
      String gdy = "http://gdata.youtube.com/feeds/api/videos/"; 
      DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
      String id = extractYoutubeId(urlYoutube); 
      URL url = new URL(gdy + id); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      Document doc = documentBuilder.parse(connection.getInputStream()); 
      Element el = doc.getDocumentElement(); 
      NodeList list = el.getElementsByTagName("media:content");///media:content 
      String cursor = urlYoutube; 
      for (int i = 0; i < list.getLength(); i++) 
      { 
       Node node = list.item(i); 
       if (node != null) 
       { 
        NamedNodeMap nodeMap = node.getAttributes(); 
        HashMap<String, String> maps = new HashMap<String, String>(); 
        for (int j = 0; j < nodeMap.getLength(); j++) 
        { 
         Attr att = (Attr) nodeMap.item(j); 
         maps.put(att.getName(), att.getValue()); 
        } 
        if (maps.containsKey("yt:format")) 
        { 
         String f = maps.get("yt:format"); 
         if (maps.containsKey("url")) 
         { 
          cursor = maps.get("url"); 
         } 
         if (f.equals("1")) 
          return cursor; 
        } 
       } 
      } 
      return cursor; 
     } 
     catch (Exception ex) 
     { 
      Log.e("Get Url Video RTSP Exception======>>", ex.toString()); 
     } 
     return urlYoutube; 

    } 

protected static String extractYoutubeId(String url) throws MalformedURLException 
    { 
     String id = null; 
     try 
     { 
      String query = new URL(url).getQuery(); 
      if (query != null) 
      { 
       String[] param = query.split("&"); 
       for (String row : param) 
       { 
        String[] param1 = row.split("="); 
        if (param1[0].equals("v")) 
        { 
         id = param1[1]; 
        } 
       } 
      } 
      else 
      { 
       if (url.contains("embed")) 
       { 
        id = url.substring(url.lastIndexOf("/") + 1); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Log.e("Exception", ex.toString()); 
     } 
     return id; 
    } 
+0

I'm ottenendo con successo l'URL RTSP dall'API di YouTube. Il mio problema è che non riesco a caricare quell'URL nella vista video. Ho appena scoperto che il problema è correlato con alcune impostazioni del protocollo rtsp nella mia rete. – Midhu

+0

quindi funziona .... non esiste alcun problema per implementare questo –

+0

quali sono le impostazioni di rete –

0

Dipende da quale formato video codec si sta ricezione del vostro RTSP. Ci sono alcuni dispositivi che non supportano il file .mp4 in esecuzione. Passare attraverso Android Media support per ulteriori informazioni. Controlla se puoi riprodurre altri file .3gp o meno.

+0

Sto ricevendo l'URL video RTSP dall'API di YouTube. Sono file .3gp. C'è un modo per caricare quel video in? VideoView', versione 4.1 di Android. Sto ricevendo output corretto mentre provo il codice con la versione 2.2 Grazie per il tuo tempo – Midhu

1

Acquista questo link. Spiega come implementare i video di YouTube in VideoView.

1

Utilizzare l'API YouTube Player di YouTube. Funziona perfettamente. Controllare il mio esempio da qui:

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

sostituire la "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 ulteriori informazioni è possibile seguire il seguente tutorial passo dopo passo: https://www.youtube.com/watch?v=3LiubyYpEUk

+0

Mentre questo link può rispondere alla domanda, è meglio includere l'essenziale parti della risposta qui e fornire il collegamento per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/15827116) –

+1

Suppongo che sia utile ora. –

Problemi correlati