无法在客户端打开文件

时间:2014-01-07 16:01:10

标签: android youtube android-videoview

我正在尝试在Android视频中播放视频。但是当我运行代码时,它会打开一个媒体播放器,但不播放视频,并给我一个错误消息,日志猫显示“无法在客户端尝试服务器端打开文件。”这是我的代码:

public class ExercisesActivity extends Activity {

VideoView videoView;
String videoUrl;
public boolean flage = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_exercises);

     videoView = (VideoView)findViewById(R.id.videoView);
    new performBackgroundTask(ExercisesActivity.this).execute();
}

public void onPause ()
{
super.onPause();
videoView.stopPlayback();
}

private class performBackgroundTask extends AsyncTask < Void, Void, Void >
{


                private ProgressDialog Dialog;

                    public performBackgroundTask(ExercisesActivity context)
                    {
                        Dialog = new ProgressDialog(context);
                    }                   



            protected void onPreExecute()
               {

                this.Dialog.setMessage("Loading Video...");
                this.Dialog.show();

              }


             protected Void doInBackground(Void... params)
             {
                 try
                 {
                     String url = "http://www.youtube.com/watch?v=m5_AKjDdqaU";
                     videoUrl = getUrlVideoRTSP(url);
                     Log.e("Video url for playing=========>>>>>", videoUrl);
                 }
                 catch (Exception e)
                 {
                     Log.e("Login Soap Calling in Exception", e.toString());
                 }
                          return null;
             }


            protected void onPostExecute(Void unused)
           {


                if(!flage){

                    if(Dialog.isShowing())
                    {
                        Dialog.dismiss();
                    }


                }
                else
                {
                    videoView.setVideoURI(Uri.parse(videoUrl));
        MediaController mc = new  MediaController(ExercisesActivity.this);
                    videoView.setMediaController(mc);
                    videoView.requestFocus();
                    videoView.start();          
                    mc.show();
                }

                    if(Dialog.isShowing())
                    {
                        Dialog.dismiss();
                    }
                }

            }


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;
    }

}

日志猫显示:

01-07 20:36:40.388: E/Video url for playing=========>>>>>(378):
rtsp://r4---sn-4g57kue6.c.youtube.com/CiILENy73wIaGQmlqd0wKsCfmxMYDSANFEgGUgZ2aWRlb3MM

/0/0/0/video.3gp
01-07 20:36:40.398: D/MediaPlayer(378): Couldn't open file on client side, trying
server side

1 个答案:

答案 0 :(得分:0)

RTSP链接不适用于Youtube API v 2.0提供的任何数据。我不认为它会被修复。 https://code.google.com/p/gdata-issues/issues/detail?id=4858