Meine App verwendet den MediaRecorder zum Aufnehmen einer Sprachnachricht. In etwa 50% der Fälle wird eine Datei erzeugt, die nicht mit dem MediaPlayer abgespielt werden kann. Wenn ich den VLC-Player verwende, ist alles Audio in Ordnung.Android - MediaRecorder - produziert oft unspielbare Ausgabe
Ich weiß, dass die Reihenfolge der MediaRecorder Staaten wichtig ist. Ich habe auch versucht, ob es wichtig ist online zu sein oder nicht. Kein Unterschied.
Kann das Ändern des Formats/Codecs helfen? Warum kann ich die Datei in VLC und nicht im MediaPlayer abspielen?
Was kann ich tun:
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();
Methode saveSpeech nur ein weiteres Verfahren in der gleichen Datei. Ich habe später den 'Reset' gesetzt - immer noch kein Unterschied.
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();
}
Beispiel für eine valid 3GP file. Beispiel für eine invalid 3GP file.
Auf Wunsch der Stack-Trace hinzugefügt:
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)
Haben Sie versucht, Ihren AudioEnconder zu wechseln? Vielleicht für AAC? –
Was ist Audiofile Name? Gibt es Erweiterung .3gp? – Embydextrous
Können Sie einen Link zu einer gültigen und ungültigen Datei kopieren, damit wir überprüfen können, was vor sich geht? – manishg