2011-05-06 330 views
1

我使用下面的類來播放YouTube視頻:
http://keyeslabs.com/joomla/samplecode/introvideoactivity/IntroVideoActivity.java如何在android中播放youtube視頻?

main Activity contain code: 
Intent lVideoIntent = new Intent(null, Uri.parse("ytv:jRB8dQ5kiLg"), youtube1.this, IntroVideoActivity.class); 
startActivity(lVideoIntent); 

它加載視頻,但經過一段時間後給出了一個錯誤「抱歉,該視頻無法播放」

並在日誌中給出如下的錯誤。

-> http://www.youtube.com/get_video?video_id=jRB8dQ5kiLg&t=vjVQa1PpcFPMdWwPOC2JchyOxvrnNsRs1UyVc7gGd5I%3D&fmt=18 
-> ERROR/HTTPDataSource(34): HTTP request failed w/ http status 404 
-> INFO/AwesomePlayer(34): mConnectingDataSource->connect() returned -1004 
-> ERROR/MediaPlayer(541): error (1, -1004) 

我不明白我的錯誤在哪裏。誰能幫我?

+0

你爲什麼不只是使用: startActivity(新意圖(Intent.ACTION_VIEW,Uri.parse(<鏈接到YouTube視頻>))) ; 而不是第三方代碼? – TofferJ 2011-05-06 14:42:38

+2

好主意@TofferJ,但我認爲圖書館正在使用,因此視頻在應用內播放 - 不會在單獨的YouTube應用中播放。 – 2011-05-06 14:46:24

+0

您確定YouTube網址正確嗎? HTTP 404錯誤意味着無法找到URL - 「找不到頁面」錯誤。這正是我嘗試使用該URL時所得到的結果。也許該庫所生成的URL不再是YouTube使用的API?我會檢查YouTube API文檔以確保正確生成URL。 – 2011-05-06 14:49:25

回答

0

HTTP request failed w/ http status 404是一個頁面未找到錯誤,所以我會建議網址是錯誤的。我嘗試了錯誤中的鏈接,它是一個空白頁面。

+0

感謝您的回放。我嘗試了下面的鏈接,但這不適合我。給出錯誤抱歉,此視頻無法播放........ http://www.youtube.com/v/jRB8dQ5kiLg – 2011-05-10 12:27:10

+0

如果您發現我的答案正確或有用,請接受它或投票它。 – techiServices 2011-05-10 14:23:28

-1

使用嵌入式鏈接我可以播放youtube視頻。

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/embed/"+sn+"?autoplay=1")); 
startActivityForResult(i, 0); 
3

嘗試這樣:

public class MainActivity extends Activity { 


VideoView mVideoView; 
ProgressBar mProgressBar; 
ProgressDialog mProgressDialog; 
String url, videoUrl; 
Uri rstlUrl; 
String[] urlRstp; 

@Override 
protected void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mVideoView=(VideoView)findViewById(R.id.videoView); 
    mProgressBar=(ProgressBar)findViewById(R.id.progressBarV); 
    videoUrl=getIntent().getExtras().getString("urla"); 
//from other activity here... videoUrl is sth like : http://www.youtube.com/watch?v=ER9vmhxFucg 


    new MyTask().execute(); 


} 
public class MyTask extends AsyncTask<Void, Void, Void> 
{ 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressBar.setVisibility(LinearLayout.VISIBLE); 

    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     url=getUrlVideoRTSP(videoUrl); 
     rstlUrl=Uri.parse(url); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 


     mVideoView.setVideoURI(rstlUrl); 
     MediaController mc = new MediaController(VODVideoPlayActivity.this); 
     mVideoView.setMediaController(mc); 
     mVideoView.requestFocus(); 
     mVideoView.start();   
     mc.show(); 
     mProgressBar.setVisibility(LinearLayout.GONE);   
    } 




} 

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; 
    } 
相關問題