You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android TV:如何用D-pad控制ExoPlayer中360全景视频旋转而非播放器

解决Android TV上D-pad控制360全景视频视角的问题

你当前的代码是直接旋转PlayerView的Surface容器,这只会让播放器整体旋转,而非调整全景视频的视角。要实现D-pad控制全景视频的朝向,需要操作SphericalGLSurfaceView的视角参数,而非Surface的旋转属性。

解决方案步骤:

  • 获取SphericalGLSurfaceView实例:因为XML中设置了surface_type="spherical_gl_surface_view",playerView.videoSurfaceView实际是SphericalGLSurfaceView对象,可直接强转。
  • 使用setView()调整视角:该方法接收三个核心参数:
    • yaw:水平旋转角度(左右移动对应此参数)
    • pitch:垂直旋转角度(上下移动可调整此参数)
    • zoom:缩放级别(默认1.0即可)
  • 控制角度范围:将yaw限制在0-360度、pitch限制在-90到90度之间,避免数值溢出导致画面异常。

修改后的代码:

private lateinit var playerView: PlayerView
private lateinit var player: ExoPlayer
private var yawDegrees = 0f // 初始化水平视角为0度
private var pitchDegrees = 0f // 初始化垂直视角为0度

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    when (keyCode) {
        KeyEvent.KEYCODE_DPAD_LEFT -> {
            yawDegrees -= 10f
            if (yawDegrees < 0) yawDegrees += 360f
            updatePanoramaView()
            return true
        }
        KeyEvent.KEYCODE_DPAD_RIGHT -> {
            yawDegrees += 10f
            if (yawDegrees > 360) yawDegrees -= 360f
            updatePanoramaView()
            return true
        }
        KeyEvent.KEYCODE_DPAD_UP -> {
            pitchDegrees += 5f
            pitchDegrees = pitchDegrees.coerceIn(-90f, 90f)
            updatePanoramaView()
            return true
        }
        KeyEvent.KEYCODE_DPAD_DOWN -> {
            pitchDegrees -= 5f
            pitchDegrees = pitchDegrees.coerceIn(-90f, 90f)
            updatePanoramaView()
            return true
        }
    }
    return super.onKeyDown(keyCode, event)
}

private fun updatePanoramaView() {
    val sphericalSurface = playerView.videoSurfaceView as? SphericalGLSurfaceView
    sphericalSurface?.setView(yawDegrees, pitchDegrees, 1.0f)
}

关键说明:

  • 不要用playerView.videoSurfaceView?.rotation调整视角,这是旋转整个播放器容器,和全景视频的内部视角无关。
  • setView()是SphericalGLSurfaceView专门用于控制全景视频相机朝向的API,修改这个参数才会真正改变用户看到的视频内容视角。

内容的提问来源于stack exchange,提问作者Asad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:55:33