首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YoutubePlayer - onError方法没有被调用。

YoutubePlayer - onError方法没有被调用。
EN

Stack Overflow用户
提问于 2022-09-20 09:51:46
回答 1查看 30关注 0票数 0

我正在使用YoutubePlayer播放YouTube视频。当互联网不可用时,我想显示一个网络错误对话框。我使用AbstractYouTubePlayerListener回调来侦听网络错误,但是当网络不可用时,不会调用onError方法。我正在为安卓电视开发这个应用程序。

代码语言:javascript
复制
private fun initializePlayer() {
    val customPlayerUi =
        binding.youtubePlayerView.inflateCustomPlayerUi(R.layout.yt_custom_player_ui)
    binding.youtubePlayerView.getYouTubePlayerWhenReady(object : YouTubePlayerCallback {
        override fun onYouTubePlayer(youTubePlayer: YouTubePlayer) {
            this@YoutubeVideoFragment.initializedYouTubePlayer = youTubePlayer
            val customPlayerUiController = YtCustomPlayerController(
                requireContext(),
                customPlayerUi,
                youTubePlayer
            )
            youTubePlayer.addListener(customPlayerUiController)
            if (isEulaAccepted) {
                youTubePlayer.loadVideo(
                    glance.peek.videoPeek.video.youtubeVideo.videoId,
                    videoStartTime.toFloat()
                )
            }
            if (videoItemBinding.nudgeReaction.visibility == View.VISIBLE &&
                videoItemBinding.textPre.text == getString(R.string.skipping_to_next_video)
            ) {
                videoItemBinding.nudgeReaction.setGone()
            }
        }
    })

    binding.youtubePlayerView.addYouTubePlayerListener(object :
        AbstractYouTubePlayerListener() {
        override fun onStateChange(
            youTubePlayer: YouTubePlayer,
            state: PlayerConstants.PlayerState
        ) {
            handleVideoStateChange(state)
        }

        override fun onCurrentSecond(youTubePlayer: YouTubePlayer, second: Float) {
            if (seekRequestedTime == -1 || seekRequestedTime == second.toInt()) {
                // when user starts seeking,running time is getting updated parallely.So,to avoid jerk,will update running time after user seek time is reached
                // else if user is not seeking by default seekRequestedTime will be -1
                updateVideoRunningTime(second)
                seekRequestedTime = -1
            }
        }

        override fun onVideoDuration(youTubePlayer: YouTubePlayer, duration: Float) {
            currentSeekBar.max = duration.toInt()
            updateUIDuration(duration)
        }

        override fun onError(
            youTubePlayer: YouTubePlayer,
            error: PlayerConstants.PlayerError
        ) {
            super.onError(youTubePlayer, error)
            Timber.i("onError: $error")
            setErrorCodes("Youtube error:${error.name}")
        }
    })
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-20 10:08:14

看起来,onError方法并不能处理此类错误。

这里是定义的错误代码:

代码语言:javascript
复制
    enum class PlayerError {
        UNKNOWN, INVALID_PARAMETER_IN_REQUEST, HTML_5_PLAYER, VIDEO_NOT_FOUND, VIDEO_NOT_PLAYABLE_IN_EMBEDDED_PLAYER
    }

我会先检查网络连接,然后打电话给视频播放器。

试着读一下玩家的状态。如果是缓冲,我就会显示出来。

代码语言:javascript
复制
    enum class PlayerState {
        UNKNOWN, UNSTARTED, ENDED, PLAYING, PAUSED, BUFFERING, VIDEO_CUED
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73784790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档