代码之家  ›  专栏  ›  技术社区  ›  Hong

为什么MediaCodec.reset()会生成java.lang.IllegalStateException

  •  0
  • Hong  · 技术社区  · 7 年前

    The official document 来自任何州 将编解码器移回未初始化状态。“

    但是,以下代码偶尔会抛出java.lang.IllegalStateException:

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        //do nothing
    } else {
        try {
            mediaCodec.reset();
        } catch (Exception ex) {
              //occasionally throws java.lang.IllegalStateException
        }
    }
    

    例外情况:

    Class: java.lang.IllegalStateException
     Stack trace: java.lang.IllegalStateException
        at android.media.MediaCodec.native_reset(Native Method)
        at android.media.MediaCodec.reset(MediaCodec.java:1794)
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   ChrisBe    7 年前

    是的,文档在这里有点误导,因为MediaCodec实例可能处于两种不可重置的状态。

    如果MediaCodec实例是release,released state,那么它显然是不可重置的,从而导致一个IllegalStateException。

    如果MediaCodec实例由于无法创建而处于错误状态,则它也不可重置,但这一次会导致MediaCodec.CodecException。例如,如果创建多个实例。

    A comment

        /* When external-facing MediaCodec object is created,
           it is already initialized.  Thus, reset is essentially
           release() followed by init(), plus clearing the state */
    

    我希望这能澄清你的问题

    致以最诚挚的问候

    推荐文章