2013-07-03 9 views
3

꽤 많은 질문이 있습니다. 모두 살펴 보았지만 올바른 답을 찾지 못했거나 올바른 답변이 YouTube API 변경으로 인해 오래된 것입니다. 최상의 답변을 찾으려면 설명서의 영역으로 나가기 전에 YouTube 동영상을 스트리밍하는 길은 무엇인지 물어보고 싶습니다. 나는 YouTube 플레이어 API를 사용하고 Youtube 앱을 설치하도록 사용자를 제한하는 것이 거의 끔찍한 접근이라고 생각합니다.Youtube 앱없이 YouTube 동영상을 스트리밍

아래에 제안 된 방법을 사용하면 유튜브 플레이어 Api

을 통해 재생할 수 있음에도 불구하고 "미안합니다.이 비디오를 재생할 수 없습니다"
07-03 16:58:47.139: D/MediaPlayer(20518): getMetadata 
07-03 16:58:47.139: E/MediaPlayerService(82): getMetadata failed -38 
07-03 16:58:47.680: E/ARTSPConnection(82): err = 111 (Connection refused) 
07-03 16:58:47.680: I/MyHandler(82): connection request completed with result -111 (Connection refused) 
07-03 16:58:47.740: E/MediaPlayer(20518): error (1, -2147483648) 
07-03 16:58:47.740: E/MediaPlayer(20518): Error (1,-2147483648) 
07-03 16:58:47.740: D/VideoView(20518): Error: 1,-2147483648 

답변

3

new VideoAsyncTask(). execute(); // 동영상보기에서 동영상을 재생하도록 전화하십시오.

private class VideoAsyncTask extends AsyncTask<Void, Void, Void> { 
    ProgressDialog progressDialog; 
    String videoUrl; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = ProgressDialog.show(GallaryActivity.this, "", 
       "Loading Video wait...", true); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      // 

      String id = videosBean.getV_youtubelink(); //id of video 

      String url = "http://www.youtube.com/watch?v=" + id; 
      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(); 
     */ 

     if (myvideoview.isPlaying()) 
      myvideoview.stopPlayback(); 
     myvideoview.setVideoURI(Uri.parse(videoUrl)); 
     MediaController mc = new MediaController(GallaryActivity.this); 
     myvideoview.setMediaController(mc); 
     myvideoview.requestFocus(); 

     myvideoview.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

방금 ​​시도 했으므로 업데이트 된 질문보기 – Datenshi

+0

감사합니다. 나는 Youtube 앱을 가지고 있지 않은 OUYA를위한 앱을 개발 중이다. 그래서 일반 Youtube API를 사용할 수 없다. 귀하의 솔루션은 바로 사용 가능했습니다! –

+0

더 이상 유효하지 않다고 생각합니다. 'https : // gdata.youtube.com/feeds/api/videos /'는 '더 이상 사용할 수없는'문자열을 반환합니다. –

-2

@Datenshi Android 용 YouTube API 사용에 대해 생각해 보았습니다. 그들은 당신에게 비디오에 대한 많은 제어와 이벤트 청취 능력을 제공하는 훌륭한 playerview를 가지고 있습니다. 최근에 API를 사용하는 방법에 대한 자습서를 게시했습니다. 귀하의 필요에 맞을 수도 있습니다. here

관련 문제