Невозможно воспроизвести любой аудиофайл из файла кэша - Media/ExoplayerAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно воспроизвести любой аудиофайл из файла кэша - Media/Exoplayer

Сообщение Anonymous »

Я пытаюсь записать звук с помощью API MediaRecorder Android и сохранить аудиофайл в каталоге кеша приложения. Аудиофайл прекрасно сохраняется в каталоге кэша и отлично работает в моей системе, когда я извлекаю его вручную, но я получаю это всякий раз, когда пытаюсь воспроизвести его, используя URI файла -
< ul>
[*]Ошибка источника из ExoPlayer

[*]java.io.IOException : Не удалось подготовиться.: status=0x1 из MediaPlayer


Как я записываю звук :

Код: Выделить всё

    private fun startRecording() {
recorder = MediaRecorder().apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
setOutputFile(File(
cacheDir.absolutePath, "${System.currentTimeMillis()}.3gpp"
).absolutePath.also {
audioFilePath = it
})
try {
prepare()
} catch (e: IOException) {
toast(getString(R.string.error_loading_data))
binding.micLayout.clearFocus()
}
start()
}
}
Я могу успешно загрузить его в Firebase Storage следующим образом:

Код: Выделить всё

    private fun processRecording() {
val audioFile = File(audioFilePath!!)
Log.d("Path>>", audioFilePath!!)
if (audioFile.exists()) {
val audioBytes = audioFile.readBytes()
playRecording(Uri.fromFile(audioFile))
FireRef.storageRef.child("ChatAudios/").child(audioFile.name).putBytes(audioBytes)
.addOnSuccessListener {
val url = it.storage.downloadUrl
url.addOnCompleteListener { link ->
if (link.isSuccessful) {
Log.d("URL>", link.result.toString())
}
}
}
}
}
Как я пытаюсь воспроизвести его с помощью MediaPlayer:

Код: Выделить всё

    private fun playRecording(uri: Uri) {
MediaPlayer().apply {
setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
setDataSource(applicationContext, uri)
prepare()
start()
}
}
Однако ExoPlayer воспроизводит его в первый раз, но в следующий раз начинает выдавать Ошибку источника (перезапуск приложения работает). Реализация ExoPlayer:

Код: Выделить всё

    private fun playRecording(uri: Uri) {
val exoPlayer = ExoPlayer.Builder(applicationContext).build()
val mediaItem = MediaItem.fromUri(uri)
exoPlayer.apply {
setMediaItem(mediaItem)
prepare()
play()
addListener(object : Player.Listener {
override fun onPlaybackStateChanged(playbackState: Int) {
if (playbackState == Player.STATE_ENDED) {
exoPlayer.release()
}
}
})
}
}
Будем очень благодарны за любую помощь, спасибо!

Подробнее здесь: https://stackoverflow.com/questions/786 ... exo-player
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»