Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android平台上使用unity在AR(Vuforia)上进行视频捕获_Android_Video_Unity3d_Augmented Reality_Vuforia - Fatal编程技术网

在Android平台上使用unity在AR(Vuforia)上进行视频捕获

在Android平台上使用unity在AR(Vuforia)上进行视频捕获,android,video,unity3d,augmented-reality,vuforia,Android,Video,Unity3d,Augmented Reality,Vuforia,我正在尝试向AR应用程序添加视频捕获功能。 基本上是记录屏幕上发生的事情,并将其保存为视频(允许用户共享)。 AR应用程序是使用Vuforia Unity SDK编写的。 我们已经在iOS平台上成功地实现了这一点 然而,我们在Android平台上做同样的事情有很大的困难。(我们希望在不根除设备的情况下实现这一目标) 以下是我们的进展: 摄像头被Vuforia程序锁定,我无法访问视频流 我试着捕捉每一帧的画面,然后将它们组合成一些视频输出;但是帧速率非常低(小于1fps)。拍摄一张屏幕截图需要70

我正在尝试向AR应用程序添加视频捕获功能。 基本上是记录屏幕上发生的事情,并将其保存为视频(允许用户共享)。 AR应用程序是使用Vuforia Unity SDK编写的。 我们已经在iOS平台上成功地实现了这一点

然而,我们在Android平台上做同样的事情有很大的困难。(我们希望在不根除设备的情况下实现这一目标)

以下是我们的进展:

  • 摄像头被Vuforia程序锁定,我无法访问视频流

  • 我试着捕捉每一帧的画面,然后将它们组合成一些视频输出;但是帧速率非常低(小于1fps)。拍摄一张屏幕截图需要700毫秒

  • 我是不是从错误的方向思考?任何帮助都将不胜感激! 非常感谢! 艾萨克

    以下是我的测试代码:

    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();
        }
    
    }
    
    public屏幕截图(){
    DisplayMetrics=新的DisplayMetrics();
    WindowManager WM=(WindowManager)MainActivity.this.getSystemService(Context.WINDOW\u服务);
    Display Display=WM.getDefaultDisplay();
    display.getMetrics(metrics);
    int height=metrics.heightPixels;//屏幕高度
    int width=metrics.widthPixels;//屏幕宽度
    int pixelformat=display.getPixelFormat();
    PixelFormat localPixelFormat1=新PixelFormat();
    getPixelFormatInfo(PixelFormat,localPixelFormat1);
    int deepth=localPixelFormat1.bytesperpoixel;
    字节[]数组字节=新字节[高度*宽度*深度];
    long tmp=System.currentTimeMillis();
    试一试{
    对于(int i=0;i<10;i++){
    InputStream LocaliInputStream=readAsRoot();
    DataInputStream localDataInputStream=新DataInputStream(
    本地输入流);
    android.util.Log.e(“mytest”,“----读取开始----”;
    localDataInputStream.readFully(arrayOfByte);
    android.util.Log.e(“mytest”,”----读取结束----time=“+(System.currentTimeMillis()-tmp));
    localInputStream.close();
    File mid=新文件(“/mnt/sdcard/AAA”);
    如果(!mid.exists()){
    mid.mkdir();
    }
    FileOutputStream out=新的FileOutputStream(新文件(
    “/mnt/sdcard/AAA/”+System.currentTimeMillis()+“.png”);
    int[]tmpColor=新int[宽度*高度];
    int r,g,b;
    tmp=System.currentTimeMillis();
    android.util.Log.e(“mytest”,“----位图开始----”;
    对于(int j=0;j<宽度*高度*深度;j+=深度){
    b=阵列字节[j]&0xff;
    g=阵列字节[j+1]&0xff;
    r=arrayOfByte[j+2]&0xff;
    
    tmpColor[j/deepth]=(r你有没有得到解决方案:)有什么进展?我做了完全相同的事情,到目前为止运气都不好。这有用吗:?