Android MediaCodec如何创建解码器?

时间:2019-05-10 16:09:31

标签: java android decoding decoder

我注意到java/android/media有一个名为createDecoderByType()的方法,该方法应该返回一个MediaCodec对象。但是,当我查看MediaCodec.java source code on GoogleGit时,我真的看不到实际的解码器是如何生成的。这是该方法的代码:

    public static MediaCodec createDecoderByType(String type) {
    return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
}

然后,当我查看构造函数以查看返回的内容时,这就是我所看到的:

    private MediaCodec(
        String name, boolean nameIsType, boolean encoder) {
    native_setup(name, nameIsType, encoder);
}

好的,太好了。让我们看一下native_setup()。这是定义:

    private native final void native_setup(
        String name, boolean nameIsType, boolean encoder);

该功能似乎没有主体!

首先,我认为这意味着该方法将在子类中定义。但是我看到这种方法在其他功能正常的源代码中直接在MediaCodec上本身被调用。

所以我的问题是:有什么办法可以追踪并查看Android如何根据环境和参数创建给定类型的解码器?我似乎已经走到了尽头,谷歌搜索没有给我任何有益的结果。

1 个答案:

答案 0 :(得分:1)

在我发布它的那一刻,就找到了答案……当然。问题出在native关键字上。来自GeeksforGeeks:

  

将native关键字应用于方法,以指示该方法是使用JNI(Java本机接口)以本机代码实现的。

这意味着它可以用其他语言(例如C或C ++)编写,也可以调用硬件。我正在寻找的MediaCodec JNI代码是here