【问题标题】:Is it possible to use the android API through C level? or can I use the Codec through C code?是否可以通过 C 级别使用 android API?或者我可以通过 C 代码使用编解码器吗?
【发布时间】:2014-04-03 06:38:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android c video android-ndk android-mediacodec


    【解决方案1】:

    是的,您可以从 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 指针和本机方法的信息,请阅读here)。
    • “(I)V”是方法签名,在这种情况下,它表示该方法有一个 int 参数 (I),并返回 void (V)。
    • “x”是在之前的某个*env函数中得到的一个jobobject(here你可以找到所有env指向的JNI函数)。

    【讨论】:

    • 谢谢!我想这会有所帮助。反正我的初衷是这样的:Android中的Java Api有对应的C函数,我们可以调用这些C函数吗?
    • 不,如果您无法访问 C 源代码,则无法直接访问它们。 Java 方法和 C 函数之间没有直接对应关系。
    • 谢谢!如果 NDK 不提供对较低 C 函数的访问,我仍然需要确定一件事(就像在 OMX 解码示例中所做的那样,我们可以通过 NDK 调用 OMX C 函数来解码视频),然后我们有无法访问android源码的C函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2021-02-27
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多