Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- mutable
- 데이터바인딩
- 안드로이드 스튜디오 애뮬레이터
- 라이브데이터 postValue
- compse collectAsState
- json 저장
- compse state
- apk이름변경
- 코틀린 이미지저장 #파일저장
- withContext
- livedata
- Room 데이터베이스 업데이트
- 코틀린 트리거 버튼
- TwomonUSB
- TowmonUSB 연결오류
- 토글 험수
Archives
- Today
- Total
EnjoyLife
MediaBrowserService 와 MediaSessionCompat 을 이용해서 exoplayer 만들기 본문
안드로이드 개발/개발팁
MediaBrowserService 와 MediaSessionCompat 을 이용해서 exoplayer 만들기
Aiden96 2023. 10. 26. 00:09class MyActivity : AppCompatActivity() {
private lateinit var mediaBrowserService: MyMediaBrowserService
private lateinit var mediaSession: MediaSessionCompat
private lateinit var player: ExoPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
// MediaBrowserService를 만듭니다.
mediaBrowserService = MyMediaBrowserService()
startService(Intent(this, MyMediaBrowserService::class.java))
// 미디어 세션을 만듭니다.
mediaSession = MediaSessionCompat(this, "MyMediaSession")
// 미디어 세션의 이벤트를 처리합니다.
mediaSession.setCallback(object : MediaSessionCompat.Callback() {
override fun onPlay() {
// 재생을 시작합니다.
player.play()
}
override fun onPause() {
// 재생을 일시 중지합니다.
player.pause()
}
override fun onStop() {
// 재생을 중지합니다.
player.stop()
}
override fun onSeekTo(pos: Long) {
// 재생 위치를 변경합니다.
player.seekTo(pos)
}
override fun onSkipToNext() {
// 다음 미디어 항목으로 건너뜁니다.
player.next()
}
override fun onSkipToPrevious() {
// 이전 미디어 항목으로 건너뜁니다.
player.previous()
}
})
// 미디어 세션을 ExoPlayer에 연결합니다.
mediaSession.setActive(true)
player.setMediaSession(mediaSession)
// 미디어를 준비합니다.
val mediaSource = ProgressiveMediaSource.Factory(DefaultDataSourceFactory(this))
.createMediaSource(Uri.parse("https://주소 /app/bunny.mp4"))
player.prepare(mediaSource)
// 재생을 시작합니다.
player.play()
}
}
class MyMediaBrowserService : MediaBrowserServiceCompat() {
override fun onGetRoot(
clientPackageName: String,
clientUid: Int,
rootHints: Bundle?
): BrowserRoot? {
// 루트 노드를 반환합니다.
return BrowserRoot(MediaIDHelper.ROOT_ID, null)
}
override fun onLoadChildren(
parentId: String,
result: Result<List<MediaBrowserCompat.MediaItem>>
) {
// 하위 노드를 반환합니다.
val mediaItems = mutableListOf<MediaBrowserCompat.MediaItem>()
// 미디어 항목을 추가합니다.
mediaItems.add(
MediaBrowserCompat.MediaItem(
MediaMetadataCompat.Builder()
.setMediaId("bunny")
.setTitle("토끼")
.setDescription("토끼 동영상")
.setMediaUri(Uri.parse("https://주소../app/bunny.mp4"))
.build(),
MediaBrowserCompat.MediaItem.FLAG_PLAYABLE
)
)
result.sendResult(mediaItems)
}
}
'안드로이드 개발 > 개발팁' 카테고리의 다른 글
함수의 마지막 인자로 람다를 쓰는 이유 (0) | 2023.11.01 |
---|---|
안드로이드스튜디오 애뮬레이터 죽어도 실행안될때 (2) | 2023.10.30 |
루팅단말기일 경우 실행 차단 (0) | 2023.10.30 |
remember 와 rememberSaveable 의 차이 (0) | 2023.10.25 |
companion object 싱글턴과 커스텀 싱글턴의 차이 (0) | 2023.10.24 |