How to play Youtube videos in Android Video View?
As I can't find any way to load the rtsp URL in video view (for all devices & android versions), I solved my problem with another work around. I used a webview to embed the youtube player within it, and this method working nicely in all tested devices.
Here is my 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());
Thank you very much for all your help guys.
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; }
Due to current version of YouTube you are likely to get a “Can’t play this video” error if you will use VideoView
to show your video.
Take a look at this approcach with YouTubePlayerView
:http://xinyustudio.wordpress.com/2014/03/17/android-development-play-youtube-video-in-your-app-cant-play-this-video-and-troubleshooting/