Android MediaPlayer setsurface illegalstateexception

Android MediaPlayer setsurface illegalstateexception

我有一个以视频作为项目的 ListView。在某些情况下,我在尝试设置表面时会收到 IllegalStateException。 源代码:

        if(surfaceTexture != null){
          mSurface = new Surface(surfaceTexture);
          mMediaPlayer.setSurface(mSurface);
        }

异常:

Fatal Exception: java.lang.IllegalStateException
android.media.MediaPlayer._setVideoSurface (MediaPlayer.java)
android.media.MediaPlayer.setSurface (MediaPlayer.java:829)

但是,Android MediaPlayer 文档声明可以在任何状态下调用 setSurface。

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

(http://developer.android.com/reference/android/media/MediaPlayer.html)

我无法重现此异常,并且我不知道异常期间 MediaPlayer 处于哪个状态。

有什么想法吗?

如果播放器尚未初始化或在您没有意识到的情况下已经发布,就会发生这种情况。 MediaPlayer 的 documentation 似乎没有反映我所经历的行为。我遇到过它在很早就调用 setSurface 时抛出 IllegalStateException,其中 mediaPlayer 对象不为 null 但可能未初始化并且在调用 release 后单独。为了处理这个,我简单地捕获了异常:

try {
    mediaPlayer.setSurface(surface);
} catch (Exception e) {
    Log.i("TAG", "MediaPlayer setSurface failed.");
}

由于我们调用 setSurface 的回调在整个播放设置过程中被多次命中,因此在调用 start 时,表面已重新设置而没有抛出异常。