问题
I am trying to play a video in Android video view. but when i run the code it opens a media player but don't play the video and give me an error message and log cat shows "could't open the file at client side trying server side." here is my code:
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;
}
}
The log cat shows:
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:
The RTSP link is not working for any data provided by Youtube API v 2.0. And I don't think its going to be fixed. https://code.google.com/p/gdata-issues/issues/detail?id=4858
来源:https://stackoverflow.com/questions/20976238/couldt-open-file-on-client-side