如何在视频视图中播放YouTube视频

时间:2015-01-09 05:23:57

标签: android youtube android-videoview

我正在开发在videoview中播放youtube视频,我收到错误,如"无法播放此视频" 。我使用此代码在视频视图中播放YouTube视频

public class MainActivity extends ActionBarActivity {


    private VideoView videoView;
     private MediaController mController;
     private Uri uriYouTube;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        videoView = (VideoView) findViewById(R.id.videoView1);
        mController = new MediaController(this);
        videoView.setMediaController(mController);
        videoView.requestFocus();


        if (savedInstanceState != null) {
             int loc = savedInstanceState.getInt("Loc");
             Log.i("Loaction: ", loc + "");
             uriYouTube = Uri.parse(savedInstanceState.getString("url"));
             videoView.setVideoURI(uriYouTube);
             videoView.seekTo(loc);


             videoView.setOnPreparedListener(new OnPreparedListener() {
             @Override
             public void onPrepared(MediaPlayer mp) {
             Log.v("onPrepared", "ok");
             mp.start();
             }
             });
             } else {
             RTSPUrlTask truitonTask = new RTSPUrlTask();
             truitonTask.execute("http://www.youtube.com/watch?v=2zNSgSzhBfM");
             }

             }

             void startPlaying(String url) {
             uriYouTube = Uri.parse(url);
             videoView.setVideoURI(uriYouTube);
             videoView.start();
             }

             @Override
             protected void onSaveInstanceState(Bundle outState) {
             super.onSaveInstanceState(outState);
             outState.putInt("Loc", videoView.getCurrentPosition());
             outState.putString("url", uriYouTube.toString());
             }

            /* @Override
             public boolean onCreateOptionsMenu(Menu menu) {
             getMenuInflater().inflate(R.menu.video_view, menu);
             return true;
             }*/

             private class RTSPUrlTask extends AsyncTask<String, Void, String> {
             @Override
             protected String doInBackground(String... urls) {
             String response = getRTSPVideoUrl(urls[0]);
             return response;
             }

             @Override
             protected void onPostExecute(String result) {
             startPlaying(result);
             }

             public String getRTSPVideoUrl(String urlYoutube) {
             try {
             String gdy = "http://gdata.youtube.com/feeds/api/videos/";
             DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance()
             .newDocumentBuilder();
             String id = extractYoutubeId(urlYoutube);
             URL url = new URL(gdy + id);
             HttpURLConnection connection = (HttpURLConnection) url
             .openConnection();
             Document doc = dBuilder.parse(connection.getInputStream());
             Element el = doc.getDocumentElement();
             NodeList list = el.getElementsByTagName("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) {
             return urlYoutube;
             }
             }

             public String extractYoutubeId(String url) throws MalformedURLException {
             String query = new URL(url).getQuery();
             String[] param = query.split("&");
             String id = null;
             for (String row : param) {
             String[] param1 = row.split("=");
             if (param1[0].equals("v")) {
             id = param1[1];
             }
             }
             return id;
             }
    }

这是我的xml文件, 我收到网址错误,无法在客户端尝试服务器端打开文件

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".VideoViewActivity"
    android:background="#000000" >

    <VideoView
        android:id="@+id/videoView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</RelativeLayout>

请建议我在Android视频视图中加载youtube视频。

提前致谢...

1 个答案:

答案 0 :(得分:1)

请使用YouTube Android播放器API https://developers.google.com/youtube/android/player/