Android Вид поверхности не показывает текущий видеокадр для второго видео - PullRequest
0 голосов
/ 17 февраля 2020

Я использую Surface view и Mediaplayer для воспроизведения списка видео. Первое видео будет воспроизводиться автоматически и сможет просматривать видео и слышать звук. Когда я нажимаю на другие видео в списке, слышен только звук, но не обновленная поверхность видео показывает кадр предыдущего видео. Как я могу обновить sh вид поверхности и отобразить правильное видео?

 if (videoDataList.size() > 0) {


            mVideoSurface.getLayoutParams().height = 600;
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setOnVideoSizeChangedListener(this);

            controller = new VideoControllerView.Builder(this, this)
                    .withVideoSurfaceView(mVideoSurface)//to enable toggle display controller view
                    .canControlBrightness(true)
                    .canControlVolume(true)
                    .canSeekVideo(true)
                    .pauseIcon(R.drawable.ic_media_pause)
                    .playIcon(R.drawable.ic_media_play)
                    .shrinkIcon(R.drawable.ic_media_fullscreen_shrink)
                    .stretchIcon(R.drawable.ic_media_fullscreen_stretch)
                    .build((FrameLayout) findViewById(R.id.videoSurfaceContainer));//layout container that hold video play view

            mLoadingView.setVisibility(View.VISIBLE);

            try {
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mMediaPlayer.setDataSource(this, Uri.parse(videoDataList.get(0).getUrl()));
                mMediaPlayer.setOnPreparedListener(this);
                mMediaPlayer.setOnCompletionListener(this);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            mVideoSurface.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    controller.toggleControllerView();
                    return false;
                }
            });

            final VideoViewAdapter videoViewAdapter = new VideoViewAdapter(videoDataList, extendedcareServerAddress, waitingRoomPlayIconUrl, MainActivity.this);
            videoListView.setAdapter(videoViewAdapter);


            videoListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {

                    if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
                        mMediaPlayer.stop();
                        mMediaPlayer.reset();


                    }

                    mVideoSurface.invalidate();
                    mVideoSurface = (ResizeSurfaceView) singleVideoLayout.findViewById(R.id.videoSurface);


                    videoHolder = mVideoSurface.getHolder();

                    videoHolder.addCallback(MainActivity.this);
                    HttpsURLConnection.setDefaultHostnameVerifier(new NullHostNameVerifier());
                    mMediaPlayer = new MediaPlayer();
                    mMediaPlayer.setOnVideoSizeChangedListener(MainActivity.this);

                    controller = new VideoControllerView.Builder(MainActivity.this, MainActivity.this)
                            .withVideoSurfaceView(mVideoSurface)//to enable toggle display controller view
                            .canControlBrightness(true)
                            .canControlVolume(true)
                            .canSeekVideo(true)
                            .pauseIcon(R.drawable.ic_media_pause)
                            .playIcon(R.drawable.ic_media_play)
                            .shrinkIcon(R.drawable.ic_media_fullscreen_shrink)
                            .stretchIcon(R.drawable.ic_media_fullscreen_stretch)
                            .build((FrameLayout) findViewById(R.id.videoSurfaceContainer));//layout container that hold video play view

                    mLoadingView.setVisibility(View.VISIBLE);
                    new Handler(Looper.getMainLooper()).post(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                                mMediaPlayer.setDataSource(MainActivity.this, Uri.parse(videoDataList.get(position).getUrl()));
                                mMediaPlayer.prepareAsync();
                                mMediaPlayer.setOnPreparedListener(MainActivity.this);
                                mMediaPlayer.setOnCompletionListener(MainActivity.this);
                            } catch (IllegalArgumentException e) {
                                e.printStackTrace();
                            } catch (SecurityException e) {
                                e.printStackTrace();
                            } catch (IllegalStateException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }

                        }
                    });

                    mVideoSurface.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                            controller.toggleControllerView();
                            return false;
                        }
                    });
                }
            });
            }
...