私のアプリケーションは、音声メッセージの録音にMediaRecorderを使用します。状況の約50%で、MediaPlayerで再生できないファイルが生成されます。 VLCプレーヤーを使用すると、すべてのオーディオはOKです。Android - MediaRecorder - 再生できない出力を生成することが多い
私は、MediaRecorder状態のシーケンスが重要であることを知っています。私はまたオンラインであることが重要かどうかを試しました。変わりはない。
フォーマット/コーデックのヘルプを変更できますか? MediaPlayerではなくVLCでファイルを再生できるのはなぜですか?
私は何をしますか:
mRecorder = new MediaRecorder();
mRecorder.reset();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(audioFileName);
try {
mRecorder.prepare();
mRecorder.start();
} catch (Exception e) {
e.printStackTrace();
}
saveSpeech();
方法saveSpeechは、同じファイル内にちょうど別の方法です。私は後で 'リセット'を置いた - まだ違いはありません。
void saveSpeech(final Waypoint wp) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(WaypointActivity.thisActivity);
alertDialog.setTitle("Recording ...");
alertDialog.setMessage("Recording ... ");
alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
if(mRecorder != null) {
mRecorder.stop();
mRecorder.reset();
mRecorder.release();
mRecorder = null;
}
if(audioFileName == null) {
UserFeedback.show("Lost file name ... oops, App error");
return ;
}
}
});
alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}
valid 3GP fileの例。 invalid 3GP fileの例。リクエストに
、スタックトレースが追加さ:
Exception: message=[Prepare failed.: status=0x1], cause=[null], class=[class java.io.IOException], trace=[java.io.IOException: Prepare failed.: status=0x1
at android.media.MediaPlayer._prepare(Native Method)
at android.media.MediaPlayer.prepare(MediaPlayer.java:1158)
at nl.deholtmans.waypoints.FragmentWpDetailUpdate$4.onItemClick(FragmentWpDetailUpdate.java:262)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066)
at android.widget.AbsListView$3.run(AbsListView.java:3903)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
AudioEnconderを変更しようとしましたか?多分AACのために? –
オーディオファイル名は何ですか?それはconatin extension .3gpですか? – Embydextrous
有効なファイルと無効なファイルにリンクをコピーして、何が起きているのかを確認できますか? – manishg