如何使用计时器重新开始录制视频每preset的间隔时间? [英] How to use Timer to restart record video for every preset interval time?
本文介绍了如何使用计时器重新开始录制视频每preset的间隔时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有人能告诉我如何可以使用像一个计时器开始视频记录间隔过程中一段时间(例如:5分钟),然后重新启动录制另一组5分钟的视频,直到用户干预,制止过程。 。我在安卓/ JAVA kinna新,因此有人可以帮助我一起这个问题?
公共类ServiceRecording延伸服务{ @覆盖
公众的IBinder onBind(意向意图){
// TODO自动生成方法存根
返回null;
} 私人SurfaceView surfaceView;
私人SurfaceHolder surfaceHolder;
公共静态相机ServiceCamera;
公共静态布尔recordingStatus; @覆盖
公共无效的onCreate(){
super.onCreate(); recordingStatus = FALSE;
ServiceCamera = CameraTest.MainCamera;
surfaceView = CameraTest.surfaceView;
surfaceHolder = CameraTest.surfaceHolder;
} @覆盖
公众诠释onStartCommand(意向意图,诠释标志诠释startId){
super.onStartCommand(意向,旗帜,startId);
如果(recordingStatus == FALSE)
的StartRecording(); 返回START_STICKY;
} @覆盖
公共无效的onDestroy(){
super.onDestroy(); STO precording();
//camera.stop$p$pview();
recordingStatus = FALSE;
//camera.release();
} 私人MediaRecorder mediaRecorder; 私有静态诠释encodingStatus;
私人静态字符串videoResolution;
私人静态字符串FILEFORMAT; 私有静态布尔audioStatus;
私有静态诠释时间间隔内; 私有静态最后弦乐TAG =异常; 公共布尔的startRecording(){
尝试{
encodingStatus = Tab1Activity.encoding preF;
videoResolution = Tab1Activity.videoRes preF;
FILEFORMAT = Tab1Activity.fileFormat preF; audioStatus = Tab2Activity.audio preF;
一个时间间隔= Tab2Activity.timeInterval preF; Toast.makeText(getBaseContext()中,记录开始,Toast.LENGTH_SHORT).show();
尝试{
ServiceCamera.reconnect();
ServiceCamera.unlock();
}
赶上(例外五){ } mediaRecorder =新MediaRecorder(); mediaRecorder.setCamera(ServiceCamera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); mediaRecorder.setMaxDuration(时间间隔内); mediaRecorder.setAudioEn codeR(MediaRecorder.AudioEn coder.DEFAULT); mediaRecorder.setVideoEn codeR(encodingStatus); //mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
SimpleDateFormat的日期格式=新的SimpleDateFormat(YYYY-MM-DD HH_mm_ss);
日期日期=新的日期();
文件dirlist =新的文件(Environment.getExternalStorageDirectory()+/ VideoList); 如果(!(dirlist.exists()))
dirlist.mkdir(); 文件临时文件=新的文件(Environment.getExternalStorageDirectory()+/ VideoList,dateFormat.format(日期)+ FILEFORMAT);
mediaRecorder.setOutputFile(TempFile.getPath()); 串[] separatedRes = videoResolution.split(×);
separatedRes [0];
separatedRes [1]; mediaRecorder.setVideoSize(surfaceView.getWidth(),surfaceView.getHeight()); //mediaRecorder.setVideoFrameRate(videoFramesPerSecond); mediaRecorder.set previewDisplay(surfaceHolder.getSurface()); mediaRecorder prepare()。
mediaRecorder.start(); recordingStatus =真; 返回true;
} 赶上(IllegalStateException异常五){
Log.d(TAG,e.getMessage());
e.printStackTrace();
返回false;
}
赶上(IOException异常五){
Log.d(TAG,e.getMessage());
e.printStackTrace();
返回false;
}
} 公共无效STO precording(){
Toast.makeText(getBaseContext(),停止录制,Toast.LENGTH_SHORT).show();
mediaRecorder.reset();
mediaRecorder.release(); recordingStatus = FALSE;
}
}
解决方案
这将启动和停止每隔5分钟记录,
最后ServiceRecording记录= ....
最终的AtomicBoolean开始=新的AtomicBoolean(假);
ScheduledExecutorService的执行人= Executors.newScheduledExecutor(1);
executor.scheduleAtFixedRate(新的Runnable(){
公共无效的run(){
//只有停止,如果我们已经开始
如果(started.get()){
recording.stop();
}其他{
started.set(真);
}
recording.start();
}
},5,5,TimeUnit.MINUTES);
Can someone tell me how can i use something like a timer to start a video recording interval process for a period of time (eg: 5mins) then restarts to record another set of 5min video until the user intervene to stop the process.. I'm kinna new in android/java so can someone help me along with this question?
public class ServiceRecording extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
public static Camera ServiceCamera;
public static boolean recordingStatus;
@Override
public void onCreate() {
super.onCreate();
recordingStatus = false;
ServiceCamera = CameraTest.MainCamera;
surfaceView = CameraTest.surfaceView;
surfaceHolder = CameraTest.surfaceHolder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
if (recordingStatus == false)
startRecording();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
stopRecording();
//camera.stopPreview();
recordingStatus = false;
//camera.release();
}
private MediaRecorder mediaRecorder;
private static int encodingStatus;
private static String videoResolution;
private static String fileFormat;
private static boolean audioStatus;
private static int timeInterval;
private static final String TAG = "Exception";
public boolean startRecording(){
try {
encodingStatus = Tab1Activity.encodingPref;
videoResolution = Tab1Activity.videoResPref;
fileFormat = Tab1Activity.fileFormatPref;
audioStatus = Tab2Activity.audioPref;
timeInterval = Tab2Activity.timeIntervalPref;
Toast.makeText(getBaseContext(), "Recording Started", Toast.LENGTH_SHORT).show();
try{
ServiceCamera.reconnect();
ServiceCamera.unlock();
}
catch(Exception e){
}
mediaRecorder = new MediaRecorder();
mediaRecorder.setCamera(ServiceCamera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setMaxDuration(timeInterval);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setVideoEncoder(encodingStatus);
//mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH_mm_ss");
Date date = new Date();
File dirlist = new File(Environment.getExternalStorageDirectory() + "/VideoList");
if(!(dirlist.exists()))
dirlist.mkdir();
File TempFile = new File(Environment.getExternalStorageDirectory() + "/VideoList", dateFormat.format(date) + fileFormat);
mediaRecorder.setOutputFile(TempFile.getPath());
String[] separatedRes = videoResolution.split("x");
separatedRes[0];
separatedRes[1];
mediaRecorder.setVideoSize(surfaceView.getWidth(),surfaceView.getHeight());
//mediaRecorder.setVideoFrameRate(videoFramesPerSecond);
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.prepare();
mediaRecorder.start();
recordingStatus = true;
return true;
}
catch (IllegalStateException e) {
Log.d(TAG,e.getMessage());
e.printStackTrace();
return false;
}
catch (IOException e) {
Log.d(TAG,e.getMessage());
e.printStackTrace();
return false;
}
}
public void stopRecording() {
Toast.makeText(getBaseContext(), "Recording Stopped", Toast.LENGTH_SHORT).show();
mediaRecorder.reset();
mediaRecorder.release();
recordingStatus = false;
}
}
解决方案
This will start and stop the recording every 5 minutes,
final ServiceRecording recording = ....
final AtomicBoolean started = new AtomicBoolean(false);
ScheduledExecutorService executor = Executors.newScheduledExecutor(1);
executor.scheduleAtFixedRate(new Runnable() {
public void run() {
//only stop if we have started
if(started.get()) {
recording.stop();
} else {
started.set(true);
}
recording.start();
}
}, 5, 5, TimeUnit.MINUTES);
这篇关于如何使用计时器重新开始录制视频每preset的间隔时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文