미디어를 재생하는 앱에는 미디어를 표시하기 위한 사용자 인터페이스 구성요소가 필요하며 재생을 제어합니다. Media3 라이브러리에는 여러 가지 UI 구성요소를 제공할 수 있습니다 UI 모듈에 종속하려면 다음을 추가합니다. 종속됩니다.
Kotlin
implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-ui:1.4.1"
가장 중요한 구성요소는 미디어 재생 뷰인 PlayerView
입니다.
PlayerView
는 재생되는 동안 동영상, 이미지, 자막, 앨범 아트를 표시합니다.
확인할 수 있습니다.
PlayerView
에는 연결 및 분리를 위한 setPlayer
메서드가 있습니다(
null
) 플레이어 인스턴스를 전달합니다.
플레이어 뷰
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
Javadoc은 이러한 속성과 setter 메서드를
더 자세히 살펴보겠습니다.
뷰가 레이아웃 파일에서 선언되면
활동의 onCreate
메서드를 호출합니다.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView = findViewById(R.id.player_view) }
자바
@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()
자바
// 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();
표시 경로 유형 선택
PlayerView
의 surface_type
속성을 사용하면 노출 영역 유형을 설정할 수 있습니다.
사용됩니다. spherical_gl_surface_view
(
가 구형 동영상 재생을 위한 특수 값임) 및
video_decoder_gl_surface_view
(확장 프로그램을 사용한 동영상 렌더링용임)
렌더기), 허용되는 값은 surface_view
, texture_view
, none
입니다. 만약
이 뷰는 오디오 재생 전용이므로 none
노출 영역을 만드는 데는 비용이 많이 들 수 있기 때문입니다.
일반 동영상 재생 조회인 경우 surface_view
또는 texture_view
를 사용해야 합니다. TextureView
보다 SurfaceView
은(는) 더 많은 혜택이 제공됩니다
동영상 재생:
- 상당히 저전력 많은 기기에서 소비하고 기기에서 사용할 수 있습니다.
- 프레임 타이밍이 더 정확하여 동영상이 더 원활해집니다.
- 지원 기기에서 고화질 HDR 동영상 출력을 지원합니다.
- DRM으로 보호된 콘텐츠를 재생할 때 보안 출력을 지원합니다.
- 디스플레이의 전체 해상도에서 동영상 콘텐츠를 UI 레이어를 확장하는 Android TV 기기
따라서 가능하면 SurfaceView
가 TextureView
보다 선호되어야 합니다.
TextureView
는 SurfaceView
가 요구사항을 충족하지 않는 경우에만 사용해야 합니다. 1개
매끄러운 애니메이션 또는 동영상 표시 영역의 스크롤이 필요한 경우입니다.
이전 버전에서만 사용할 수 있습니다. 대상
이 경우에는 SDK_INT
이(가) 더 작을 때만 TextureView
를 사용하는 것이 좋습니다.
24 (Android 7.0)보다 높고 그렇지 않으면 SurfaceView
입니다.
Android TV에서 D패드 탐색
Android TV 리모컨에는 D패드 컨트롤이 있어
Activity
의 dispatchKeyEvent(KeyEvent)
에 주요 이벤트로 도착합니다. 이러한
플레이어 뷰에 위임해야 합니다.
Kotlin
override fun dispatchKeyEvent(event: KeyEvent?): Boolean{ return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event) }
자바
@Override public boolean dispatchKeyEvent(KeyEvent event) { return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event); }
재생 탐색 시 플레이어 뷰에 포커스를 요청하는 것이 중요함
관리할 수 있습니다. onCreate
에서 포커스를 요청해 보세요.
Activity
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView.requestFocus() // ... }
자바
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... playerView.requestFocus(); // ... }
Android TV에서 Compose를 사용하는 경우 AndroidView
를 만들어야 합니다.
수정자 매개변수를
다음과 같이 AndroidView
하세요.
AndroidView(
modifier = modifier
.focusable()
.onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
factory = { playerView }
)
드로어블 재정의하기
PlayerView
는 PlayerControlView
를 사용하여 재생을 표시합니다.
컨트롤 및 진행률 표시줄 PlayerControlView
에서 사용하는 드로어블은 다음과 같은 특징이 있습니다.
애플리케이션에 정의된 동일한 이름의 드로어블에 의해 재정의될 수 있습니다. 자세한 내용은
PlayerControlView
Javadoc을 참조하세요.
재정의될 수 있습니다.
추가 맞춤설정
위에서 설명한 것 이상으로 맞춤설정이 필요한 경우 앱이 개발자는 제공된 UI 구성요소를 사용하는 대신 자체 UI 구성요소를 구현합니다. 미디어3의 UI 모듈로 구현됩니다.