kotlin 如何通过使用D-pad在Android TV中的ExoPlayer中旋转/移动360球形视频

w80xi6nr  于 2023-11-21  发布在  Kotlin
关注(0)|答案(1)|浏览(213)

我试图通过使用D-pad在Android TV中移动或旋转360球形视频,但它旋转的是播放器,而不是球形视频。
尝试使用ExoPlayer和androidx.media3.exoplayer.ExoPlayer
XML:

<androidx.media3.ui.PlayerView
                android:id="@+id/playerView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:show_buffering="always"
                app:show_subtitle_button="true"
                app:surface_type="spherical_gl_surface_view"
                app:use_controller="true" />

字符串
代码:

...
    private lateinit var playerView: PlayerView
    private lateinit var player: ExoPlayer
        
        //rest implementation
            
            override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
                    when (keyCode) {
                        KeyEvent.KEYCODE_DPAD_LEFT -> {
                            // Move left (yaw left)
                            yawDegrees -= 100f // Adjust the angle as needed
                            updateRotation()
                            return true
                        }
                        KeyEvent.KEYCODE_DPAD_RIGHT -> {
                            // Move right (yaw right)
                            yawDegrees += 100f // Adjust the angle as needed
                            updateRotation()
                            return true
                        }
                    return super.onKeyDown(keyCode, event)
                }
            
            
            private fun updateRotation() {
                    playerView.videoSurfaceView?.rotation = yawDegrees
            
                }
            
            ...

vuktfyat

vuktfyat1#

显然,SphericalGLSurfaceView不支持除触摸或方向以外的任何旋转信息源。
我的建议是基本上从Google复制这个类,然后根据你的需要修改它。(由于private/final声明,你不能在没有hacky反射的情况下子类化或修改)。
所以基本上:
1.创建一个副本:SphericalGLSurfaceView
1.为Renderer创建一个getter
1.在Renderer内部类中创建一个方法,它将更新touchPitchtouchYawMatrix并调用updatePitchMatrix()或其他东西。(我将研究onScrollChange方法,以找出哪些值需要操作并尝试一下)
1.在ExoPlayer上使用你自己的SurfaceView,在创建它之后在播放器上使用反射和设置surfaceView。(因为这必须是私有的和最终的...)。还从旧的surfaceView重置参数(参见此参考)

相关问题