我想在VideoView上播放Youtube Video。我已经搜索了很多,发现VideoView支持rtsp URL视频。 但是我收到错误:我的Android设备是2.3.5并使用Wifi。 我的视频视图代码是:
final VideoView videoView = (VideoView) findViewById(R.id.VideoView);
Button youtube=(Button)findViewById(R.id.button1);
final MediaController mediaController = new MediaController(this);
mediaController.setScrollBarStyle(DEFAULT_KEYS_DISABLE);
mediaController.setPressed(true);
mediaController.setAnchorView(videoView);
Uri video = Uri.parse("rtsp://v3.cache7.c.youtube.com/CiILENy73wIaGQlOCTh0GvUeYRMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp");
// Uri video = Uri.parse(getUrlVideoRTSP("http://gdata.youtube.com/feeds/api/users/mashable/uploads?&v=2"));
videoView.setMediaController(mediaController);
videoView.setVideoURI(video);
videoView.requestFocus();
videoView.start();
我的日志猫错误是:
10-12 11:56:50.369: D/WindowManagerImpl(6880): addView, new view, mViews[0]: com.android.internal.policy.impl.PhoneWindow$DecorView@4055c4e0
10-12 11:56:50.430: I/AudioSystem(6880): getting audio flinger
10-12 11:56:50.430: I/AudioSystem(6880): returning new audio session id
10-12 11:56:50.430: D/MediaPlayer(6880): setDataSource(Context context, rtsp://v3.cache7.c.youtube.com/CiILENy73wIaGQlOCTh0GvUeYRMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp, Map<String, String> headers) in
10-12 11:56:50.460: I/MediaPlayer(6880): skip setting (httpproxyip,null)
10-12 11:56:50.460: I/MediaPlayer(6880): skip setting (httpproxyport,null)
10-12 11:56:50.460: I/MediaPlayer(6880): skip setting (rtspproxyip,null)
10-12 11:56:50.460: I/MediaPlayer(6880): skip setting (rtspproxyport,null)
10-12 11:56:50.460: I/MediaPlayer(6880): add setting (minudpport,1024)
10-12 11:56:50.460: I/MediaPlayer(6880): add setting (maxudpport,65535)
10-12 11:56:50.460: I/MediaPlayer(6880): add setting (buffertime,7)
10-12 11:56:50.460: I/MediaPlayer(6880): add setting (rtsptimeout,25000)
10-12 11:56:50.460: I/MediaPlayer(6880): add setting (rtptimeout,25000)
10-12 11:56:50.460: I/MediaPlayer(6880): add setting (rtcpreportinterval,3000)
10-12 11:56:50.460: I/MediaPlayer(6880): add setting (rtspkeepaliveinterval,35000)
10-12 11:56:50.460: D/MediaPlayer(6880): Couldn't open file on client side, trying server side
10-12 11:56:50.470: I/MediaPlayer(6880): disable CIQ
10-12 11:56:50.470: D/MediaPlayer(6880): setDataSource(Context context, rtsp://v3.cache7.c.youtube.com/CiILENy73wIaGQlOCTh0GvUeYRMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp, Map<String, String> headers) out
10-12 11:57:20.589: W/MediaPlayer(6880): info/warning (34355, 3000)
10-12 11:57:20.589: I/MediaPlayer(6880): Info (34355,3000)
10-12 11:57:20.599: E/MediaPlayer(6880): error (1, -1003)
10-12 11:57:20.599: E/MediaPlayer(6880): Error (1,-1003)
10-12 11:57:20.599: D/VideoView(6880): Error: 1,-1003
首先,您必须从YOutube频道获取视频。对于这个例子,下面的例子将帮助你。
在这里看到我的回答。 它会给你一个完美的主意。
此外,要在视频视图中播放视频,您需要视频的 rtsp 格式。
您可以将您的网址转换为 rtsp 格式,我为这里创建函数。
通过使用这种方式,我在安卓中播放 rtsp 视频。
videourl="rtsp://..........";
videoView = (VideoView) findViewById(R.id.video_View);
progressDialog = ProgressDialog.show(Video.this, "",
"Buffering video...", true);
progressDialog.setCancelable(false);
// progressDialog.dismiss();
MediaController mediaController = new MediaController(Video.this);
mediaController.setAnchorView(videoView);
Uri video = Uri.parse(videourl);// insert video url
videoView.setMediaController(mediaController);
videoView.setVideoURI(video);
videoView.requestFocus();
sync = new myAsync();
sync.execute();
// PlayVideo();
}
private class myAsync extends AsyncTask<Void, Integer, Void> {
int duration = 0;
//int current = 0;
@Override
protected Void doInBackground(Void... params) {
videoView.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
progressDialog.dismiss();
videoView.seekTo(check);
videoView.start();
duration = videoView.getDuration();
}
});
do {
current = videoView.getCurrentPosition();
System.out.println("duration - " + duration + " current- "
+ current);
/*if(current/600==0)
{
//sync.cancel(true);
videoView.pause();
try {
wait(300000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();q
}
videoView.resume();
videoView.seekTo(current);
}*/
}
if (sync.isCancelled())
break;
} while (current != duration || current == 0);
return null;
}
}