'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 – 전체 컨트롤러의 부모 레이아웃

 

 

+ Recent posts