Как изменить видео / обновить видео на textureView на android - PullRequest
0 голосов
/ 08 апреля 2020

Я успешно воспроизвел видео с помощью MediaPlayer на TextureView, сейчас я пытаюсь запрограммировать его так, чтобы видео автоматически изменялось после прохождения определенного кадра. Однако после выполнения определенного условия я не могу обновить видео. Он застрял на первом видео (последний кадр перед выполнением условия).

Как загрузить новое видео и начать воспроизведение после того, как первое видео прошло определенный кадр? Вот что у меня есть, я использую CountDownTimer для получения наиболее точного текущего времени.

public class PreviewVideo extends AppCompatActivity implements TextureView.SurfaceTextureListener {
    TextureView textureView;
    MediaPlayer videoMedia;
    Boolean pastFrame=false;
    int currentTime;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_preview_video);

        textureView = (TextureView) findViewById(R.id.previewVideo);
        textureView.setSurfaceTextureListener(this);

        }

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
        surf=new Surface(surface);
        videoMedia=new MediaPlayer();
        videoMedia.setSurface(surf);

        try{
            if (!pastFrame){
                 videoMedia.setDataSource(this,firstUri);
            }
            else {
                 videoMedia.setDataSource(this,secondUri);
            }
            videoMedia.prepare();
            playListeners();

        } catch(IOException e){e.printStackTrace(); }


    }

    private void playListeners() {
          count=new CountDownTimer(videoMedia.getDuration()*10, 1){
            @Override
            public void onTick(long l)
            {
                currentTime=videoMedia.getCurrentPosition();
                if (currentTime>=setFrame && pastFrame==false){
                textureView.setSurfaceTextureListener(this);//Do I call this again??
                pastFrame=true;
                }
            @Override
            public void onFinish(){

            }
        }.start();         
    }


} 
...