Android MediaPlayer setSurface в состоянии паузы

РЕДАКТИРОВАТЬ:

Таким образом, очевидно, это не имеет никакого отношения к нескольким действиям, и это имеет отношение к кодированию видеофайла.

Я попытаюсь упростить вопрос: у меня объект MediaPlayer в состоянии паузы, когда я вызываюmediaPlayer.getCurrentPosition() Я получаю результат, который является точным. Когда я звонюmediaPlayer.setSurface() (используя другую поверхность) с последующимmediaPlayer.play() на этом объекте видео воспроизводится в другой позиции, чем та, которую возвращает getCurrentPosition (). Я тестирую на API> = ICE_CREAM_SANDWICH.

Протестировано как с использованием локального ресурса в проекте, так и через сетевой поток, результат: без разницы.

Ссылка на видео файл:http://wpc.4ba9.edgecastcdn.net/804BA9/testenvmedia/m_8705_LuS3w7ctSZjB.mov.bs.mp4

У меня есть два вида деятельности, активность-A и деятельность-B.

Activity-A воспроизводит видео из удаленного потока вTextureView с помощьюMediaPlayerОн также содержит кнопку, целью которой является:

Вызовите mediaPlayer.pause ();

Откройте Activity-B.

Деятельность-B также содержитTextureView который должен воспроизводить то же видео в своем текущем местоположении, используя тот жеMediaPlayer объект.

Метод Activity-A onCreate:

    textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {        
        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int w, int h) {
            try {
                final MediaPlayer mediaPlayer = MyApplication.getMediaPlayer();
                mediaPlayer.setDataSource(context, videoURI);
                mediaPlayer.setSurface(new Surface(surfaceTexture));
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mediaPlayer.setLooping(shouldLoop);
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mp.start();
                    }
                });

                mediaPlayer.prepareAsync();
            } 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) {}
    });

    btnFullScreen.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {     
        Log.e("WHATEVER", ">>> pause video at " + MyApplication.getMediaPlayer().getCurrentPosition());
        MyApplication.getMediaPlayer().pause();
        Intent intent = new Intent(getActivity(), ActivityB.class);
        startActivity(intent);
    }});

Метод Activity-B onCreate:

        textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture surface, int w, int h) {
            MediaPlayer mediaPlayer = MyApplication.getMediaPlayer();
            mediaPlayer.setSurface(new Surface(surface));

            Log.e("WHATEVER", ">>> resume video at " + mediaPlayer.getCurrentPosition());
            mediaPlayer.start();
        }

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

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

        @Override
        public void onSurfaceTextureUpdated(SurfaceTexture surface) {
        }
    });

Выход LogCat:

10-10 17:33:15.966  13886-13886/com.whatever.android.debug E/WHATEVER﹕ >>> pause video at 1958
10-10 17:33:16.817  13886-13886/com.whatever.android.debug E/WHATEVER﹕ >>> resume video at 1958

Поэтому, даже если кажется, что MediaPlayer возобновит работу с той же позиции, я получаю различное поведение для разных видео, большинство из которых начинается с одного и того же кадра каждый раз, когда я пытаюсь воспроизвести их в Activity-B, одно видео начинается с самое начало, другой начинается каждый раз в какой-то другой точке.

Из документации Android поMediaPlayer.SetSurface() метод:

This method can be called in any state and calling it does not change the object state.

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

Ответы на вопрос(2)

Ваш ответ на вопрос