Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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 当媒体记录器开始录制视频时,则;onPreviewFrame“;Camera.PreviewCallback停止工作的方法_Android_Android Camera_Mediarecorder_Android Mediarecorder_Miui - Fatal编程技术网

Android 当媒体记录器开始录制视频时,则;onPreviewFrame“;Camera.PreviewCallback停止工作的方法

Android 当媒体记录器开始录制视频时,则;onPreviewFrame“;Camera.PreviewCallback停止工作的方法,android,android-camera,mediarecorder,android-mediarecorder,miui,Android,Android Camera,Mediarecorder,Android Mediarecorder,Miui,我正在编写代码,在分析帧后录制视频。如果帧的红色级别高于240,则开始录制或红色级别低于230,停止视频录制 但问题是,当媒体录制器开始录制时,使用摄像头的onPreviewFrame方法。PreviewCallback停止为我的android设备的定制android OS MIUI工作Redmi note 7 pro 我的密码是贝娄 private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {

我正在编写代码,在分析帧后录制视频。如果帧的红色级别高于240,则开始录制或红色级别低于230,停止视频录制

但问题是,当媒体录制器开始录制时,使用摄像头的onPreviewFrame方法。PreviewCallback停止为我的android设备的定制android OS MIUI工作Redmi note 7 pro

我的密码是贝娄

private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {

       /**
        * {@inheritDoc}
        */
       @Override
       public void onPreviewFrame(byte[] data, Camera cam) {
           if (data == null) throw new NullPointerException();
           Camera.Size size = cam.getParameters().getPreviewSize();
           if (size == null) throw new NullPointerException();


           int width = size.width;
           int height = size.height;

           // decodeYUV420SPtoRedAvg function to find redness lavel of frame 
           int imgAvg = ImageProcessing.decodeYUV420SPtoRedAvg(data.clone(), height, width);
           Log.i(TAG, "imgAvg=" + imgAvg);
           if (imgAvg == 0 || imgAvg == 255) {
               return;
           }

           if (isRecording) {
               long diffInMs = new Date(System.currentTimeMillis()).getTime() - startTime;
               Log.i(TAG, imgAvg + " imgAvg diffInMs1=" + diffInMs);

               mProgressBar.setProgress((int) diffInMs);
               if (diffInMs >= recordingMS + 1000) {
                   stopRecording();
                   i = 0;
                   mProgressBar.setVisibility(View.GONE);
                   tvStatingCount.setVisibility(View.GONE);
               }
               tvStatingCount.setText(getString(R.string.reading_started_please_hold_your_finger_steady_for_one_minute) + imgAvg);
           } else {
               mProgressBar.setVisibility(View.GONE);
               tvStatingCount.setVisibility(View.VISIBLE);
               tvStatingCount.setText(getString(R.string.please_place_your_finger_over_your_rear_camera_to_start_the_readingt) + imgAvg);
           }

           if (imgAvg > 240) {
               if (!isRecording) {
                   starRecording();
                   i = 0;
                   mProgressBar.setProgress(0);
                   mProgressBar.setVisibility(View.VISIBLE);
                   tvStatingCount.setText(getString(R.string.reading_started_please_hold_your_finger_steady_for_one_minute) + imgAvg);
               }
           } else {
               if (isRecording && imgAvg < 230) {
                   stopRecording();
               }
               /*mProgressBar.setVisibility(View.GONE);
               tvStatingCount.setText(getString(R.string.please_place_your_finger_over_your_rear_camera_to_start_the_readingt, imgAvg));*/
           }
       }
   };
private Camera.PreviewCallback PreviewCallback=新摄像机。PreviewCallback(){
/**
*{@inheritardoc}
*/
@凌驾
预览帧上的公共无效(字节[]数据,摄像头){
如果(data==null)抛出新的NullPointerException();
Camera.Size Size=cam.getParameters().getPreviewSize();
如果(size==null)抛出新的NullPointerException();
int width=size.width;
int height=size.height;
//decodeYUV420SPtoRedAvg函数用于查找帧的红层
int imgAvg=ImageProcessing.decodeyuv420sptorederavg(data.clone(),高度,宽度);
Log.i(标签,“imgAvg=“+imgAvg”);
如果(imgAvg==0 | | imgAvg==255){
返回;
}
如果(isRecording){
long diffInMs=新日期(System.currentTimeMillis()).getTime()-startTime;
Log.i(标记,imgAvg+“imgAvg diffInMs1=“+diffInMs”);
mProgressBar.setProgress((int)diffInMs);
if(diffInMs>=记录ms+1000){
停止录制();
i=0;
mProgressBar.setVisibility(View.GONE);
tvStatingCount.setVisibility(视图已消失);
}
tvStatingCount.setText(getString(R.string.reading\u started\u please\u hold\u your\u finger\u staid\u一分钟)+imgAvg);
}否则{
mProgressBar.setVisibility(View.GONE);
tvStatingCount.setVisibility(视图可见);
tvStatingCount.setText(getString(R.string.请将手指放在后摄像头上以开始读取)+imgAvg);
}
如果(imgAvg>240){
如果(!isRecording){
starRecording();
i=0;
mProgressBar.setProgress(0);
mProgressBar.setVisibility(View.VISIBLE);
tvStatingCount.setText(getString(R.string.reading\u started\u please\u hold\u your\u finger\u staid\u一分钟)+imgAvg);
}
}否则{
如果(isRecording&&imgAvg<230){
停止录制();
}
/*mProgressBar.setVisibility(View.GONE);
tvStatingCount.setText(getString(R.string.please_把你的手指放在你的后摄像头上以开始读取,imgAvg))*/
}
}
};
该代码适用于本机Android版本。在三星moto设备中测试代码

有人能帮我找到解决办法吗