android - 是否可以通过 C 级别使用 android API?或者我可以通过 C 代码使用编解码器吗?

标签 android c video android-ndk android-mediacodec

我正在构建一个视频系统,其中包含来自摄像头的视频捕获、视频编码和视频复用。

我想在 C 级别使用编码,因为在将数据发送到编码器之前我想实现一些算法。

NDK 示例中有一个'native-media' 项目,它在C 级别调用OMX 函数来进行视频解码和播放,但现在NDK 似乎不支持OMX 编码,是吗?真的吗?

我已经在 J​​ava 级别成功使用了 MediaCodec API,如果 NDK 不支持 OMX 的编码,我可以通过 C 代码使用 MediaCodec API 吗?

最佳答案

是的,您可以从 C 代码调用 Java 方法。 例如,如果我们要调用方法 x.doSomething(5),假设 x 是“com.example.ndk”包中 MyClass 类的一个实例,并且该方法返回 void,我们可以使用:

jclass cls = (*env)->FindClass(env, "com/example/ndk/MyClass");

jmethodID mid = (*env)->GetMethodID(env, cls, "doSomething", "(I)V");

(*env)->CallObjectMethod(env, x, mid, 5);

地点:

  • “env”是您在 C JNI 方法中收到的 JNIEnv 指针(有关 JNIEnv 指针和 native 方法的信息,请阅读 here)。
  • “(I)V”是方法签名,在本例中表示该方法有一个 int 参数 (I),并返回 void (V)。
  • "x"是在之前的一些 *env 函数中获得的一个 jobject(here 你可以找到 env 指向的所有 JNI 函数)。

关于android - 是否可以通过 C 级别使用 android API?或者我可以通过 C 代码使用编解码器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126016/

相关文章:

ios - 如何缓存 AVPlayerItem(视频)以便在 UITableview 中重用

C++ 库/类从内存位图数组中创建简单的视频文件

javascript - 无法使用Javascript/JQuery更改视频静音属性

android gallery 自定义适配器

java - Android 如何从 SharedPreference 设置 EditTextPreference 的默认值?

用 C 中的字符串计算字母出现次数

c - 为什么 scanf 需要两个数字?

android - 我的代码有什么问题吗?

java - Android模拟器排队点击?

c - libevent2 和文件 io