Android MediaPlayer setSurface im angehaltenen Zustand

BEARBEITEN:

Anscheinend hat dies also nichts mit mehreren Aktivitäten zu tun, und dies hat auch etwas mit der Kodierung der Videodatei zu tun.

Ich werde versuchen, die Frage zu vereinfachen: Ich habe ein MediaPlayer-Objekt in einem angehaltenen Zustand, wenn ich aufrufemediaPlayer.getCurrentPosition() Ich erhalte ein genaues Ergebnis. Wenn ich anrufemediaPlayer.setSurface() (mit einer anderen Oberfläche) gefolgt vonmediaPlayer.play() Auf diesem Objekt wird das Video an einer anderen Position als der von getCurrentPosition () zurückgegebenen wiedergegeben. Ich teste auf API> = ICE_CREAM_SANDWICH.

Getestet sowohl mit einer lokalen Ressource im Projekt als auch über einen Netzwerk-Stream. Ergebnis: Kein Unterschied.

Link zur Videodatei:http://wpc.4ba9.edgecastcdn.net/804BA9/testenvmedia/m_8705_LuS3w7ctSZjB.mov.bs.mp4

Ich habe zwei Aktivitäten, Aktivität A und Aktivität B.

Aktivität-A spielt Videos von einem Remote-Stream auf einen abTextureView Verwendung einerMediaPlayer, es enthält auch einen Knopf, der dazu bestimmt ist:

Rufen Sie mediaPlayer.pause () auf.

Öffnen Sie Aktivität-B.

Aktivität B enthält auch aTextureView welches dasselbe Video an seinem aktuellen Ort mit dem gleichen abspielen sollMediaPlayer Objekt.

Activity-A onCreate-Methode:

    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-Methode:

        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-Ausgabe:

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

Auch wenn es so aussieht, als würde der MediaPlayer an genau dieser Position fortgesetzt, verhalte ich mich bei verschiedenen Videos unterschiedlich. Die meisten davon beginnen bei jedem Versuch, die in Aktivität B wiederzugeben, genau im selben Frame. Ein Video beginnt bei Ganz am Anfang beginnt jedes Mal ein anderer an einem anderen Punkt.

Aus der Android-Dokumentation vonMediaPlayer.SetSurface() Methode:

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

Jede Hilfe wäre sehr dankbar. Vielen Dank!