依照网上的demo,自写的应用录制15秒的视频只有200K左右的大小,打开一看就很模糊。影响了视频的后续处理(我们需要对视频后期提取颜色或动作变化的波形)。需要提高视频的录制质量。
解决办法:
网上流传比较广的一种办法是
法一:设置CamcorderProfile
//代码源自网络
/***********原来的写法************/
mMediaRecorder=new MediaRecorder();
//设置视频源
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
//设置音频源
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
//设置文件输出格式
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//设置视频编码方式
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
/*
* 设置视频编码帧率
mMediaRecorder.setVideoEncodingBitRate(5*1920*1080);
*/
//设置音频编码方式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//设置视频高和宽,注意文档的说明:
Must be called after setVideoSource().
//设置录制的视频帧率,注意文档的说明:
mMediaRecorder.setVideoFrameRate(30);
//设置输出路径
mMediaRecorder.setOutputFile("/sdcard/Document/data/"+ currentTemp + "/"
+ currentXml + "/"+System.currentTimeMillis()+".mp4");
//设置预览画面
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mSurfaceHolder.setFixedSize(640,480);//最高只能设置640x480
mMediaRecorder.setVideoSize(640,480);//最高只能设置640x480
//设置视频的最大持续时间
mMediaRecorder.setMaxDuration(30000);
/***********调整后的写法************/
//next codes is right for 2.3 and 4.0
mMediaRecorder=new MediaRecorder();
//设置视频源
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
//设置音频源
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
//相机参数配置类
//直接采用QUALITY_HIGH,这样可以提高视频的录制质量,但是不能设置编码格式和帧率等参数。
CamcorderProfile cProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mMediaRecorder.setProfile(cProfile);
//设置录制的视频帧率,注意文档的说明:
mMediaRecorder.setVideoFrameRate(30);
//设置输出路径
mMediaRecorder.setOutputFile("/sdcard/Document/data/"+ currentTemp + "/"
+ currentXml + "/"+System.currentTimeMillis()+".mp4");
//设置预览画面
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
/************************/
法二:比特率
看一下是否设置了视频的比特率编码,可以适当调高比特率的值,有奇效。
(在师兄的机智的帮助下,找到了这个法子,我实在是离不开师兄了)
代码在上面的注释中,没有的话试试加一行这个代码看看,或者是将5改成8改成10。
我一开始没有设置比特率,加上后已经满足计算需求,改成8效果更好了一些,并未尝试10。
注:
如果是像我一样一开始只有小几百K的话,那大概就是没有设置比特率,这时候系统调用了最低的配置来降低消耗,加上那一行代码,有奇效。