How to Play RTSP Video in Android?

2019-01-28 17:05发布

问题:

I want to play Youtube Video on VideoView . I have searched very much & find that VideoView Support rtsp URL Video . But I am getting error: My android device is 2.3.5 & using Wifi. My VideoView Code is:

  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();

My LogCat Error is:

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

回答1:

First you have to get videos from your YOutube Channel. For this following Example will help you.

See My answer Here. it will give you perfect idea about this.

Also for playing video in videoview you need rtsp format of your video.

You can convert your url in rtsp format i create function for that which is HERE.



回答2:

By using this way i play rtsp video in android.

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

}