android 音频保持播放时exoplayer释放

wbrvyc0a  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(200)

我在对话框中使用ExoPlayer。我希望对话框打开时自动播放视频。当simpleExoPlayer.prepare()片段处于活动状态时,我可以进行自动播放,但当我关闭对话框时,音频仍在播放。在激活simpleExoPlayer.prepare()之前,当我关闭对话框时,音频停止。是否有其他方法来自动播放ExoPlayer或停止音频时,对话框关闭?

class VideoViewDialog (context: Context) : BaseDialog<LayoutDialogVideoViewBinding>(context) {
    private var videoUrl : String = ""
    private lateinit var simpleExoPlayer: ExoPlayer

    override fun populateUi() {
        setCanceledOnTouchOutside(true)
        mBinding?.apply {
            initializePlayer()
        }
    }

    private fun initializePlayer() {
        val mediaDataSourceFactory: DataSource.Factory = DefaultDataSource.Factory(context)

        val mediaSource = ProgressiveMediaSource.Factory(mediaDataSourceFactory).createMediaSource(
            MediaItem.fromUri(videoUrl))

        val mediaSourceFactory: MediaSource.Factory = DefaultMediaSourceFactory(mediaDataSourceFactory)

        simpleExoPlayer = ExoPlayer.Builder(context)
            .setMediaSourceFactory(mediaSourceFactory)
            .build()

        simpleExoPlayer.addMediaSource(mediaSource)

        simpleExoPlayer.playWhenReady = true
        simpleExoPlayer.prepare()

        mBinding?.apply {
            playerView.player = simpleExoPlayer
            playerView.requestFocus()
        }
        simpleExoPlayer.play()
    }

    private fun releasePlayer() {
        simpleExoPlayer.release()
    }

    public override fun onStart() {
        super.onStart()

        if (Util.SDK_INT > 23) initializePlayer()
    }

    public override fun onStop() {
        super.onStop()

        if (Util.SDK_INT > 23) releasePlayer()
    }

    override fun getLayoutRes(): Int {
        return R.layout.layout_dialog_video_view
    }

    companion object{
        fun newInstance(
            context: Context,
            videoUrl : String,
        ) : VideoViewDialog {
            val dialog = VideoViewDialog(context)
            dialog.also {
                it.videoUrl = videoUrl
            }
            return dialog
        }
    }
}

我在.release()之前尝试了.stopclearVideoSurface()playerView.player = null。没成功

woobm2wo

woobm2wo1#

你好像给initializePlayer()打了两次电话导致两个Exoplayer示例正在播放;你只能释放simpleExoPlayer变量引用的那个。

相关问题