Android使用CamcorderProfile捕获慢动作视频

Sid*_*rth 10 android android-camera android-mediarecorder slowmotion

我想在我的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视频的文件中所述这里

public int videoFrameRate

在API级别8中添加目标视频帧速率,以每秒帧数为单位.

如果应用程序通过setProfile(CamcorderProfile)配置视频录制而不指定任何其他MediaRecorder编码参数,则这是每秒目标录制的视频输出帧速率.例如,对于高速质量配置文件(从QUALITY_HIGH_SPEED_LOW到QUALITY_HIGH_SPEED_2160P),这是录制和播放视频的帧速率.如果应用程序打算使用高速质量配置文件创建慢动作用例,则必须通过setVideoFrameRate(int)设置与所需输出(回放)帧速率对应的不同视频帧速率.例如,如果QUALITY_HIGH_SPEED_720P在CamcorderProfile中通告240fps videoFrameRate,并且应用程序打算创建1/8因子慢动作录制视频,则应用程序必须通过setVideoFrameRate(int)设置30fps.如果不这样做,将导致具有正常速度播放帧速率的高速视频(例如,240fps).如果应用程序打算使用MediaCodec编码器进行视频录制,则必须根据此CamcorderProfile类似地设置MediaFormat的每个单独字段.

Aji*_*mar -1

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_LOW);
Run Code Online (Sandbox Code Playgroud)

或者

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_HIGH);
Run Code Online (Sandbox Code Playgroud)