Android音视频系列Android-NDK/JNIAndroid收藏集

FFmpeg(五):JNI动态注册方法调用FFmpeg播放视频

2018-10-08  本文已影响4人  moushao

前言

这篇文章讲如何用JNI动态注册的方法调用FFmpeg播放视频。FFmpeg播放视频网上的教程很多,而且都讲的很好,所以这篇文章讲的更多的是如何改造native-lib.cpp来实现动态注册方法。

正文

1 静态注册和动态注册

在上篇文章中我们实现了FFmpeg相关信息的打印,JNI调用的方法使用的静态注册:

JNIEXPORT jstring JNICALL Java_com_pvirtech_ffmpeg4android_FFmpegKit_stringFromFFmpeg(···)

方法名必须这样,够长吧,还必须得这种格式。关于JNI的静态注册和动态注册盆友们可以看看这些大佬文章,我这里就不重述:
Android深入理解JNI(一)JNI原理与静态、动态注册
初识JNI(二)-静态注册和动态注册

两者相比,静态方法注册的缺点:

1.必须遵循某些规则,名字过长
2.多个class需Javah多遍,
3.用到时才寻找并加载,效率低

动态注册优点

注册在JNI层实现的,JAVA层不需要关心,因为在system.load时就会去调JNI_OnLoad有选择性的注册。

当然,这个优缺点也是大佬们的总结,我并没有深入到JVM虚拟机中去求证这个总结的真实性。但我对于动态注册的总结就是:真TM好用

2 操刀代码

public class FFmpegKit {
 ...
public static native String stringFromFFmpeg();

public native static int play(SurfaceView surface,String url);
}

3 注意三点

运行效果:

结语:

到此整个配置基本完成,由于主界面的播放我用了RxJava和多媒体选择后播放,代码量有点多,这里就不贴出,具体实现可看项目源码。

参考文章
对于JNI方法名,数据类型和方法签名的一些认识
Android深入理解JNI(一)JNI原理与静态、动态注册
初识JNI(二)-静态注册和动态注册

下一章讲:
FFmpeg(六):使用FFmpeg压缩视频

github源码

简书半停更说明

碎碎念:如果诸君喜欢,请点个赞
更多问题,欢迎加群:584275290
上一篇下一篇

猜你喜欢

热点阅读