我正在使用YoutubePlayer播放YouTube视频。当互联网不可用时,我想显示一个网络错误对话框。我使用AbstractYouTubePlayerListener回调来侦听网络错误,但是当网络不可用时,不会调用onError方法。我正在为安卓电视开发这个应用程序。
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}")
}
})
}发布于 2022-09-20 10:08:14
看起来,onError方法并不能处理此类错误。
这里是定义的错误代码:
enum class PlayerError {
UNKNOWN, INVALID_PARAMETER_IN_REQUEST, HTML_5_PLAYER, VIDEO_NOT_FOUND, VIDEO_NOT_PLAYABLE_IN_EMBEDDED_PLAYER
}我会先检查网络连接,然后打电话给视频播放器。
试着读一下玩家的状态。如果是缓冲,我就会显示出来。
enum class PlayerState {
UNKNOWN, UNSTARTED, ENDED, PLAYING, PAUSED, BUFFERING, VIDEO_CUED
}https://stackoverflow.com/questions/73784790
复制相似问题