2013-07-02 36 views
7

Bir AR uygulamasına video yakalama işlevi eklemeye çalışıyorum. Ekranda neler olup bittiğini temel olarak kaydedin ve video olarak kaydedin (kullanıcının paylaşmasına izin verin). AR APP Vuforia-Unity SDK ile yazılmıştır. Bunu iOS platformunda başarılı bir şekilde gerçekleştirdik. Bununla birlikte, Android platformunda aynı şeyi yapmakta büyük zorluklarla karşılaşıyoruz. Kamera Vuforia program tarafından ocuppied edilirAndroid platformunda birlikle AR (Vuforia) Video yakalama

  1. , ben video akışına erişim elde edemez: Aşağıdaki

    (biz dışarı cihazı köklendirme ile bunu başarmak için umut ediyor) bizim gelişmedir.

  2. Her karenin bir görüntüsünü yakalamayı denedikten sonra bunları bazı video çıkışlarına birleştirdim; ancak çerçeve hızı aşırı derecede fakirdir (1 fps'den az). Bir ekran görüntüsü yakalamak için 700ms gerekir.

Yanlış yönden mi düşünüyorum? Herhangi bir yardım derinden takdir edilecektir! Çok teşekkürler!

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(); 
    } 

} 
+0

herhangi bir şans çözümünü buldunuz :) –

+0

henüz yok .....>< – user2542563

+0

Herhangi bir gelişme var mı? Şimdiye kadar hiç şanssızlıkla aynı şeyi yapıyorum. – vmachacek

cevap

0

Biz Kamera Kaydı elde etmek için bazı Intel Eklentisini kullanmak kullandı: Isaac

aşağıdaki benim test kodudur.

Video Capturing for Unity3d* Applications on Android*

O uygulamak oldukça basittir. Umarım onları yararlı bulursun.

+0

Artık desteklenmiyor gibi görünüyor. Hala bu ya da başka bir çözümü kullanıyor musunuz? –

İlgili konular