title: play streaming in VideoView, convert url to rtsp
body: <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>