2017-07-17 112 views
1

我想从相机捕捉时间流逝。我已经与视频录制合作,并且运行良好。但是当我尝试录制时间延迟视频时,它出错了。从Android相机捕捉时间流逝

这里是我的代码,我想:

mMediaRecorder = new MediaRecorder(); 

    // Step 1: Unlock and set camera to MediaRecorder 
    mCamera.unlock(); 
    mMediaRecorder.setCamera(mCamera); 

    // Step 2: Set sources 
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) 
    mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_HIGH)); 

    // Step 4: Set output file 
    mMediaRecorder.setOutputFile(String.valueOf(GeneralUtils.getOutputMediaFile(MEDIA_TYPE_VIDEO))); 

    // Step 5: Set the preview output 
    mMediaRecorder.setPreviewDisplay(this.getHolder().getSurface()); 


    // Step 6: Prepare configured MediaRecorder 
    try { 
     mMediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage()); 
     releaseMediaRecorder(); 
     return false; 
    } catch (IOException e) { 
     Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); 
     releaseMediaRecorder(); 
     return false; 
    } 

录制视频后,当我检查它的大小是0.00B并不能播放此视频。为什么这不录制视频。

我试了更多,发现一些东西,如果你用CamcorderProfile.QUALITY_HIGH代替CamcorderProfile.QUALITY_TIME_LAPSE_HIGH它开始工作。我搜索了一下,发现原因是可能是你的设备不支持QUALITY_TIME_LAPSE_HIGH。但是,当我打开本机相机应用程序并点击记录时间推移视频时,这是一件奇怪的事情,它工作正常,这意味着我的设备支持QUALITY_TIME_LAPSE_HIGH

我的问题是,为什么它不适合我的应用程序。我的代码中有任何错误吗?你能不能让我知道。

+0

不确定这是否会成为运行时权限问题? – SripadRaj

+0

不是这不是任何权限问题。我已经检查了它 – PakDeveloper

+0

对于时间推移视频,你有“setCaptureRate”吗? –

回答

0

这项工作在我的应用程序。

     mCamera.unlock(); 
        if(videoRecorder == null) videoRecorder = new MediaRecorder(); 
        videoRecorder.setCamera(mCamera); 
        videoRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
        videoRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
        if(timeLapsedInterval == 0){ 
         videoRecorder.setProfile(CamcorderProfile.get(cameraUsing, CamcorderProfile.QUALITY_HIGH)); 
        }else{ 
         videoRecorder.setProfile(CamcorderProfile.get(cameraUsing, CamcorderProfile.QUALITY_TIME_LAPSE_HIGH)); 
         videoRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
        } 

        android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); 
        android.hardware.Camera.getCameraInfo(cameraUsing, info); 
        int orientation = (rt + 45)/90 * 90; 
        int rotation = 0; 
        if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { 
         rotation = (info.orientation - orientation + 360) % 360; 
        } else { // back-facing camera 
         rotation = (info.orientation + orientation) % 360; 
        } 
        videoRecorder.setOrientationHint(rotation); 

        String df = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); 
        videoFile = new File(dir, df+".mp4"); 
        videoRecorder.setOutputFile(videoFile.getAbsolutePath()); 
        videoRecorder.setPreviewDisplay(sh.getSurface()); 
        mrlOverall.setBackgroundColor(Color.WHITE); 

        if(timeLapsedInterval != 0) videoRecorder.setCaptureRate(1f/timeLapsedInterval); 

希望它有帮助!

+0

谢谢,但这不适用于我。对你的建议,我认为不需要为'QUALITY_TIME_LAPSE_HIGH'设置'setAudioEncoder',因为在文档中他们说音频从 – PakDeveloper

+0

对于您的本机相机应用程序,您是否知道录制的时间推移视频的分辨率?可能您可以直接使用该分辨率而不是使用HIGH? –