使用 mediaPlayer 播放 mp4 格式的 cloudKey 音频消息

问题描述 投票:0回答:1

需要此代码来实现 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)

这张图显示了我的请求的形式。我将其放入我的数据类中:

android kotlin android-jetpack-compose android-mediaplayer compose-multiplatform
1个回答
0
投票

似乎您的 MediaPlayer 从未初始化。

我敢打赌,它会在

mediaPlayer
apply
声明期间破裂。

您确定 MediaPlayer 可以打开/播放您传递给它的文件吗?完整列表在这里:https://developer.android.com/media/platform/supported-formats

© www.soinside.com 2019 - 2024. All rights reserved.