需要此代码来实现 MediaPlayer 功能。由于该项目本身是多平台的。
class AudioPlayerImp(private val client: HttpClient) : AudioPlayer {
private var mediaPlayer: MediaPlayer? = null
private var playerState: PlayerState = PlayerState.IDLE
override suspend fun play(audioUrl: String) {
stop()
val downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
val fileName = audioUrl.split("/").last()
val filePath = "${downloadsDir.absolutePath}/$fileName"
val file = File(filePath)
if (!file.exists()) {
client.downloadAndSave(audioUrl, fileName)
return
}
mediaPlayer = MediaPlayer().apply {
setDataSource(filePath)
setOnPreparedListener {
setPlayerState(PlayerState.PREPARED)
// Начать воспроизведение после подготовки
if (getPlayerState() == PlayerState.PREPARED) {
start()
setPlayerState(PlayerState.PLAYING)
}
}
setOnBufferingUpdateListener { _, percent ->
if (getPlayerState() == PlayerState.COMPLETED || getPlayerState() == PlayerState.PAUSED) {
return@setOnBufferingUpdateListener
}
if (!isPlaying && percent >= 50) { // Порог буферизации в 50%
if (getPlayerState() == PlayerState.PREPARED) {
start()
setPlayerState(PlayerState.PLAYING)
}
}
}
setOnCompletionListener {
setPlayerState(PlayerState.COMPLETED)
}
setOnErrorListener { _, what, extra ->
setPlayerState(PlayerState.ERROR)
true Ошибка обработана
}
prepareAsync()
}
}
}
这些是日志的摘录:
Expecting binder but got null!
initFromDataSource, cannot create extractor!
Failed to init from data source!
error (1, -2147483648)
Error (1,-2147483648)
这张图显示了我的请求的形式。我将其放入我的数据类中:
似乎您的 MediaPlayer 从未初始化。
我敢打赌,它会在
mediaPlayer
apply
声明期间破裂。
您确定 MediaPlayer 可以打开/播放您传递给它的文件吗?完整列表在这里:https://developer.android.com/media/platform/supported-formats