'com.google.android.exoplayer:exoplayer:2.8.4’에서 2.9.1로 업데이트를 하려고 했으나 찾아보니
exoplayer는 더이상 업데이트 되지않고 deprecated됐다.
공식적으로 media3를 권장하고 있다.
Deprecated | Changed | |
SimpleExoPlayer | ExoPlayer | |
Player.EventListener | Player.Listener | |
override fun onTimelineChanged(timeline: Timeline?, manifest: Any?, reason: Int) | override fun onTimelineChanged(timeline: Timeline, reason: Int) | |
override fun onTracksChanged( trackGroups: TrackGroupArray?, trackSelections: TrackSelectionArray?) |
override fun onTracksChanged(tracks: Tracks) | |
override fun onLoadingChanged(isLoading: Boolean) | override fun onIsLoadingChanged(isLoading: Boolean) | |
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) | override fun onPlaybackStateChanged(playbackState: Int) //재생상태 변화 감지 onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) //재생 준비 상태 감지 |
두개로 분리 |
override fun onPlayerError(error: ExoPlaybackException?) | override fun onPlayerError(error: PlaybackException) | |
override fun onPositionDiscontinuity(reason: Int) | override fun onPositionDiscontinuity( oldPosition: Player.PositionInfo, newPosition: Player.PositionInfo, reason: Int) |
|
override fun onSeekProcessed() | onSeekStarted onSeekCompleted |
onSeekProcessed에서 onSeekStarted onSeekCompleted 두 상태로 변경 |
DefaultBandwidthMeter | DefaultBandwidthMeter.Builder(exoPlayerView.context).build() 또는 BandwidthMeter |
TrackSelector에서 자동으로 측정하는 방식으로 변경되어 설정할 필요 없음 |
val videoTrackSelectionFactory = AdaptiveTrackSelection.Factory(bandwidthMeter) val trackSelector = DefaultTrackSelector(videoTrackSelectionFactory) |
val trackSelector = DefaultTrackSelector(exoPlayerView.context) | AdaptiveTrackSelection 제거 DefaultTrackSelector로 통합 |
ExoPlayerFactory.newSimpleInstance(exoPlayerView.context, trackSelector) | ExoPlayer.Builder(context).setTrackSelector(trackSelector).build() | newSimpleInstance 제거 |
val bandwidthMeter = DefaultBandwidthMeter() defaultDatasourceFactory = DefaultDataSourceFactory (context, bandwidthMeter, DefaultHttpDataSourceFactory(userAgent, bandwidthMeter)) |
val defaultHttpDataSourceFactory = DefaultHttpDataSource.Factory().setUserAgent(userAgent)defaultDatasourceFactory = DefaultDataSource.Factory(context, defaultHttpDataSourceFactory) | DefaultDataSourceFactory → DefaultHttpDataSource + DefaultDataSource.Factory |
prepare(mediaSource) | setMediaSource(mediaSource) | |
SimpleExoPlayer.VideoListener | ExoPlayer.Listener | |
addVideoListener | addListener | |
override fun onVideoSizeChanged( width: Int, height: Int, unappliedRotationDegrees: Int, pixelWidthHeightRatio: Float) |
override fun onVideoSizeChanged(videoSize: VideoSize) | videoSize.width videoSize.height 등으로 사용 변경 |
ExtractorMediaSource.Factory(DefaultHttpDataSourceFactory(userAgent)) .createMediaSource(uri) | ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(uri)) |
|
setControllerVisibilityListener { visibility -> | exoPlayerView.setControllerVisibilityListener(object : PlayerView.ControllerVisibilityListener { override fun onVisibilityChanged(visibility: Int) | override fun onVisibilityChanged 추가 |
//변경 예시
private MediaSource buildMediaSource(Uri uri) {
String userAgent = Util.getUserAgent(context, "userAgent");
DefaultHttpDataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory().setUserAgent(userAgent);
// Uri를 MediaItem으로 변환
MediaItem mediaItem = new MediaItem.Builder().setUri(uri).build();
if (uri.getLastPathSegment().contains("mp3") || uri.getLastPathSegment().contains("mp4")) {
return new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem);
} else if (uri.getLastPathSegment().contains("m3u8")) {
return new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem);
} else {
return new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem);
}
}
Exo Controller 내부 Id
- exo_play – 플레이 버튼 (재생 버튼)
- exo_pause – 일시 정지 버튼
- exo_progress – 미디어 재생 진행 상태를 나타내는 SeekBar
- exo_current_time – 현재 재생 시간을 표시하는 텍스트 뷰
- exo_duration – 전체 재생 시간을 표시하는 텍스트 뷰
- exo_rew – 10초 뒤로 가기 버튼
- exo_ff – 10초 앞으로 가기 버튼
- exo_fullscreen – 전체 화면 버튼 (있는 경우)
- exo_back – 뒤로가기 버튼 (있는 경우)
- exo_caption – 자막 버튼 (있는 경우)
- exo_audio_track – 오디오 트랙 선택 버튼 (있는 경우)
- exo_vr – VR 모드 버튼 (있는 경우)
- exo_buffering – 버퍼링 상태를 나타내는 뷰 (로딩 애니메이션)
- exo_skip_ad – 광고 건너뛰기 버튼 (있는 경우)
- exo_error – 에러 표시 뷰 (있는 경우)
- exo_controls – 전체 컨트롤러 영역
- exo_controller – 전체 컨트롤러의 부모 레이아웃
'Android개발 > Kotlin' 카테고리의 다른 글
[Android][Kotlin][유효성 검사] 정규 표현식 (0) | 2025.05.28 |
---|---|
[Android]화면 절전모드 On,Off (0) | 2025.05.19 |
[Android][Kotlin]이메일 유효성 검사 (0) | 2025.05.19 |
[Android][Kotlin]Bitmap (0) | 2025.04.30 |
[Android][Kotlin]Array와 ArrayList 차이 (0) | 2025.04.30 |