首页 > 解决方案 > Android MediaCodec 如何创建解码器?

问题描述

我注意到java/android/media有一个调用的方法createDecoderByType()应该返回一个MediaCodec对象。但是,当我查看MediaCodec.java 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);

那个函数好像没有body!

起初我认为这意味着该方法将在子类中定义。但是我看到MediaCodec在其他功能源代码中直接调用了这个方法。

所以我的问题是:有什么方法可以追踪并查看Android如何根据环境和参数创建给定类型的解码器?我似乎走到了死胡同,再多的谷歌搜索也没有给我任何有用的结果。

标签: javaandroiddecodingdecoder

解决方案


在我发布它后的那一分钟就找到了答案……当然。问题在于native关键字。来自GeeksforGeeks:

native 关键字应用于方法,表示该方法是使用 JNI(Java Native Interface)在本机代码中实现的。

这意味着它可以用另一种语言(例如 C 或 C++)编写,或者调用硬件的东西。MediaCodec我正在寻找的JNI 代码在这里


推荐阅读