미디어 소스
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
ExoPlayer에서 모든 미디어는 MediaItem
로 표현됩니다. 하지만
내부적으로 플레이어에는 콘텐츠를 재생하려면 MediaSource
인스턴스가 필요합니다. 이
플레이어는 MediaSource.Factory
를 사용하여 미디어 항목에서 이러한 항목을 만듭니다.
기본적으로 플레이어는 DefaultMediaSourceFactory
를 사용합니다.
다음 콘텐츠 MediaSource
구현의 인스턴스:
DefaultMediaSourceFactory
는 크기에 따라 더 복잡한 미디어 소스를 만들 수도 있습니다.
확인할 수 있습니다. 자세한 내용은
자세한 내용은
미디어 항목 페이지.
앱에서 지원하지 않는 미디어 소스 설정이 필요한 앱의 경우
동영상 플레이어의 기본 설정을 보여 주는 몇 가지 옵션이 있습니다.
맞춤설정할 수 있습니다.
플레이어를 빌드할 때 MediaSource.Factory
를 삽입할 수 있습니다. 예를 들어
앱에서 광고를 삽입하고 CacheDataSource.Factory
를 사용하여 지원하고자 하는 경우
캐싱을 사용하면 DefaultMediaSourceFactory
의 인스턴스가
플레이어 생성 중에 삽입됩니다.
Kotlin
val mediaSourceFactory: MediaSource.Factory =
DefaultMediaSourceFactory(context)
.setDataSourceFactory(cacheDataSourceFactory)
.setLocalAdInsertionComponents(adsLoaderProvider, playerView)
val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()
자바
MediaSource.Factory mediaSourceFactory =
new DefaultMediaSourceFactory(context)
.setDataSourceFactory(cacheDataSourceFactory)
.setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);
ExoPlayer player =
new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();
이
DefaultMediaSourceFactory
JavaDoc
사용 가능한 옵션을 자세히 설명합니다.
맞춤 MediaSource.Factory
구현을 삽입할 수도 있습니다.
맞춤 미디어 소스 유형의 생성을 지원하는 예가 있습니다. 팩토리의
각 인스턴스의 미디어 소스를 만들기 위해 createMediaSource(MediaItem)
가 호출됩니다.
미디어 항목인
재생목록에 추가됨
ExoPlayer
인터페이스는
미디어 소스가 아닌 미디어 소스를
사용해야 합니다 이렇게 하면
플레이어의 내부 MediaSource.Factory
를 호출하고 미디어 소스 인스턴스를
있습니다.
Kotlin
// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources)
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource)
// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))
exoPlayer.prepare()
exoPlayer.play()
자바
// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources);
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource);
// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));
exoPlayer.prepare();
exoPlayer.play();
ExoPlayer는 수정 및 구성할 수 있는 여러 MediaSource
구현을 제공함
다른 MediaSource
인스턴스 이것들은
맞춤설정을 결합해야 하며 더 간단한 설정 경로는
충분합니다
ClippingMediaSource
: 지정된 타임스탬프 범위로 미디어를 클립할 수 있습니다.
유일한 수정인 경우
대신 MediaItem.ClippingConfiguration
를 사용하세요.
FilteringMediaSource
: 사용 가능한 트랙을 지정된 유형으로 필터링합니다.
예를 들어, 동영상과 오디오 파일을 모두 포함하는 파일에서 동영상 트랙을 노출하면
사용할 수 있습니다. 유일한 수정인 경우
트랙 선택 매개변수를 대신 사용합니다.
MergingMediaSource
: 여러 미디어 소스를 병합하여 동시에 재생합니다. 포함
대부분의 경우
adjustPeriodTimeOffsets
및 clipDurations
를 true로 설정하여 모든
소스의 시작과 끝이 동시에 시작됩니다 이 수정을 통해
사이드로드된 자막을 사용하는 경우
대신 MediaItem.SubtitleConfiguration
를 사용하세요.
ConcatenatingMediaSource2
: 여러 미디어 소스를 병합하여 재생합니다.
연속으로 사용할 수 있습니다. 사용자에게 표시되는 미디어 구조는 단일
Timeline.Window
: 단일 항목처럼 보입니다. 만약
여러 항목을 재생하기 위해 수정이 이루어지는데, 이렇게 보이게 해서는 안 되는
playlist API 메서드와 같이 사용하는 것이 바람직합니다.
Player.addMediaItem
를 대신 사용하세요.
SilenceMediaSource
: 지정된 시간 동안 무음을 생성합니다.
격차를 메우는 데 유용합니다.
AdsMediaSource
: 클라이언트 측 광고 삽입으로 미디어 소스 확장
기능을 제공합니다 자세한 내용은 광고 삽입 가이드를 참고하세요.
ServerSideAdInsertionMediaSource
: 서버 측 광고로 미디어 소스를 확장합니다.
삽입 기능을 사용할 수 있습니다. 자세한 내용은 광고 삽입 가이드를 참고하세요.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Media sources\n\nIn ExoPlayer, every piece of media is represented by a `MediaItem`. However\ninternally, the player needs `MediaSource` instances to play the content. The\nplayer creates these from media items using a `MediaSource.Factory`.\n\nBy default the player uses a `DefaultMediaSourceFactory`, which can create\ninstances of the following content `MediaSource` implementations:\n\n- `DashMediaSource` for [DASH](/guide/topics/media/exoplayer/dash).\n- `SsMediaSource` for [SmoothStreaming](/guide/topics/media/exoplayer/smoothstreaming).\n- `HlsMediaSource` for [HLS](/guide/topics/media/exoplayer/hls).\n- `ProgressiveMediaSource` for [regular media files](/guide/topics/media/exoplayer/progressive).\n- `RtspMediaSource` for [RTSP](/guide/topics/media/exoplayer/rtsp).\n\n`DefaultMediaSourceFactory` can also create more complex media sources depending\non the properties of the corresponding media items. This is described in more\ndetail on the\n[Media items page](/guide/topics/media/exoplayer/media-items).\n\nFor apps that need media source setups that are not supported by the\ndefault configuration of the player, there are several options for\ncustomization.\n\nCustomizing media source creation\n---------------------------------\n\nWhen building the player, a `MediaSource.Factory` can be injected. For example,\nif an app wants to insert ads and use a `CacheDataSource.Factory` to support\ncaching, an instance of `DefaultMediaSourceFactory` can be configured to match\nthese requirements and injected during player construction: \n\n### Kotlin\n\n```kotlin\n val mediaSourceFactory: MediaSource.Factory =\n DefaultMediaSourceFactory(context)\n .setDataSourceFactory(cacheDataSourceFactory)\n .setLocalAdInsertionComponents(adsLoaderProvider, playerView)\n val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()\n```\n\n### Java\n\n```java\nMediaSource.Factory mediaSourceFactory =\n new DefaultMediaSourceFactory(context)\n .setDataSourceFactory(cacheDataSourceFactory)\n .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);\nExoPlayer player =\n new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();\n```\n\n\u003cbr /\u003e\n\nThe\n[`DefaultMediaSourceFactory` JavaDoc](/reference/androidx/media3/exoplayer/source/DefaultMediaSourceFactory)\ndescribes the available options in more detail.\n\nIt's also possible to inject a custom `MediaSource.Factory` implementation, for\nexample to support creation of a custom media source type. The factory's\n`createMediaSource(MediaItem)` will be called to create a media source for each\nmedia item that is\n[added to the playlist](/guide/topics/media/exoplayer/playlists).\n\nMedia source based playlist API\n-------------------------------\n\nThe [`ExoPlayer`](/reference/androidx/media3/exoplayer/ExoPlayer) interface defines additional playlist methods that accept\nmedia sources rather than media items. This makes it possible to bypass the\nplayer's internal `MediaSource.Factory` and pass media source instances to the\nplayer directly: \n\n### Kotlin\n\n```kotlin\n// Set a list of media sources as initial playlist.\nexoPlayer.setMediaSources(listOfMediaSources)\n// Add a single media source.\nexoPlayer.addMediaSource(anotherMediaSource)\n\n// Can be combined with the media item API.\nexoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))\n\nexoPlayer.prepare()\nexoPlayer.play()\n```\n\n### Java\n\n```java\n// Set a list of media sources as initial playlist.\nexoPlayer.setMediaSources(listOfMediaSources);\n// Add a single media source.\nexoPlayer.addMediaSource(anotherMediaSource);\n\n// Can be combined with the media item API.\nexoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));\n\nexoPlayer.prepare();\nexoPlayer.play();\n```\n\n\u003cbr /\u003e\n\nAdvanced media source composition\n---------------------------------\n\nExoPlayer provides multiple `MediaSource` implementations to modify and compose\nother `MediaSource` instances. These are most useful in cases where multiple\ncustomizations have to be combined and none of the simpler setup paths are\nsufficient.\n\n- `ClippingMediaSource`: Allows to clip media to a specified timestamp range. If this is the only modification, it's preferable to use [`MediaItem.ClippingConfiguration`](/guide/topics/media/exoplayer/media-items#clipping-media) instead.\n- `FilteringMediaSource`: Filters available tracks to the specified types, for example, just exposing the video track from a file that contains both audio and video. If this is the only modification, it's preferable to use [track selection parameters](/guide/topics/media/exoplayer/track-selection#disabling-track) instead.\n- `MergingMediaSource`: Merges multiple media sources to play in parallel. In almost all cases, it's advisable to call the constructor with `adjustPeriodTimeOffsets` and `clipDurations` set to true to ensure all sources start and end at the same time. If this modification is done to add side-loaded subtitles, it's preferable to use [`MediaItem.SubtitleConfiguration`](/guide/topics/media/exoplayer/media-items#sideloading-subtitle) instead.\n- `ConcatenatingMediaSource2`: Merges multiple media source to play consecutively. The user-visible media structure exposes a single `Timeline.Window`, meaning that it looks like a single item. If this modification is done to play multiple items that are not supposed to look like a single one, it's preferable to use the [playlist API](/guide/topics/media/exoplayer/playlists) methods like `Player.addMediaItem` instead.\n- `SilenceMediaSource`: Generates silence for a specified duration that is useful to fill gaps.\n- `AdsMediaSource`: Extends a media source with client-side ad insertion capabilities. Refer to the [ad insertion guide](/guide/topics/media/exoplayer/ad-insertion) for details.\n- `ServerSideAdInsertionMediaSource`: Extends a media source with server-side ad insertion capabilities. Refer to the [ad insertion guide](/guide/topics/media/exoplayer/ad-insertion) for details."]]