无尽的线程执行时间差异

时间:2017-10-13 05:49:48

标签: java android mediarecorder java-threads

我正在尝试创建一个应该连续记录的摄像头服务。
我现在可以实现这个目标。我保存1小时的视频文件,然后创建另一个。

  public void run() {
        if(!SDCard.getInstance(mContext).isAvailable()){
            Log.e(TAG,"SD CARD IS NOT AVAILABLE");
            return;
        }
        createSurfaceCallback();
        while (true){
            if(surfaceExist){
                try{
                    boolean prepared = start();
                    if(prepared) {
                        mMediaRecorder.start();
                        recording = true;
                        Thread.sleep(1000 * 60*60);
                        failureCount = 0;
                    }else {
                        Thread.sleep(50);
                        recording = false;
                        failureCount ++;

                    }
                    destroy();
                }catch (Exception ex){
                    ex.printStackTrace();
                    failureCount++;
                    recording = false;
                }
            }else{
                try{
                    Thread.sleep(200);//waits surface the created
                }catch (Exception ex){

                }
            }

        }
    }

到目前为止,我的代码在3天内运行完美但我的问题是视频之间存在时差。例如,

  1. 视频:11-04-48:258 - 12-04-48:258(时差为无)
  2. 视频:12-04-49:160 - 13-04-49:010(第一和第二视频有900毫秒的时差和更短的视频)
  3. 视频:13-04-52:078 - 14-04-51:976(第二和第三视频差不多有3秒的时差和更短的视频)
  4. 为什么我得出这个结论?这个时差发生了什么?

    1. 操作系统级别的线程调度问题。
    2. 媒体录制器问题(可能是缓冲或重启)
    3. 我的代码以某种方式出现。
    4. 这些选项我可能是这个问题的原因,但我不确定。我可以减少时差吗?

       private void destroy(){
              try {
                  recording = false;
                  mMediaRecorder.reset();
              } catch (RuntimeException e) {
                  e.printStackTrace();
              }
          }
      

0 个答案:

没有答案