如何在Android中播放RTSP视频?

如何在Android中播放RTSP视频?,android,video,android-videoview,rtsp,youtube-channels,Android,Video,Android Videoview,Rtsp,Youtube Channels,我想在VideoView上播放Youtube视频。 我搜索了很多&发现VideoView支持rtspurl视频。 但我得到了一个错误:我的安卓设备是2.3.5&使用Wifi。 我的视频视图代码是: final VideoView videoView = (VideoView) findViewById(R.id.VideoView); Button youtube=(Button)findViewById(R.id.button1); final MediaC

我想在VideoView上播放Youtube视频。 我搜索了很多&发现VideoView支持rtspurl视频。 但我得到了一个错误:我的安卓设备是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();
我的LogCat错误是:

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
10-12 11:56:50.369:D/WindowManagerImpl(6880):添加视图,新视图,mViews[0]:com.android.internal.policy.impl.PhoneWindow$DecorView@4055c4e0
10-12 11:56:50.430:I/音频系统(6880):获取音频flinger
10-12 11:56:50.430:I/AudioSystem(6880):返回新的音频会话id
10-12 11:56:50.430:D/MediaPlayer(6880):setDataSource(上下文,rtsp://v3.cache7.c.youtube.com/CiILENy73wIaGQlOCTh0GvUeYRMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp,映射标题)中的
10-12 11:56:50.460:I/MediaPlayer(6880):跳过设置(httpproxyip,null)
10-12 11:56:50.460:I/MediaPlayer(6880):跳过设置(httpproxyport,null)
10-12 11:56:50.460:I/MediaPlayer(6880):跳过设置(rtspproxyip,null)
10-12 11:56:50.460:I/MediaPlayer(6880):跳过设置(rtspproxyport,null)
10-12 11:56:50.460:I/MediaPlayer(6880):添加设置(分钟端口,1024)
10-12 11:56:50.460:I/MediaPlayer(6880):添加设置(maxudpport,65535)
10-12 11:56:50.460:I/MediaPlayer(6880):添加设置(缓冲时间,7)
10-12 11:56:50.460:I/MediaPlayer(6880):添加设置(rtsptimeout,25000)
10-12 11:56:50.460:I/MediaPlayer(6880):添加设置(rtptimeout,25000)
10-12 11:56:50.460:I/MediaPlayer(6880):添加设置(RTCPropertInterval,3000)
10-12 11:56:50.460:I/MediaPlayer(6880):添加设置(rtspkeepaliveinterval,35000)
10-12 11:56:50.460:D/MediaPlayer(6880):无法在客户端打开文件,正在尝试服务器端
10-12 11:56:50.470:I/MediaPlayer(6880):禁用CIQ
10-12 11:56:50.470:D/MediaPlayer(6880):setDataSource(上下文,rtsp://v3.cache7.c.youtube.com/CiILENy73wIaGQlOCTh0GvUeYRMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp,映射标题)输出
10-12 11:57:20.589:W/MediaPlayer(6880):信息/警告(343552000)
10-12 11:57:20.589:I/MediaPlayer(6880):信息(343553000)
10-12 11:57:20.599:E/MediaPlayer(6880):错误(1,-1003)
10-12 11:57:20.599:E/MediaPlayer(6880):错误(1,-1003)
10-12 11:57:20.599:D/VideoView(6880):错误:1,-1003

首先,您必须从YOutube频道获取视频。下面的例子将对您有所帮助

它会让你对此有一个完美的想法

在videoview中播放视频时,还需要视频的rtsp格式


您可以将您的url转换为rtsp格式,我可以使用此方式在android中播放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;
    }

}
videourl=”rtsp://..........";
videoView=(videoView)findviewbyd(R.id.video\u视图);
progressDialog=progressDialog.show(Video.this,“”,
“缓冲视频…”,正确);
progressDialog.setCancelable(假);
//progressDialog.disclose();
MediaController=新的MediaController(Video.this);
mediaController.setAnchorView(视频视图);
urivideo=Uri.parse(videourl);//插入视频url
videoView.setMediaController(mediaController);
videoView.setVideoURI(视频);
videoView.requestFocus();
sync=新的myAsync();
sync.execute();
//播放视频();
}
私有类myAsync扩展了AsyncTask{
int持续时间=0;
//int电流=0;
@凌驾
受保护的Void doInBackground(Void…参数){
videoView.setOnPreparedListener(新的OnPreparedListener(){
已准备好公开作废(MediaPlayer mp){
progressDialog.disclose();
videoView.seekTo(检查);
videoView.start();
duration=videoView.getDuration();
}
});
做{
当前=videoView.getCurrentPosition();
系统输出打印项次(“持续时间-”+持续时间+“当前-”
+电流);
/*如果(当前/600==0)
{
//sync.cancel(true);
videoView.pause();
试一试{
等待(30万);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();q
}
videoView.resume();
videoView.seekTo(当前);
}*/
}
如果(sync.isCancelled())
打破
}while(current!=持续时间| | current==0);
返回null;
}
}

您确定您的视频URL是正确的吗?我认为您的URL不正确..先生,我使用了来自Json的URL。我检查了不同的网址。但问题是。URL是:-看看我的答案,任何关于这个的帮助都告诉了我。我已经使用了你的代码&它在rtsp中从http转换过来的视频还没有播放。同样的错误…@DeepankerChaudhary你得到解决方案了吗?没有!我可以通过Intent在webview上播放视频,但要求是我将显示“上一个”和“下一个”两个按钮,所以我想在VideoView上播放视频。出现问题的可能是移动支持问题。