如何使用Timer在每个预设的间隔时间内重新开始录制视频?

时间:2011-04-26 14:32:51

标签: java android video recording

有人可以告诉我如何使用像计时器这样的东西来启动视频录制间隔过程一段时间(例如:5分钟)然后重新开始录制另一组5分钟视频,直到用户介入以停止该过程。我是android / java的新手,所以有人可以帮我解决这个问题吗?

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;
    }
}

1 个答案:

答案 0 :(得分:0)

这将每5分钟开始和停止录制,

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);