以下は、ビデオとオーディオを記録するための作業コードの構造です。
質問: 1) なぜCamcorderProfile
必要なのですか? setProfile(...)
ディメンションを QUALITY_HIGH が与えるものに設定するように見えますが、後で で必要なディメンションを設定しsetVideoSize(...)
、これをオーバーライドします。ただし、2 つの 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 が呼び出される場合: LogCatE/MediaRecorder(20737): audio source is set, but audio encoder is not set
が呼び出されない場合: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 ...