2013-07-02 11 views
7

Próbuję dodać funkcję przechwytywania wideo do aplikacji AR. Zasadniczo rejestrujesz, co dzieje się na ekranie, i zapisujesz jako wideo (umożliwiając użytkownikowi udostępnienie go). Aplikacja AR jest napisana przy użyciu zestawu SDK Vuforia-Unity. Osiągnęliśmy to na platformie iOS.Przechwytywanie wideo na AR (Vuforia) z jednością w platformie Android

Mamy jednak duże trudności z robieniem tego samego na platformie Android. (Mamy nadzieję, że do osiągnięcia tego celu ukorzenienia się z urządzenia)

Poniżej nasz postęp:

  1. Aparat ocuppied przez program Vuforia, nie mogę uzyskać dostęp do strumienia wideo.

  2. Próbowałem przechwycić pstryk każdej klatki, a następnie połączyć je z niektórymi wyjściami wideo; ale ilość klatek na sekundę jest bardzo słaba (mniej niż 1 kl/s). Wykonanie zrzutu ekranu zajmuje 700 ms.

Czy myślę w niewłaściwym kierunku? Każda pomoc zostanie doceniona! Wielkie dzięki! Isaac

Oto mój kod badania:

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

przez przypadek dostałeś rozwiązanie :) –

+0

jeszcze nie .....>< – user2542563

+0

Jakieś postępy? Robię dokładnie to samo, ale bez powodzenia. – vmachacek

Odpowiedz

0

Mamy używałem jakiś Intel wtyczki w celu osiągnięcia Camera Record.

Video Capturing for Unity3d* Applications on Android*

Jest to dość proste do wykonania. Mam nadzieję, że uznasz je za przydatne.

+0

Wygląda na to, że nie jest już obsługiwany. Czy nadal używasz tego lub innego rozwiązania? –

Powiązane problemy