When building for Android, chances are that gstreamer is going to be loaded from Java using System.loadLibrary(). In that case we can initialize GStreamer (including static plugins), redirect log functions, etc. This code is copied from cerbero because it can be used with gstreamer-full-1.0 too. Cerbero needs to be adapted to drop that code and generate gst_init_static_plugins() function. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/617>
106 lines
3.3 KiB
Java
106 lines
3.3 KiB
Java
/**
|
|
* Copy this file into your Android project and call init(). If your project
|
|
* contains fonts and/or certificates in assets, uncomment copyFonts() and/or
|
|
* copyCaCertificates() lines in init().
|
|
*/
|
|
package org.freedesktop.gstreamer;
|
|
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.AssetManager;
|
|
import android.system.Os;
|
|
|
|
public class GStreamer {
|
|
private static native void nativeInit(Context context) throws Exception;
|
|
|
|
public static void init(Context context) throws Exception {
|
|
//copyFonts(context);
|
|
//copyCaCertificates(context);
|
|
nativeInit(context);
|
|
}
|
|
|
|
private static void copyFonts(Context context) {
|
|
AssetManager assetManager = context.getAssets();
|
|
File filesDir = context.getFilesDir();
|
|
File fontsFCDir = new File (filesDir, "fontconfig");
|
|
File fontsDir = new File (fontsFCDir, "fonts");
|
|
File fontsCfg = new File (fontsFCDir, "fonts.conf");
|
|
|
|
fontsDir.mkdirs();
|
|
|
|
try {
|
|
/* Copy the config file */
|
|
copyFile (assetManager, "fontconfig/fonts.conf", fontsCfg);
|
|
/* Copy the fonts */
|
|
for(String filename : assetManager.list("fontconfig/fonts/truetype")) {
|
|
File font = new File(fontsDir, filename);
|
|
copyFile (assetManager, "fontconfig/fonts/truetype/" + filename, font);
|
|
}
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static void copyCaCertificates(Context context) {
|
|
AssetManager assetManager = context.getAssets();
|
|
File filesDir = context.getFilesDir();
|
|
File sslDir = new File (filesDir, "ssl");
|
|
File certsDir = new File (sslDir, "certs");
|
|
File certs = new File (certsDir, "ca-certificates.crt");
|
|
|
|
certsDir.mkdirs();
|
|
|
|
try {
|
|
/* Copy the certificates file */
|
|
copyFile (assetManager, "ssl/certs/ca-certificates.crt", certs);
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static void copyFile(AssetManager assetManager, String assetPath, File outFile) throws IOException {
|
|
InputStream in = null;
|
|
OutputStream out = null;
|
|
IOException exception = null;
|
|
|
|
if (outFile.exists())
|
|
outFile.delete();
|
|
|
|
try {
|
|
in = assetManager.open(assetPath);
|
|
out = new FileOutputStream(outFile);
|
|
|
|
byte[] buffer = new byte[1024];
|
|
int read;
|
|
while ((read = in.read(buffer)) != -1) {
|
|
out.write(buffer, 0, read);
|
|
}
|
|
out.flush();
|
|
} catch (IOException e) {
|
|
exception = e;
|
|
} finally {
|
|
if (in != null)
|
|
try {
|
|
in.close();
|
|
} catch (IOException e) {
|
|
if (exception == null)
|
|
exception = e;
|
|
}
|
|
if (out != null)
|
|
try {
|
|
out.close();
|
|
} catch (IOException e) {
|
|
if (exception == null)
|
|
exception = e;
|
|
}
|
|
if (exception != null)
|
|
throw exception;
|
|
}
|
|
}
|
|
}
|