Android 是否可以在没有音频源的情况下使用CamcorderProfile?

Android 是否可以在没有音频源的情况下使用CamcorderProfile?,android,video,record,Android,Video,Record,我的代码: mediaRecorder = new MediaRecorder(); mediaRecorder.setCamera(camera); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); CamcorderProfile profile = CamcorderProfil

我的代码:

mediaRecorder = new MediaRecorder();
mediaRecorder.setCamera(camera);

mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);

CamcorderProfile profile = CamcorderProfile.get(QUALITY_LOW);
mediaRecorder.setProfile(profile);
它起作用了。 但我只需要录制视频

如果我不使用mediaRecorder.setAudioSource(),mediaRecorder.setProfile()将失败,并出现IllegalStateException

有什么想法吗?

来自:

公共档案(摄像机档案)

因为:API级别8使用这些设置 从摄像机配置文件对象获取 记录。这种方法应该是 在视频和音频之后调用 源已设置,并且在 setOutputFile()

每个概要文件指定以下内容 一组参数:

  • 文件输出格式
  • 视频编解码器格式
  • 视频比特率(以比特/秒为单位)
  • 视频帧速率(以每秒帧数为单位)
  • 视频帧宽度和高度
  • 音频编解码器格式音频比特率(位/秒)
  • 音频采样率
  • 用于录制的音频通道数
我想说的是,您可以从所需的摄像机配置文件中读取相关的视频相关设置,然后自己进行显式设置。

MediaRecorder的方法setProfile()

我们可以看到,如果:

profile.quality >= CamcorderProfile.QUALITY_TIME_LAPSE_LOW //1002
&&
profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_QVGA //1007

这确实应该适用于摄像机产品的任何裁剪;e、 g.如果您不想使用默认视频比特率,但使用不同的比特率(并非所有配置文件参数都可以更改,有些参数被四舍五入到最接近的可能值),请在回答中添加一些说明,以便对OP和其他参数有所帮助
if (getIsMuteShooting()) { // with out audio                                     
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);                  
    mRecorder.setVideoFrameRate(profile.videoFrameRate);                
    mRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);              
    mRecorder.setVideoEncodingBitRate(profile.videoBitRate);                
    mRecorder.setVideoEncoder(profile.videoCodec);
} else {
    mRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);              
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);               
    mRecorder.setVideoFrameRate(profile.videoFrameRate);                
    mRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);              
    mRecorder.setVideoEncodingBitRate(profile.videoBitRate);                
    mRecorder.setAudioEncodingBitRate(profile.audioBitRate);                
    mRecorder.setAudioChannels(profile.audioChannels);              
    mRecorder.setAudioSamplingRate(profile.audioSampleRate);                
    mRecorder.setVideoEncoder(profile.videoCodec);              
    mRecorder.setAudioEncoder(profile.audioCodec);
}
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
mediaRecorder.setOutputFormat(profile.fileFormat);
mediaRecorder.setVideoFrameRate(profile.videoFrameRate);
mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);
mediaRecorder.setVideoEncoder(profile.videoCodec);