java - 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如何根据环境和参数创建给定类型的解码器?我似乎走到了死胡同,再多的谷歌搜索也没有给我任何有用的结果。
解决方案
在我发布它后的那一分钟就找到了答案……当然。问题在于native
关键字。来自GeeksforGeeks:
native 关键字应用于方法,表示该方法是使用 JNI(Java Native Interface)在本机代码中实现的。
这意味着它可以用另一种语言(例如 C 或 C++)编写,或者调用硬件的东西。MediaCodec
我正在寻找的JNI 代码在这里。
推荐阅读
- javascript - 如何在 Javascript 中创建字典字典
- scala - 部分应用的函数是否可以调用其部分应用的自身?
- java - Java 11 XML 解析器在 XHTML 1.1 文档上调用 normalizeDocument() 时暂停并显示实体错误
- google-kubernetes-engine - 耗尽 GKE 并关闭底层 Compute Engine - 怎么做
- python - 了解装饰器python
- c++ - 如何重载 == 运算符以查看具有字符串向量的两个对象是否相等?
- reactjs - 设置状态而不使用 useEffect 重新渲染不起作用
- node.js - 用于 GAE(构建和部署)的 React App + Node Gitlab cicd 管道
- python - Python --- 在第 r 个测试文件中写入该行 / 写入除第 r 个之外的所有训练文件
- python - 日期时间信息错误