以下是我录制视频和音频的工作代码的结构:
问题:1)为什么CamcorderProfile
需要?setProfile(...)
似乎将尺寸设置为 QUALITY_HIGH 给出的任何尺寸,但后来我设置了我想要的尺寸setVideoSize(...)
,它覆盖了这个。但是,当我删除两个 CamcorderProfile 行时,应用程序会在setVideoSize(...)
LogCat处崩溃E/MediaRecorder(19526): setVideoSize called in an invalid state: 2
。
2) 如何不录制音频?该文档指出,如果setAudioSource(...)
不调用,则不会有音轨。但是,当我删除该行时,应用程序会在setProfile(...)
LogCat处崩溃E/MediaRecorder(19946): try to set the audio encoder without setting the audio source first
。
3) 如果我同时删除 CamcorderProfile 行和setAudioSource(...)
行,它会像 1) 一样崩溃。
4)我也尝试过添加该行
recorder.setOutputFormat(OutputFormat.DEFAULT);
而不是 CamcorderProfile 行。但现在它崩溃了perpare()
。如果setAudioSource(...)
被称为 LogCat 是:E/MediaRecorder(20737): audio source is set, but audio encoder is not set
如果不被称为 LogCat 是:E/MediaRecorder(20544): video source is set, but video encoder is not set
我浏览了整个互联网,但找不到设置 MediaRecorder 的正确方法的好例子。这意味着在 API 8 之后您应该使用 CamcorderProfile 类,但在我看来它会导致问题。
任何帮助都会很棒!谢谢!
代码(运行时有效,如下所示):
recorder = new MediaRecorder();
recorder.setCamera(<<camera>>);
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(profile);
recorder.setOutputFile(<<Path String>>);
recorder.setVideoSize(<<Width>>, <<Height>>);
recorder.setPreviewDisplay(<<Surface>>);
recorder.setOrientationHint(0);
recorder.setMaxDuration(10000);
recorder.setOnInfoListener(this);
try
{
recorder.prepare();
recorder.start();
} catch ...