Note that there are some explanatory texts on larger screens.

plurals
  1. POplay streaming in VideoView, convert url to rtsp
    primarykey
    data
    text
    <p>I need to play youtube video and record video in the same layout. </p> <p>To perform this I search for youtube api and found that android version need to be higher than 2.2, this ok but, i want to use VideoView.</p> <p>I saw some post here about this issue and decide eventually to use this code to watch video in VideoView.</p> <pre><code>videoView = (VideoView) findViewById(R.id.your_video_view); Log.d(TAG,getUrlVideoRTSP(current_url) + " id yotube1 " ); //here type the url... videoView.setVideoURI(Uri.parse(getUrlVideoRTSP(current_url))); videoView.setMediaController(new MediaController(this)); //sets MediaController in the video view videoView.requestFocus();//give focus to a specific view videoView.start();//starts the video </code></pre> <p>this code works, but just with <strong>rtsp</strong> link like this :</p> <pre><code>String exemple = "rtsp://v4.cache3.c.youtube.com/CjYLENy73wIaLQlW_ji2apr6AxMYDSANFEIJbXYtZ29vZ2xlSARSBXdhdGNoYOr_86Xm06e5UAw=/0/0/0/video.3gp"; </code></pre> <p>I have multiple link in url therefore I need code to convert url to RTSP, I can't do this manually, I check some code and all of them do not work...</p> <p>I try this: from here <a href="https://stackoverflow.com/questions/8150074/how-to-get-rtsp-url">How to get RTSP URL?</a></p> <pre><code>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 &lt; list.getLength(); i++) { Node node = list.item(i); if (node != null) { NamedNodeMap nodeMap = node.getAttributes(); HashMap&lt;String, String&gt; maps = new HashMap&lt;String, String&gt;(); for (int j = 0; j &lt; 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======&gt;&gt;", 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("&amp;"); 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; } </code></pre> <p>I use above method like this : </p> <pre><code>getUrlVideoRTSP(current_url) </code></pre> <p>when currnt_url to test is :</p> <pre><code>current_url = "http://m.youtube.com/#/watch?v=FlsBObg-1BQ" </code></pre> <hr> <p>I try this code and it does not work </p> <pre><code>private class Syncyoutube extends AsyncTask &lt;Void , Void , Void&gt;{ @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); /** videoView.setMediaController(new MediaController(this)); //sets MediaController in the video view // MediaController containing controls for a MediaPlayer videoView.requestFocus();//give focus to a specific view videoView.start();//starts the video */ } public String getRstpLinks(String code){ String[] urls = new String[3]; String link = "http://gdata.youtube.com/feeds/api/videos/" + code + "?alt=json"; String json = getJsonString(link); // here you request from the server try { JSONObject obj = new JSONObject(json); String entry = obj.getString("entry"); JSONObject enObj = new JSONObject(entry); String group = enObj.getString("media$group"); JSONObject grObj = new JSONObject(group); String content = grObj.getString("media$content"); JSONObject cntObj = new JSONObject(group); JSONArray array = grObj.getJSONArray("media$content"); for(int j=0; j&lt;array.length(); j++){ JSONObject thumbs = array.getJSONObject(j); String url = thumbs.getString("url"); urls[j] = url; Log.d(TAG, url); //data.setThumbUrl(thumbUrl); } Log.v(TAG, content); } catch (Exception e) { Log.e(TAG, e.toString()); urls[0] = urls[1] = urls[2] = null; } return urls[2]; } public String getJsonString(String url){ Log.e("Request URL", url); StringBuilder buffer = new StringBuilder(); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet( url ); HttpEntity entity = null; try { HttpResponse response = client.execute(request); if( response.getStatusLine().getStatusCode() == 200 ){ entity = response.getEntity(); InputStream is = entity.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; while( (line = br.readLine() )!= null ){ buffer.append(line); } br.close(); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { entity.consumeContent(); } catch (Exception e) { Log.e(TAG, "Exception = " + e.toString() ); } } return buffer.toString(); } @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub code = id_current_url(current_url); //here type the url... String rstp_url = getRstpLinks(code); videoView.setVideoURI(Uri.parse(rstp_url)); // the code crech in this line because null exeption // i chack this and discover that code variable is =tFXS9krT2VY , ok.. // but rstp_url variable in null Log.d(TAG,getRstpLinks(code) + " idan id yotube1 " ); return null; } } public String id_current_url (String url) { String c_id = null ; c_id = url.substring((url.lastIndexOf("=")), url.length()); return c_id ; } } </code></pre> <p>the code crash in " videoView.setVideoURI(Uri.parse(rstp_url)); " line because null exeption i chack this and discover that code variable is =tFXS9krT2VY , ok.. but rstp_url variable in null </p> <hr> <p>UdayKiran wrote this answer to similar Q , someone could explain what he means? <strong>i dont understand his answer</strong></p> <p>his answer : </p> <pre><code>Element rsp = (Element)entry.getElementsByTagName("media:content").item(1); String anotherurl=rsp.getAttribute("url"); </code></pre> <p>In gdata api only we are getting this type of links : rtsp://v3.cache7.c.youtube.com/CiILENy73wIaGQlOCTh0GvUeYRMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp</p> <p>These are playing in VideoView.</p> <hr> <p>finally i dont use this code and videoview for steaming </p> <p>i use youtube android api , it's work from android 2.2 not from 4.2 like i wrote in my Q , it was mastake. </p> <p>the result of using rtsp it's poor video quality and need to deal with aspect ratio.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload