【问题标题】:how to play youtube videos in video view如何在视频视图中播放 youtube 视频
【发布时间】:2015-01-09 05:23:57
【问题描述】:

我正在开发以在 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 文件, 我收到 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 视频视图中加载 youtube 视频的方法。

在此先感谢...

【问题讨论】:

    标签: android youtube android-videoview


    【解决方案1】:

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

    【讨论】:

    • 我的要求是在我提到的视频视图中播放视频视图,你能帮我解决这个问题
    • 我有一个链接给你。希望它会工作truiton.com/2013/08/…
    • 我正在使用你的代码,但我得到“无法播放这个视频”我正在使用 micromax 设备你能告诉我什么问题吗?
    • 据我所知,无法播放此视频通知有两种情况:1.不支持的文件格式 2.由于缺少互联网访问权限
    • 我在清单中添加了互联网权限,而且我使用的视频网址与您的教程相同,即使我收到此错误我该怎么办?
    猜你喜欢
    • 2012-08-09
    • 2012-11-28
    • 1970-01-01
    • 2014-02-12
    • 2014-05-01
    • 2012-12-14
    • 1970-01-01
    • 2011-10-22
    • 2012-08-25
    相关资源
    最近更新 更多