Android 当媒体记录器开始录制视频时,则;onPreviewFrame“;Camera.PreviewCallback停止工作的方法
我正在编写代码,在分析帧后录制视频。如果帧的红色级别高于240,则开始录制或红色级别低于230,停止视频录制 但问题是,当媒体录制器开始录制时,使用摄像头的onPreviewFrame方法。PreviewCallback停止为我的android设备的定制android OS MIUI工作Redmi note 7 pro 我的密码是贝娄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() {
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设备中测试代码
有人能帮我找到解决办法吗