我想在我的Nexus 5x上捕捉慢动作视频.这就是我配置媒体记录器的方式:
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH_SPEED_HIGH);
mMediaRecorder = new MediaRecorder();
// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set the high speed CamcorderProfile
mMediaRecorder.setProfile(profile);
// Step 4: Set output file
// Step 5: Prepare media recorder
// Step 6: Capture video
Run Code Online (Sandbox Code Playgroud)
问题是,捕获的视频不是我的设备支持的120 fps慢动作视频.它们是常规的29 fps视频.
对于下面定义的所有高速配置文件((从QUALITY_HIGH_SPEED_LOW到QUALITY_HIGH_SPEED_2160P),它们与正常录制配置文件类似,只有更高的输出帧速率和比特率.因此,使用setProfile(CamcorderProfile)设置这些配置文件而不指定任何其他编码参数将生成高速视频,而不是具有不同捕获和输出(回放)帧速率的慢动作视频. 要记录慢动作视频,应用程序必须通过setVideoFrameRate(int)和setVideoEncodingBitRate适当地设置视频输出(回放)帧速率和比特率. (int)基于慢动作因子.如果应用程序打算使用MediaCodec编码器进行视频录制,则必须根据此CamcorderProfile类似地设置MediaFormat的每个单独字段.
我没有得到的是,setProfile已经使用从所选CamcorderProfile派生的参数调用了两个方法setVideoFrameRate和setVideoEncodingBitRate.为什么我需要再打电话给他们?我在这里错过了什么?
任何帮助将不胜感激.对于我的生活,我不能让这个工作!
编辑:我试过调用这样的方法,但它仍然捕获正常速度的视频:
mMediaRecorder.setVideoFrameRate(profile.videoFrameRate/4);
mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate/4);
Run Code Online (Sandbox Code Playgroud)
1/4因为由CamcorderProfile.QUALITY_HIGH_SPEED_HIGH通告的帧速率是120,我想拍摄30 fps视频的文件中所述这里 …