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