android - 如何在视频 View 中播放 youtube 视频

标签 android youtube android-videoview

我正在开发在 videoview 中播放 youtube 视频,我收到类似“无法播放此视频” 的错误。我使用此代码在视频 View 中播放 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 文件, 我收到 url 错误并且无法在尝试服务器端的客户端打开文件

 <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 视频 View 中加载 youtube 视频的方法。

提前致谢...

最佳答案

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

关于android - 如何在视频 View 中播放 youtube 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27854331/

相关文章:

android - 为什么视频 View 大小会根据视频大小自动更改?

Java读取超时不起作用

android - Android 对话框的最佳实践 - 如何避免应用程序因关闭对话框而崩溃

android - 改变 getRecentTasks 的结果

java - 输出文本文件中最长的单词

javascript - 使用 JavaScript API 淡入淡出 Youtube 视频

android - 如何获取VideoView getcurrentPosition 并设置seekTo 希望位置无法正常工作?

android - 当互联网不存在时播放视频

php - 使用 Youtube API 检索基本数据

ios - Google OAuth token 在一段时间后停止工作(iOS 7 应用程序)