大家好,我使用MediaRecorder Class录视频,却发现无法修改帧率
视频我用的AVC编码,音频我用的AAC编码(这个是API LEVEL 10以后支持的)
我的主体源码如下:
- Java code
recorder = new MediaRecorder(); recorder.setPreviewDisplay(surfaceHolder.getSurface());recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//set the Output Formatrecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //set the Video Sizerecorder.setVideoSize(176,144); //set the Frame raterecorder.setVideoFrameRate(15);//Set the Video Encoderrecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //Set the Audio Encoderrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); recorder.setOutputFile(myRecAudioFile.getAbsolutePath());recorder.prepare(); recorder.start();
但是debug说
- Java code
03-22 22:39:41.120: WARN/StagefrightRecorder(662): Intended video encoding frame rate (15 fps) is too small and will be set to (27 fps)
甚至还爆出了一个匪夷所思的错误
- Java code
03-22 22:39:41.380: ERROR/VENC_ENC(662): Bitrate 192000
最后我录出来的视频就接近28fps了
大家帮忙看看为什么呢?
------解决方案--------------------
- Java code
/*** Uses the settings from a CamcorderProfile object for recording. This method should* be called after the video AND audio sources are set, and before setOutputFile().* 使用来自记录CamcorderProfile对象的设置。这种方法应该调用在* 被命名后的视频和音频源设置和setOutputFile()之前。* @param profile the CamcorderProfile to use* @see android.media.CamcorderProfile*/public void setProfile(CamcorderProfile profile) {setOutputFormat(profile.fileFormat); //设置在录制过程中产生的输出文件格式[color=#FF0000]setVideoFrameRate(profile.videoFrameRate); //设置视频的帧速率,以被捕获[/color]setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); //设置宽度和高度的视频捕获setVideoEncodingBitRate(profile.videoBitRate); //设置视频编码录音比特率setAudioEncodingBitRate(profile.audioBitRate);//设置音频编码录音比特率setAudioChannels(profile.audioChannels);//设置录制的音频通道数setAudioSamplingRate(profile.audioSampleRate); //设置音频采样率记录setVideoEncoder(profile.videoCodec); //设置视频编码器可用于录制。如果这个方法不叫,输出文件将不包含视频setAudioEncoder(profile.audioCodec); //设置音频编码器可用于录制 如果是录音一定要设置哦不然没有音频哦}
------解决方案--------------------
这个真是太深了
------解决方案--------------------
Androd上,实际上测出来的效果:H264编码的时候,采用的就是可变帧率,设置帧率没用。