2012-12-11 5 views
21

Ich entwickle eine Android-Anwendung, die einen Youtube-Video-Player erfordert. Ich habe erfolgreich die RTSP-Video-URL von der API erhalten, aber während ich versuche, diese rtsp-URL in meine Android-Videoansicht zu laden, heißt es "Can't play this video.". Zuvor entwickelte ich eine ähnliche Anwendung in dieser Methode, und es funktionierte zu dieser Zeit gut, aber es wird jetzt auch nicht geladen.Wie kann ich Youtube-Videos in der Android-Videoansicht wiedergeben?

Ich bin mir sicher, dass ich die richtige RTSP-URL von der API bekomme. rtsp://v6.cache6.c.youtube.com/CiULENy73wIaHAlV9VII3c64lRMYESARFEgGUglwbGF5bGlzdHMM/0/0/0/video.3gp

Hier ist mein Aktivitätscode:

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 einige zusätzliche Informationen aus dem logcat Gefunden:

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 

Bitte mir einen Weg vorschlagen, YouTube-Videos in android video zu laden .

Vielen Dank im Voraus ...

EDIT gerade in einem anderen Gerät überprüft, HTC Desire (2.2). Der Code hat gut funktioniert. Ich frage mich zu denken, was wird das Problem mit Nexus (4.1) sein?

+0

überprüfen Sie dies: http://StackOverflow.com/Questions/5162088/Video-view-Not-Playing-Youtube-Video –

+0

sollten Sie youtube verwenden API für Android, es ist sehr einfach – vuhung3990

+0

Hier ist der Link wird es helfen .. http://www.truiton.com/2013/08/android-videoview-example-with-youtube-playback/ –

Antwort

27

Da ich keine Möglichkeit finde, die rtsp URL in der Videoansicht zu laden (für alle Geräte & android Versionen), löste ich mein Problem mit einer anderen Arbeit herum. Ich benutzte eine Webansicht, um den Youtube Player darin einzubetten, und diese Methode funktionierte gut in allen getesteten Geräten.

Hier ist mein Code:

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

Vielen Dank für Ihre Hilfe Jungs.

+7

Dies sollte zwingend Player im Gerät flashen, aber jetzt der Android (über 4.0) nicht mehr unterstützt Flash-Inhalte –

+0

Verwenden Sie diesen Link .. http://www.truiton.com/2013/08/android-videoview-example-with-youtube-playback/ –

0

mit Video-Anzeigen:

1.Code im Layout xml:

<VideoView 

     android:layout_width=”wrap_content” 

     android:layout_height=”wrap_content” 

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

2.Code in Java-Klasse:

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 

Wir setzen den VideoUri durch die 3gp Link Angabe von Youtube Video für mobile Plattformen. Um Media Controls wie Play, Pause, Rewind, Fast Forward und einen Fortschrittsregler hinzuzufügen, fügen wir MediaController dem VideoView hinzu.

uri.parse (3gp Link des Videos) ... können Sie dies von youtube bekommen

+0

Ich benutze auch die gleiche Methode, aber das Video wird nicht geladen. Ich denke, es kann in meinem Netzwerk rtsp Protokoll Problem sein. Ich habe meine Frage bearbeitet, um einige Protokolle hinzuzufügen. Bitte schauen Sie nach .. Danke für Ihre Zeit .. – Midhu

+0

im posting einen anderen Code, der Ihnen hilft, RTSP URL für Video zu bekommen ..hope das wird Ihnen helfen ..... –

+0

überprüfen Sie es einfach ... –

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

Ich bin erfolgreich erhalten die RTSP-URL von YouTube-API. Mein Problem ist, dass ich diese URL nicht in der Videoansicht laden kann. Ich finde es gerade jetzt heraus, dass das Problem mit einigen Rtsp-Protokolleinstellungen in meinem Netzwerk zusammenhängt. – Midhu

+0

so funktioniert es .... es gibt kein solches Problem zu implementieren –

+0

Was sind die Netzwerkeinstellungen –

0

es auf Sie Ihre rtsp sind recieving welche Video-Codec-Format abhängt. Es gibt bestimmte Geräte, die das Ausführen der .mp4-Datei nicht unterstützen. Gehen Sie durch Android Media support für weitere Informationen. Überprüfen Sie, ob Sie andere .3gp-Dateien spielen können oder nicht.

+0

Ich empfange RTSP Video URL von Youtube API. Sie sind .3gp Dateien. Gibt es eine Möglichkeit, das Video in ' VideoView', Android Version 4.1.Ich bekomme korrekte Ausgabe, während Sie den Code mit Version 2.2 versuchen.This für Ihre Zeit – Midhu

1

Kasse diese link. Es wird erläutert, wie Sie YouTube-Videos in VideoView implementieren.

1

Verwenden Sie die YouTube Android Player-API. Es funktioniert perfekt. Überprüfen Sie mein Beispiel von hier:

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

und die PlayerConfig.java Klasse:

package com.example.andreaskonstantakos.vfy; 

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

public class PlayerConfig { 

PlayerConfig(){} 

public static final String API_KEY = 
"xxxxx"; 
} 

Ersetzen Sie die „Hce74cEAAaE "mit Ihrer Video ID von https://www.youtube.com/watch?v=Hce74cEAAaE. Hol dir deinen API_KEY von Console.developers.google.com und ersetze ihn auch auf PlayerConfig.API_KEY. Für weitere Informationen können Sie das folgende Tutorial Schritt für Schritt folgen: https://www.youtube.com/watch?v=3LiubyYpEUk

+0

Während dieser Link die Frage beantworten kann, ist es besser, das Wesentliche einzubeziehen Teile der Antwort hier und bieten den Link als Referenz. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/15827116) –

+1

Ich denke, es ist jetzt nützlich. –

Verwandte Themen