Глюк при смене видео внутри медиаплеера - PullRequest
1 голос
/ 26 апреля 2019

Мое требование - изменить видео внутри видеоплеера с анимацией.Когда человек нажимает на кнопку «изменить», видео в медиаплеере изменится на новое, а старое получит увеличение анимации.Я могу реализовать эту функциональность с помощью просмотра текстур, но у меня возникает одна проблема, связанная с изменением видео.Есть ли способ сделать его более гладким?

Вот мой код :

    public class VideoVieww extends Activity implements TextureView.SurfaceTextureListener  {

    private TextureView textureView;
    private MediaPlayer mMediaPlayer;
    private Button mButton;
    private Animation zoomAnimation;
    private SurfaceTexture mSurfaceTexture;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.texture_layout);

        textureView = findViewById(R.id.textureView);
        textureView.setSurfaceTextureListener(this);
        zoomAnimation = AnimationUtils.loadAnimation(VideoVieww.this, R.anim.zomm_out);

        mButton =  findViewById(R.id.change);
        mButton.setOnClickListener(view -> {
            if (mMediaPlayer.isPlaying()) {
                mMediaPlayer.stop();
                mMediaPlayer.release();
                mMediaPlayer = null;
            }
            textureView.startAnimation(zoomAnimation);
                try {
                    mMediaPlayer = new MediaPlayer();
                    mMediaPlayer.setDataSource(VideoVieww.this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.broadchurch));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    Surface surface = new Surface(mSurfaceTexture);
                    mMediaPlayer.setSurface(surface);
                    mMediaPlayer.prepare();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (SecurityException e) {
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        });
        zoomAnimation.setAnimationListener(new Animation.AnimationListener(){
            @Override
            public void onAnimationStart(Animation arg0) {
            }
            @Override
            public void onAnimationRepeat(Animation arg0) {
            }
            @Override
            public void onAnimationEnd(Animation arg0) {
                mMediaPlayer.start();
            }


        });
    }



    @Override
    public void onBackPressed() {
        super.onBackPressed();
        mMediaPlayer.release();
        mMediaPlayer=null;
    }

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
        mSurfaceTexture=surfaceTexture;
        Surface surface = new Surface(surfaceTexture);
        try {
            mMediaPlayer= new MediaPlayer();
            mMediaPlayer.setDataSource(VideoVieww.this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.sid));
            mMediaPlayer.setSurface(surface);
            mMediaPlayer.prepare();
            mMediaPlayer.start();
//            mMediaPlayer.setLooping(true);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
        return false;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surface) {

    }
}

Любая помощь будет принята с благодарностью !!!

...