第十三节(文件合并)

同上节所示:我们在MainActivity中:
定义合成的路径:

mergeFilePath= Environment.getExternalStorageDirectory().getAbsolutePath().toString()+"/xiaoxingyunmerge.mkv";

定义文件合并的方法:

public  native  void mergeByJNI(String mergeFilePath,String splitFilePath,int num);

利用javap命令获取签名:

hhh:myapplication huozhenpeng$ javap -s -p MainActivity.class 
public native void mergeByJNI(java.lang.String, java.lang.String, int);
    descriptor: (Ljava/lang/String;Ljava/lang/String;I)V

大部分内容与上一节有重复,下面只记录要修改的:
native-lib.cpp

const JNINativeMethod gMethods[] = {
        {
                "spliteByJNI","(Ljava/lang/String;Ljava/lang/String;I)V",(void*)native_spliteByJNI
        },
        {
                "mergeByJNI","(Ljava/lang/String;Ljava/lang/String;I)V",(void*)native_mergeByJNI
        }
};

JNIEXPORT void JNICALL native_mergeByJNI
        (JNIEnv *env, jclass clazz,jstring mergepath,jstring split_path,jint num)
{

    LOGI("JNI begin 动态注册的方法 ");
    LOGI("JNI begin 合成开始 ");
    //首先获取到要合成的文件路径和已经拆分成的文件的路径
    const char * merge_p=env->GetStringUTFChars(mergepath,NULL);
    const char * split_p=env->GetStringUTFChars(split_path,NULL);
    //申请一个二维的char数组,用于存放拆分成的文件的名字
    char ** patches=(char **)malloc(sizeof(char *)*num);
    //循环为每个文件名申请地址
    for(int i=0;iReleaseStringUTFChars(mergepath,merge_p);
    env->ReleaseStringUTFChars(split_path,split_p);
    LOGI("JNI begin 合成结束 ");
}

看下结果:

image.png

可以测试下合成后的文件,是可以正常播放的额

第十三节(文件合并)_第1张图片
image.png
第十三节(文件合并)_第2张图片
image.png

你可能感兴趣的:(第十三节(文件合并))