java - Android MediaCodec 如何创建解码器?

标签 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 如何根据环境和参数创建给定类型的解码器?我似乎已经走进了死胡同,再多的谷歌搜索也没有给我任何有用的结果。

最佳答案

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

The native keyword is applied to a method to indicates that the method is implemented in native code using JNI (Java Native Interface).

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

关于java - Android MediaCodec 如何创建解码器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56081262/

相关文章:

java - 不可变类型的 setter/getter

android - ImageView幻灯片动画

java - 如何制作可点击的 ListView

python - Unicode解码错误: 'ascii' codec can't decode

c# - Unicode代理字符编码c#

c - 使用ffmpeg以相反的顺序解码然后重新编码帧

java - 如何在 jMeter 中查看页面错误?

java - 将屏幕截图粘贴到网页上的文本区域

android - RxJava,在订阅中清除一次性是否正确?

java - Selenium RC 中 isElementPresent 和 isVisible 的区别