自己写视频播放器(2) 应用libffmpeg.so

这部分我们测试一下我们通过自己写视频播放器(1) 编译ffmpeg for android得到的libffmpeg.so是不是基本可以使用。因为我们只是获取一下版本信息,因此只能称为基本可用。


JNI说明

Java的JNI (Java Native Interface),又称为本地接口调用。这一机制主要是为了方便人们可以调用以前c/c++编写的库,或者提高效率,亦或者对应用进行保护(核心代码封装在底层.so库中,增加破解难度)。

JNI使用方式(以C库为例)

常见的使用方式有如下几种:
1.自己写底层的C源码
我们需要建java类文件,声明jni方法,然后生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用androidNDK开发包中的ndk-build脚本生成对应的.so共享库
例子可以参考 NDK开发入门

2.已有一个C库
比如我们有了libffmpeg.so 。我们还得编译一个so文件,这个so里的是jni方法,可以由java层调用的,而这些jni方法里用到的函数则来至libffmpeg.so库

创建 JNIProxy类

package com.example.myplayer1;

public class JNIProxy {
    public native boolean ffmpegInit();//Jni方法
    public native boolean ffmpegUninit();
    public native int ffmpegGetAvcodecVersion();
}

生成 com_example_myplayer1_JNIProxy.h

tip:获得本地方法头文件
jdk6.0:在Android工程的bin\classes目录下执行:javah 包名+类名
jdk7.0:在Android工程的src目录下执行:javah 包名+类名

javah com.example.myplayer1.JNIProxy

这个文件和你的工程的包名类名是相关的,其内容如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_myplayer1_JNIProxy */

#ifndef _Included_com_example_myplayer1_JNIProxy
#define _Included_com_example_myplayer1_JNIProxy
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_myplayer1_JNIProxy
 * Method:    ffmpegInit
 * Signature: ()Z
 */
JNIEXPORT jboolean JNICALL Java_com_example_myplayer1_JNIProxy_ffmpegInit
  (JNIEnv *, jobject);

/*
 * Class:     com_example_myplayer1_JNIProxy
 * Method:    ffmpegUninit
 * Signature: ()Z
 */
JNIEXPORT jboolean JNICALL Java_com_example_myplayer1_JNIProxy_ffmpegUninit
  (JNIEnv *, jobject);

/*
 * Class:     com_example_myplayer1_JNIProxy
 * Method:    ffmpegGetAvcodecVersion
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_example_myplayer1_JNIProxy_ffmpegGetAvcodecVersion
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

实现jni方法

#include <jni.h>
#include "avcodec.h"
#include "avformat.h"
#include "com_example_myplayer1_JNIProxy.h"
//要保证头文件导入正常
/* Class:     com_example_myplayer1_JNIProxy
 * Method:    ffmpegInit
 * Signature: ()Z
 */
JNIEXPORT jboolean JNICALL Java_com_example_myplayer1_JNIProxy_ffmpegInit
  (JNIEnv *env, jobject obj){
    av_register_all();
    return 1;
}

/*
 * Class:     com_example_myplayer1_JNIProxy
 * Method:    ffmpegUninit
 * Signature: ()Z
 */
JNIEXPORT jboolean JNICALL Java_com_example_myplayer1_JNIProxy_ffmpegUninit
  (JNIEnv *env, jobject obj){
    return 1;
}

/*
 * Class:     com_example_myplayer1_JNIProxy
 * Method:    ffmpegGetAvcodecVersion
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_example_myplayer1_JNIProxy_ffmpegGetAvcodecVersion
  (JNIEnv *env, jobject obj){
    return avcodec_version();
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容