添加依赖项
Kotlin
implementation("androidx.media3:media3-ui:1.6.1")
Groovy
implementation "androidx.media3:media3-ui:1.6.1"
PlayerView
其中最重要的组件是 PlayerView
,它是一个用于媒体播放的视图。PlayerView
会在播放期间显示视频、图片、字幕和专辑封面,以及播放控件。
PlayerView
有一个 setPlayer()
方法,用于附加和分离(通过传递 null
)Player
实例。
PlayerView
既可用于视频、图片和音频播放,在视频播放时,它会渲染视频和字幕;在图片播放时,它会渲染位图;还可以显示作为音频文件元数据包含的海报图片。您可以像任何其他界面组件一样将其添加到布局文件中。例如,PlayerView
可包含在以下 XML 中:
<androidx.media3.ui.PlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:show_buffering="when_playing"
app:show_shuffle_button="true"/>
上面的代码段说明了 PlayerView
提供了多个属性。这些属性可用于自定义视图的行为以及外观和风格。其中大多数属性都有对应的 setter 方法,可用于在运行时自定义视图。PlayerView
文档详细列出了这些属性和 setter 方法。
为了提供更舒适的用户体验,如果您使用的是 ExoPlayer,不妨考虑添加 keepScreenOn
Android 属性或设置唤醒锁定。您可以在后台工作页面中调查会让设备保持唤醒状态的其他操作。
android:keepScreenOn="true"
在布局文件中声明视图后,您可以在 activity 的 onCreate
方法中查找该视图:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView = findViewById(R.id.player_view) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... playerView = findViewById(R.id.player_view); }
播放器初始化后,可以通过调用 setPlayer
将其附加到视图:
Kotlin
// Instantiate the player. val player = ExoPlayer.Builder(context).build() // Attach player to the view. playerView.player = player // Set the media item to be played. player.setMediaItem(mediaItem) // Prepare the player. player.prepare()
Java
// Instantiate the player. player = new ExoPlayer.Builder(context).build(); // Attach player to the view. playerView.setPlayer(player); // Set the media item to be played. player.setMediaItem(mediaItem); // Prepare the player. player.prepare();
PlayerControlView
PlayerControlView
是 PlayerView
子视图之一,包含用于控制播放的进度条和按钮。请注意,PlayerControlView
不适合在 PlayerView
之外作为独立组件使用。您可以通过在 PlayerView
上设置属性(将传递给 PlayerControlView
)或使用 android:id="@id/exo_controller
提供自定义控制器来对其进行自定义。
选择 Surface 类型
借助 PlayerView
的 surface_type
属性,您可以设置用于视频播放的 Surface 类型。允许的值包括 surface_view
、texture_view
、spherical_gl_surface_view
(球形视频播放的特殊值)、video_decoder_gl_surface_view
(适用于使用扩展程序渲染程序渲染视频)和 none
(仅适用于音频播放)。如需详细了解如何选择展示位置类型,请参阅“展示位置”页面。