How to play a video from url using videoview smoot

2019-02-18 21:11发布

问题:

I have an activity which has a VideoView . It's playing video from url. What I am doing is for playing smoothly, I have put a ProgressDialog on the start of the activity. And dismisses it inside onPreparedListener so that it would play well and smoothly. But still It's not helping. The video is playing like playing for 10-20 sec and stops for 5-10sec and it keeps going. I have seen an application on Google play Workout Trainer in which if user will start to see the video its showing a horizontal progress bar which buffered the video and then play it smoothly whether it is a slow connection or WI-FI. It requires only to complete that progressbar before starting the video. I want to know how to implement the same thing in my application?

What I am doing is below:

    public class StartExerciseActivity extends Activity {


    protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.show_exercise);
            tileTextView = (TextView) findViewById(R.id.titleText);
            timerTextView = (TextView) findViewById(R.id.timertxt);
            timerRemainTextView = (TextView) findViewById(R.id.timeremaintxt);
            videoView = (VideoView) findViewById(R.id.video_view);
            stopButton = (Button) findViewById(R.id.stopbut);
            pauseButton = (Button) findViewById(R.id.pausesbut);



    progressDialog = ProgressDialog.show(StartExerciseActivity.this, "",
                    "Buffering video...", true);
            getWindow().setFormat(PixelFormat.TRANSLUCENT);

            tileTextView.setText(Constant.NEWS_TITLE);
            timerTextView.setText(Constant.VIDEO_TIME);
            video_url = Constant.VIDEO_NAME;




            try {

                Uri video = Uri.parse(video_url);

                // videoView.setMediaController(mediaController);
                videoView.setVideoURI(video);

                videoView.setOnPreparedListener(new OnPreparedListener() {
                    public void onPrepared(MediaPlayer mp) {
                        progressDialog.dismiss();
                        videoView.start();
                        updateSeekProgress();


                        RelativeLayout.LayoutParams videoviewlp = new RelativeLayout.LayoutParams(400, 400);
                        videoviewlp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
                        videoviewlp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
                        videoView.setLayoutParams(videoviewlp);
                        videoView.invalidate();


    //                  DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics);
    //                   android.widget.LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) videoView.getLayoutParams();
    //                   params.width =  metrics.widthPixels;
    //                   params.height = metrics.heightPixels;
    //                   params.leftMargin = 0;
    //                   videoView.setLayoutParams(params);
                    }
                });

            } catch (Exception e) {
                progressDialog.dismiss();
                System.out.println("Video Play Error :" + e.getMessage());
            }
 pauseButton.setOnClickListener(new View.OnClickListener() {


                public void onClick(View arg0) {
                    if (count == 0) {
                        videoView.pause();
                        count = 1;
                        pauseButton.setBackgroundResource(R.drawable.playbut);


                    } else if (count == 1) {
                        videoView.start();

                        pauseButton.setBackgroundResource(R.drawable.pausebut);
                        count = 0;
                    }
                }
            });

            stopButton.setOnClickListener(new View.OnClickListener() {


                public void onClick(View arg0) {
                    videoView.stopPlayback();
                    pauseButton.setBackgroundResource(R.drawable.playbut);
                }
            });

        }

Please help. Thanks.

回答1:

//put in oncreate
new DownloadXML().execute();
//put in outside of oncreate

private class DownloadXML extends AsyncTask<Void, Void, Void> {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Create a progressbar
                pDialog = new ProgressDialog(StartExerciseActivity.this);
                // Set progressbar title
                pDialog.setTitle("Wait");
                // Set progressbar message
                pDialog.setMessage("Loading...");
                pDialog.setIndeterminate(false);
                // Show progressbar
                pDialog.show();
            }

            @Override
            protected Void doInBackground(Void... params) {
                try {
            videoView.setVideoURI(Uri.parse("http://commonsware.com/misc/test2.3gp"));
                //videoView.setVideoURI(Uri.parse(videofilename));
                videoView.requestFocus();
                videoView.setMediaController(new MediaController(this));        

                } catch (Exception e) {
                    Log.e("Error", e.getMessage());
                    e.printStackTrace();
                }
                return null;

            }

            @Override
            protected void onPostExecute(Void args) {

                // Close progressbar
                pDialog.dismiss();
                videoView.start();
            }
        }