it-swarm.com.de

Wie kann ich Youtube-Videos in der Android-Videoansicht abspielen?

Ich entwickle eine Android-Anwendung, die einen eingebetteten Youtube-Video-Player erfordert. Ich habe die RTSP-Video-URL erfolgreich von der API erhalten, aber beim Versuch, diese Rtsp-URL in meine Android-Videoansicht zu laden, wird "Can't play this video." angezeigt. Zuvor habe ich eine ähnliche Anwendung in dieser Methode entwickelt, die damals gut funktioniert hat, aber jetzt nicht geladen werden konnte.

Ich bin mir sicher, ich bekomme die korrekte RTSP-URL von der API. 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 schlage mir eine Möglichkeit vor, YouTube-Videos in die Android-Videoansicht zu laden.

Danke im Voraus...

EDIT Ein anderes Gerät, das HTC Desire (2.2), wurde eingecheckt. Der Code hat gut funktioniert ... Ich frage mich, was ist das Problem mit Nexus (4.1)?

27
Midhu

Da ich keine Möglichkeit finde, die rtsp-URL in der Videoansicht zu laden (für alle Geräte und Android-Versionen), habe ich mein Problem mit einer anderen Problemlösung gelöst. Ich habe den YouTube-Player mit einem Webview eingebettet, und diese Methode funktioniert gut mit 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 all Ihre Hilfe Jungs.

31
Midhu
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;
    }
13
Nipun Gogia

Aufgrund der aktuellen Version von YouTube erhalten Sie wahrscheinlich die Fehlermeldung "Dieses Video kann nicht abgespielt werden", wenn Sie VideoView zum Anzeigen Ihres Videos verwenden.

Sehen Sie sich diese Approcach mit YouTubePlayerView: http://xinyustudio.wordpress.com/2014/03/17/Android-development-play-youtube-video-in-your-app-cant-play- an dieses Video-und-Fehlerbehebung/

5
Sergii

Verwenden Sie die YouTube-Android-Player-API von YouTube. 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>

Hauptaktivität.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 "Hce74cEAAaE" durch Ihre Video-ID von https://www.youtube.com/watch?v=Hce74cEAAaE . Laden Sie Ihr API_KEY von Console.developers.google.com herunter und ersetzen Sie es auch in der PlayerConfig.API_KEY. Für weitere Informationen können Sie Schritt für Schritt dem folgenden Tutorial folgen: https://www.youtube.com/watch?v=3LiubyYpEUk

Überprüfen Sie diesen Link . Es wird erläutert, wie Sie Youtube-Video in VideoView implementieren. 

1
Muhammad Adil

Es hängt davon ab, welches Video-Codec-Format Sie von Ihrem rtsp empfangen. Es gibt bestimmte Geräte, die die Ausführung der .mp4-Datei nicht unterstützen. Gehen Sie durch Android Media-Unterstützung , um weitere Informationen zu erhalten. Prüfen Sie, ob Sie andere .3gp-Dateien abspielen können oder nicht.

0
Rashmi.B

Nach langer Suche habe ich diesen Weg gefunden. 

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.about_fragment, container, false);

    String frameVideo = "<html><body><br><iframe width=\"320\" height=\"200\" src=\"https://www.youtube.com/embed/XDYbEuY8nIc\" frameborder=\"0\" allowfullscreen></iframe></body></html>";

    WebView displayYoutubeVideo = (WebView) rootView.findViewById(R.id.videoView);
    displayYoutubeVideo.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });
    WebSettings webSettings = displayYoutubeVideo.getSettings();
    webSettings.setJavaScriptEnabled(true);
    displayYoutubeVideo.loadData(frameVideo, "text/html", "utf-8");
  return rootView;
    }

in der layout.xml:

 <WebView Android:id="@+id/videoView"
            Android:layout_height="wrap_content"
            Android:layout_width="match_parent"
            Android:layout_marginTop="-45dp"
            Android:layout_marginLeft="-5dp"/>

Das wird gut funktionieren.

0
Ahmed Sadek

Verwenden der Videoansicht:

1.Code in der Layout-XML:

<VideoView

       Android:layout_width=”wrap_content”

       Android:layout_height=”wrap_content”

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

2. Code in der 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 legen die VideoUri fest, indem wir den 3GP-Link von Youtube-Video für mobile Plattformen angeben. Um Mediensteuerelemente wie Wiedergabe, Pause, Rücklauf, Schneller Vorlauf und einen Fortschrittsregler hinzuzufügen, fügen Sie dem VideoView MediaController hinzu.

uri.parse (3gp link des videos) ... das kannst du von youtube bekommen

0
Nipun Gogia