我需要記錄和播放音頻文件,我使用的代碼,這兩個一塊塊:setDataSourceFD失敗:狀態= 0x80000000的玩上三星手機上的AAC文件:
對於記錄:
private void initRecorder() {
try {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(RECORD_FILE_NAME);
mRecorder.prepare();
mRecorder.start();
} catch (IllegalStateException | IOException e) {
Utility.e("initRecorder: " + e.getMessage());
}
}
播放:
try {
FileDescriptor fd = null;
FileInputStream fis = new FileInputStream(RECORD_FILE_NAME);
fd = fis.getFD();
if (fd != null) {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(fd);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.prepare();
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mPlayTime > 0) {
mMediaPlayer.seekTo(mPlayTime);
}
mMediaPlayer.start();
setStatus(STATUS_PLAYING);
}
});
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mMediaPlayer.release();
RecordMomentActivity.this.mPlayTime = 0;
setStatus(STATUS_NOT_PLAYING);
}
});
}
} catch (Exception e) {
Utility.e("Exception: " + e.getMessage());
setStatus(STATUS_NOT_PLAYING);
}
}
而這種代碼的偉大工程,記錄和重放在Nexus 5(A音頻ndroid 6.0)和Android 5.0的LG G3。但是當我使用的三星手機,我得到異常:
setDataSourceFD失敗:狀態= 0x80000000的
有人遇到這個問題?並知道我應該如何處理它? 如果沒有,我可以用來錄製和播放音頻文件嗎?
在此先感謝。
就像我提到的問題,同樣的功能在Nexus 5的工作與Android 6.0。所以這不是一個損壞的文件的情況。但是,三星設備的一些問題。 –
以及採取此文件並在其他設備上播放它。 –
考慮到一些設備在使用API時比其他設備對於小錯誤更具有「彈性」,並且這對於媒體API是非常正確的。這是我的觀點。 MediaPlayer服務很容易因爲這種事情而失敗。記錄完成後,打開媒體播放器之前是否停止並釋放媒體記錄器?你能分享這些代碼嗎? –