下面是我工作的代碼結構來記錄視頻和音頻:採用Android MediaRecorder
問題: 1)爲什麼CamcorderProfile
需要? setProfile(...)
似乎設置爲任何QUALITY_HIGH給人的尺寸,但後來我把我想要的尺寸與setVideoSize(...)
,它覆蓋了這一點。然而,當我的logcat E/MediaRecorder(19526): setVideoSize called in an invalid state: 2
卸下兩個CamcorderProfile線,應用程序崩潰的setVideoSize(...)
。
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一個很好的例子。 Here它意味着在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 ...
你是對的,就像我發佈的那樣,我找到了'setProfile()'函數的代碼。它總是調用'setAudioEncoder()',所以如果你不設置音頻源,它會崩潰。答案是複製這個功能,這樣你仍然可以使用內置的'CamcorderProfile'設置,但也可以選擇你想要設置的設置(即音頻)。謝謝 – jacobianism
是的,如果你想使用攝像機只獲得視頻,你也可以做到這一點。通過你的方式,你可以獲得任何設備的最佳可用值,而無需對它們進行硬編碼。 –
經過大量搜索你的帖子,我的一天。將setVideoSize放在setVideoEncoder和setAudioEncoder之前就可以了。謝謝 – gtsouk