第十三節(文件合并)

同上節所示:我們在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;i<num;i++)
    {
        patches[i]=(char *)malloc(sizeof(char)*100);//我們認為每個文件的名字世超不過100個字符的
        //把要拆分成的文件的名字進行值替換(替換其中的%d)xiaoxingyun_%d.mkv
        sprintf(patches[i],split_p,i);
    }
    //放置合成后的文件
    FILE *fpw=fopen(merge_p,"wb");
    for(int i=0;i<num;i++)
    {
        int size=getFileSize(patches[i]);
        FILE *fp=fopen(patches[i],"rb");
        for(int j=0;j<size;j++)
        {
            fputc(fgetc(fp),fpw);
        }
        fclose(fp);
    }
    fclose(fpw);
    for(int i=0;i<num;i++)
    {
        free(patches[i]);
    }
    free(patches);
    env->ReleaseStringUTFChars(mergepath,merge_p);
    env->ReleaseStringUTFChars(split_path,split_p);
    LOGI("JNI begin 合成結束 ");
}

看下結果:

image.png

可以測試下合成后的文件,是可以正常播放的額

image.png
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容