我目前正在尝试使用GLSurfaceView
作为MediaRecorder to record a video
的预览。我GLSurfaceView
的当前扩展程序设置为SurfaceTexture
,作为Camera
MediaRecorder
对象的预览
我决定为GLSurfaceView
的扩展程序SurfaceTexture
制作一个getter,并设置我MediaRecorder
的预览表面,如下所示:
mMediaRecorder.setPreviewDisplay(new Surface(glSurfaceViewInstance.getSurfaceTexture()))
我目前的问题是,出于某种原因,预览的帧率开始正常,但是大幅减慢到爬行,可能以静止图像结束我按下录制按钮的时间越长。
为什么会这样,我该如何防止它发生?
答案 0 :(得分:0)
我认为这次是一个线程问题。我的UI更新Thread的代码是这样的:
public class ThreadProgress extends Thread implements Runnable {
@Override
public void run() {
while (progressValue < MAX_DURATION_VIDEO && !mThreadProgress.isInterrupted() && isRecording) {
/*
try {
progressValue = (int) (previousProgressInMillis + System.currentTimeMillis() - startProgressMillis);
Log.i("progress_val", progressValue + "");
Message message = new Message();
message.arg1 = progressValue;
handler.sendMessage(message);
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
*/
progressValue = (int) (previousProgressInMillis + System.currentTimeMillis() - startProgressMillis);
Log.i("progress_val", progressValue + "");
Message message = new Message();
message.arg1 = progressValue;
handler.sendMessage(message);
}
if (progressValue == MAX_DURATION_VIDEO) {
try {
mMediaRecorder.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
使用评论的部分而不是我已经取消注释的部分。是因为Thread.sleep(1)
应该疏通线程队列还是什么?