Ich versuche, eine Video-Capture-Funktion zu einer AR-App hinzugefügt. Im Wesentlichen aufzeichnen, was auf dem Bildschirm passiert, und speichern Sie es als Video (so dass Benutzer es freigeben). Die AR APP wurde mit dem Vuforia-Unity SDK geschrieben. Wir haben dies erfolgreich auf iOS-Plattform erreicht.Video-Capture auf AR (Vuforia) mit Einheit in Android-Plattform
Allerdings haben wir große Schwierigkeiten damit, dasselbe auf der Android-Plattform zu tun. (Wir hoffen, dies zu erreichen mit über das Gerät Verwurzelung)
Hier finden Sie unsere Fortschritte:
Die Kamera durch das Vuforia Programm ocuppied ist, kann ich keinen Zugriff auf den Video-Stream bekommen.
Ich habe versucht, einen sceshot von jedem Rahmen zu erfassen, und kombinieren Sie sie dann zu etwas Videoausgabe; aber die framerate ist extrem schlecht (weniger als 1 fps). Es dauert 700 ms, um einen Screenshot aufzunehmen.
Denke ich aus der falschen Richtung? Jede Hilfe wird sehr geschätzt werden! Vielen Dank! Isaac
Das folgende ist mein Testcode:
public void acquireScreenshot() {
DisplayMetrics metrics = new DisplayMetrics();
WindowManager WM = (WindowManager) MainActivity.this.getSystemService(Context.WINDOW_SERVICE);
Display display = WM.getDefaultDisplay();
display.getMetrics(metrics);
int height = metrics.heightPixels; // screen height
int width = metrics.widthPixels; // screen width
int pixelformat = display.getPixelFormat();
PixelFormat localPixelFormat1 = new PixelFormat();
PixelFormat.getPixelFormatInfo(pixelformat, localPixelFormat1);
int deepth = localPixelFormat1.bytesPerPixel;
byte[] arrayOfByte = new byte[height* width* deepth];
long tmp = System.currentTimeMillis();
try {
for(int i = 0 ; i < 10 ; i++){
InputStream localInputStream = readAsRoot();
DataInputStream localDataInputStream = new DataInputStream(
localInputStream);
android.util.Log.e("mytest", "-----read start-------");
localDataInputStream.readFully(arrayOfByte);
android.util.Log.e("mytest", "-----read end-------time = " + (System.currentTimeMillis() -tmp));
localInputStream.close();
File mid = new File("/mnt/sdcard/AAA");
if(!mid.exists()){
mid.mkdir();
}
FileOutputStream out = new FileOutputStream(new File(
"/mnt/sdcard/AAA/"+System.currentTimeMillis()+".png"));
int[] tmpColor = new int[width * height];
int r, g, b;
tmp = System.currentTimeMillis();
android.util.Log.e("mytest", "-----bitmap start-------");
for (int j = 0; j < width * height * deepth; j+=deepth) {
b = arrayOfByte[j]&0xff;
g = arrayOfByte[j+1]&0xff;
r = arrayOfByte[j+2]&0xff;
tmpColor[j/deepth] = (r << 16) | (g << 8) | b |(0xff000000);
}
Bitmap tmpMap = Bitmap.createBitmap(tmpColor, width, height,
Bitmap.Config.ARGB_8888);
android.util.Log.e("mytest", "-----bitmap end-------time = " + (System.currentTimeMillis() -tmp));
tmp = System.currentTimeMillis();
android.util.Log.e("mytest", "-----compress start-------");
tmpMap.compress(Bitmap.CompressFormat.PNG, 100, out);
android.util.Log.e("mytest", "-----compress end-------time = " + (System.currentTimeMillis() -tmp));
out.close();
Thread.sleep(40);
}
} catch (Exception e) {
android.util.Log.e("mytest", "Exception");
e.printStackTrace();
}
}
bei irgend einem Zufall hast du die Lösung bekommen :) –
noch nicht .....>< – user2542563
Irgendwelche Fortschritte? Ich mache genau das gleiche ohne Glück bisher. – vmachacek