2017-07-07 5 views
0

Ich versuche, meinen Java Media Code in JNI zu konvertieren. In java schaffen wir eine mediaMuxer mit dem absoluten Pfad der ZieldateiWie erstelle ich einen NDK AMediaMuxer?

MediaMuxer(@NonNull String path, @Format int format) 

wenn die JNI-Version des muxer einen Dateideskriptor verwenden.

Eine Möglichkeit besteht darin, Assets zu verwenden, aber das Asset ist wie Ressourcendateien: schreibgeschützt. Es ist also nicht der beste Weg das zu tun.

Was ist die gute Möglichkeit, einen FileDescriptor zu erstellen und an den JNI Muxer-Konstruktor zu übergeben?

Danke.

Antwort

1

Während es möglich ist - es ist Overkilling, Datei-Deskriptor auf Java-Seite zu erhalten und es dann an nativen Code zu übergeben. Viel einfacher ist es, den Namen der Ausgabedatei zu übergeben und die Datei im systemeigenen Code zu öffnen:

#include <unistd.h> 
#include <fcntl.h> 
#include <jni.h> 

void my_jni_func(JNIEnv* env, jobject thiz, jstring filename) { 
    const char* c_filename = (*env)->GetStringUTFChars(env, filename) 
    int output_fd = open(c_filename, O_WRONLY | O_CREAT | O_TRUNC, 0666); 
    (*env)->ReleaseStringUTFChars(env, filename, c_filename); 

    /* Check output_fd for validity, create muxer, and write streams */ 

    close(output_fd); /* close file when you've finished with muxer */ 
}