2015-10-22 14 views
2

Мне нужно записывать и воспроизводить аудио-файл, я использую эти два кода миров:setDataSourceFD удалось .: статус = 0x80000000 играть файл ААС телефонов Samsung:

Для записи:

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) и на LG G3 с Android 5.0. Но когда я использую телефон Samsung я получаю исключение:

setDataSourceFD не удалось .: статус = 0x80000000

ли кто-то столкнулись с такой проблемой? и знает, как я должен справиться с этим? Если нет, есть ли альтернатива, которую я могу использовать для записи и воспроизведения аудиофайлов?

Заранее спасибо.

ответ

2

Это может произойти, если файл поврежден или неправильно обработан службой MediaPlayer, которая обрабатывает.

Смотрите некоторые примеры:

MediaPlayer.setDataSource causes IOException for valid file

Exception when calling setDataSource(FileDescriptor) method (failed.: status=0x80000000)

Кроме того, может оказаться, что файл не закрыта должным образом после записи и игрок терпит неудачу.

+0

Как я уже говорил в этом вопросе, одни и те же функции работают на Nexus 5 с ОС Android 6.0. Таким образом, это не относится к поврежденному файлу. Но какая-то проблема с устройствами Samsung. –

+0

Так же, как и этот файл, и воспроизвести его на другом устройстве. –

+0

Учтите, что некоторые устройства немного более «устойчивы» к небольшим ошибкам при использовании API, чем другие, и это очень верно в медиа API. Это была моя точка зрения. Служба MediaPlayer очень подвержена ошибкам из-за такого рода вещей. Вы останавливаете и отпускаете медиамагнитофон после того, как сделали запись, и перед тем, как открыть его для воспроизведения? Не могли бы вы поделиться этим кодом? –

1

Попробуйте использовать mpeg4 OUTPUTFORMAT

private void initRecorder() { 
    try { 
     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
     mRecorder.setOutputFile(RECORD_FILE_NAME); 
     mRecorder.prepare(); 
     mRecorder.start(); 
    } catch (IllegalStateException | IOException e) { 
     Utility.e("initRecorder: " + e.getMessage()); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^