소개
PlaynPlay는 미디어 서비스에 필요한 동영상 플레이어 부터 콘텐츠 보안, 통계, 분석 등 각종 기능들을 제공하는 토탈 미디어 솔루션입니다.
PlaynPlay App
-
PlaynPlay 앱은 스트리밍 재생, 배속, 구간 반복, 워터마크 등의 다양한 동영상 플레이어 기능, 화면 녹화 차단 및 방지 기능, DRM 콘텐츠를 다운로드 및 관리할 수 있는 기능들을 제공합니다.
-
지원 OS : Windows 7 이상, macOS 11 이상
-
별도 설치 파일로 제공됩니다.
PlaynPlay Console
- PlaynPlay 콘솔 사이트는 PlaynPlay 앱과 연동하여, 사용자 및 세션 통계, 녹화 차단 관리, 디바이스 관리, 재생 통계, 보안 및 워터마크 관리 등 미디어 서비스에 필요한 다양한 기능들을 제공합니다.
PlaynPlay DRM packaging tool
- 미디어 콘텐츠 파일을 DRM 패키징하는 기능을 제공합니다.
PlaynPlay auth server
- 미디어 파일 재생을 위한 라이선스 키를 발급하며, 세션을 관리합니다.
설정
다음과 같은 순서로 설정하시면 됩니다.
1. PlaynPlay Console 세팅
-
발급 받은 계정으로 콘솔 사이트에 로그인합니다.
-
서비스할 App을 생성합니다.
-
App Key, App ID를 저장합니다. 이 값들은 미디어 재생을 위한 라이선스 키 발급 요청 시 사용됩니다.
2. PlaynPlay DRM 패키징
-
콘솔 사이트에서 DRM 패키징 툴을 다운로드합니다.
-
서비스할 미디어 파일들을 DRM 패키징하여 준비합니다. (Non DRM도 서비스 가능)
-
자세한 사용 방법은 여기를 참고하세요.
-
다운로드
3. 미디어 업로드
- 발급 받은 계정으로 DRM 패키징한 파일을 미디어 서버(콘솔 사이트를 이용)에 업로드합니다.
Agent 설정
var PLAYNPLAY_CONFIG = {
"minVersion": "latest" | "1.x.x"
};
속성 | 타입 | 설명 | 참고 |
---|---|---|---|
minVersion | string | null | PlaynPlay 앱의 최소 버전 | 최소 버전 이상의 버전은 업데이트 알림을 하지 않습니다. |
참고: 스크립트 추가시 'agent.js'보다 먼저 추가해야합니다.
<script type="text/javascript" src="https://설정 값을 저장한 파일 경로/playnplay_config.js">
<script type="text/javascript" src="https://app.playnplay.com/modules/agent.js">
Agent 실행
플레이어를 실행시켜 DRM 패키징 된 미디어 파일을 재생 및 다운로드 할 수 있습니다.
플레이어 실행 절차는 Windows, macOS, iOS, Android 동일합니다.
playnplay: launch()
playnplay.launch = async (type, mediaItemOrUrl, options)
파라미터 | 타입 | 설명 |
---|---|---|
type | LaunchType | 실행 타입 |
mediaItemOrUrl | MediaItem | URL | string | 재생 / 다운로드 항목 정보 |
options | Options | null | 플레이어 높이, 너비 등 옵션 |
미디어 아이템이나 미디어 주소를 사용하여 플레이어를 실행시킬 수 있습니다. 이때 사용 목적에 따라 타입을 설정할 수 있습니다.
playnplay: download()
playnplay.download = async (mediaItems)
파라미터 | 타입 | 설명 |
---|---|---|
mediaItems | [MediaItem]|MediaItem | 다운로드 항목 |
playnplay: getDeviceInfo()
playnplay.getDeviceInfo = async ()
출력: DeviceInfo
브라우저가 실행되고 있는 장치의 정보를 얻어옵니다.
playnplay: LaunchType
playnplay.LaunchType = {
Streaming: 'streaming',
Downloading: 'downloading',
OpeningPage: 'opening-page'
};
값 | 설명 |
---|---|
Streaming | 동영상 재생 |
Downloading | 동영상 다운로드 |
OpeningPage | 커스텀 페이지 열기 |
playnplay.launch()를 호출할 때, playnplay.LaunchType.Streaming, playnplay.LaunchType.Downloading 과 같이 타입으로 사용합니다. 사용 예제를 참고하세요.
MediaItem
{
"url": string | URL,
"seekable": boolean | null,
"returnUrl": string | URL | null,
"startTime": number | StartTime | null,
"drm": DRM | null,
"subtitles": [Subtitle] | null,
"metadata": Metadata | null,
"clipping": Clipping | null,
"useBookmarkCallback": boolean | null
}
이름 | 타입 | 설명 | ||||||
---|---|---|---|---|---|---|---|---|
url | string | URL | 미디어 URL | ||||||
drm | DRM | null | DRM 설정 (옵션) | ||||||
subtitles | [Subtitle] | null | 자막 설정 (옵션) | ||||||
metadata | Metadata | null | 메타데이터 설정 (옵션) | ||||||
clipping | Clipping | null | 미디어 클리핑 설정 (옵션) | ||||||
returnUrl | string | URL | null | 리턴 URL (옵션) | ||||||
seekable | boolean | null | 탐색(Seek) 기능을 허용 여부 (옵션, 기본값: true) | ||||||
disablePlaybackRate | boolean | null | 배속 기능을 허용 여부 (옵션, 기본값: false) | ||||||
startTime | number | StartTime | null | 재생 시작 시간 설정 (옵션) | ||||||
useBookmarkCallback | boolean | null | 북마크 콜백 URL 사용 (옵션, 기본값: false)
|
DRM
{
"appId": string,
"userId": string,
"userData": object | null,
"offlineAccessPeriod": number | null
}
이름 | 타입 | 설명 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
appId | string | App 아이디 | ||||||||
userId | string | 사용자 아이디 | ||||||||
userData | object | null | 고객사의 필요에 따라 Callback URL에 전달할 데이터 (옵션) | ||||||||
offlineAccessPeriod | number | null | 다운로드 컨텐츠의 오프라인 재생 기한 설정 (옵션, 단위: 초)
|
미디어 아이템을 구성할 때, 위와 같은 구성 요소를 포함하는 DRM 설정을 추가할 수 있습니다.
Subtitle
{
"url": string | URL,
"language": string | null,
"label": string | null,
"mode": "autoSelect" | "show" | "hidden" | null
}
이름 | 타입 | 설명 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
url | string | URL | 자막 URL | ||||||||
language | string | null | 자막 언어 (옵션) | ||||||||
label | string | null | 자막 타이틀 (옵션) | ||||||||
mode | string | null | 자막 선택 모드 (옵션, 기본값: "autoSelect")
|
미디어 아이템을 구성할 때, 위와 같은 요소를 포함하는 자막을 추가할 수 있습니다.
StartTime
{
"value": number,
"syncedAt": Date | null
}
이름 | 타입 | 설명 |
---|---|---|
value | number | 시작 시간 값 (초) |
syncedAt | Date | null | 시작 시간이 업데이트된 시간 (옵션) 설정한 시작 시간과 오프라인에 저장된 최근 저장된 재생 시간 중 가장 최근의 값을 선택하기 위한 목적 |
Metadata
{
"title": string | null,
"artworkUrl": string | URL | null,
"downloadPath": string | null
}
이름 | 타입 | 설명 |
---|---|---|
title | string | null | 모바일 플레이어 타임바에 표시되는 타이틀 |
artworkUrl | string | URL | null | artwork URL (옵션) |
downloadPath | string | null | 다운로드 파일의 경로 표시 값 타입이 LaunchType.DOWNLOAD의 경우 설정 |
미디어 아이템을 구성할 때, 메타데이터를 추가할 수 있습니다.
Clipping
{
"startTime": number,
"endTime": number | null
}
Bookmark
{
"pos": number,
"title": string | null
}
이름 | 타입 | 설명 |
---|---|---|
pos | number | 북마크 시간 (초) (필수) |
title | string | null | 북마크 제목 (옵션: 지정하지 않으면 'Untitled') |
미디어 항목을 사용자 지정 시작 및 끝 위치로 잘라냅니다. 미디어 아이템을 구성할 때, 클리핑을 추가할 수 있습니다.
Options
{
"height": number | null,
"width": number | null
}
이름 | 타입 | 설명 |
---|---|---|
height | number | null | 플레이어의 높이 |
width | number | null |
미디어 플레이어의 크기를 설정할 수 있습니다. 사용 예제를 참고하세요.
DeviceInfo
{
"platform": string,
"platformVersion": string | null,
"architecture": string | null,
"model": string | null
}
사용 예제: 동영상 재생
<script type="text/javascript" src="https://app.playnplay.com/modules/agent.js">
<script type="text/javascript">
const mediaItem = {
url: "https://sample.playnplay.com/video/sintel-1280-surround.mp4",
drm: {
appId: "1ed493af-5988-65b5-a4ca-6d1c45be663c",
userId: "test-user",
userData: {
}
},
metadata: {
title: "제목입니다."
}
};
playnplay.launch(playnplay.LaunchType.Streaming, mediaItem, { width: 900, height: 600 });
</script>
PlaynPlay SDK for Desktop 연동 가이드
업데이트 날짜 | 2024.4.12. |
- Overview
본 문서는 데스크톱용 PlaynPlay SDK 연동을 위한 가이드 문서입니다.
사용 방법
커스텀 페이지
playnplay: startService()
playnplay.startService= async (appId, scriptURL, options);
이름 | 타입 | 설명 |
---|---|---|
appId | string | App ID |
scriptURL | URL | string | 서비스 스크립트 경로 |
options | Options | 서비스 스크립트 경로 |
PlaynPlay 보안 서비스를 실행합니다. 개발툴을 사용하려면 반드시 호출해야합니다.
커스텀 페이지와 같은 경로에 'playnplay-service.js'를 생성하고 다음 코드를 추가합니다. (이미 다른 서비스워커를 사용 중이라면 해당 서비스워커에 추가합니다.)
self.importScripts('https://app.playnplay.com/modules/playnplay-service.js');
scriptURL이 커스텀 페이지와 다른 경로에 있을 경우 scope를 지정해야합니다. 자세한 내용을 다음 링크를 참조하세요.
Options
{
"scope": string | null
}
이름 | 타입 | 설명 |
---|---|---|
scope | string | null | 서비스 등록 스코프 |
window: openDevTools()
개발툴을 엽니다.
개발 시 디버깅 용도로만 사용하고 프로덕션 환경에 사용하지 않을 것을 권합니다.
HTMLMediaElement: open()
이름 | 타입 | 설명 |
---|---|---|
mediaItem | MediaItem | URL | string | 재생 항목 |
미디어를 엽니다.
예시
<script>
const appId = 'xxx-xxx-xxx';
playnplay.startService(appId, './playnplay-service.js');
window.addEventListener('keydown', (event) => {
if (event.key === 'F10' && event.ctrlKey) {
window.openDevTools();
}
});
document.addEventListener('DOMContentLoaded', () => {
const video = document.querySelector('#player-container video');
const mediaItem = {
url: "https://yourcdn.com/video/1.mp4"
};
video.open(mediaItem);
});
</script>
<body>
<div id="player-container">
<video controls playsinline autoplay preload="auto" crossorigin="anonymous"></video>
</div>
<script src="https://app.playnplay.com/modules/nplayer/nplayer.js"></script>
<script>
const player = new NPlayer('#player-container video');
</script>
</body>
샘플
디버깅
에이전트 안에서 실행되는 커스텀 페이지의 콘솔 로그를 출력하는 디버깅 툴
다운로드
PlaynPlay SDK for Android 연동 가이드
최근 수정일 | 2025.01.23. |
안드로이드 SDK 다운로드
안드로이드 SDK 샘플 다운로드
SDK 변경 이력은 여기에서 확인 가능합니다.
설정 방법
안드로이드 스튜디오 기준의 설정 방법입니다.
시작하기
이 문서는 안드로이드용 PlaynPlay SDK(이하 안드로이드 SDK) 사용 방법을 안내합니다.
안드로이드 SDK는 API 수준 23(안드로이드 6.0/Marshmallow) 이상을 지원합니다.
안드로이드 SDK는 안드로이드의 Jetpack Media3 라이브러리를 기반으로 제작되었습니다. 따라서 안드로이드 SDK를 통해서 Jetpack Media3에서 제공하는 기능을 그대로 이용할 수 있습니다. 그러나 이 문서는 주로 안드로이드 SDK 설치, 사용 및 활용 방법에 대해 다루고 있기 때문에, Jetpack Media3 라이브러리가 제공하는 기능에 대한 상세 정보는 해당 라이브러리의 공식 문서를 참고하시기 바랍니다.
프로젝트 생성
빈 프로젝트 생성
File > New > New Project 를 선택하여, 빈 프로젝트를 생성합니다.
액티비티 선택
템플릿을 참고하여 사용하고자 하는 액티비티를 선택합니다.
프로젝트 설정 및 생성
Name, Package name, Save location, Minimum SDK 및 Build configuration language를 설정하고, Finish 버튼을 눌러 프로젝트를 생성합니다.
프로젝트 설정
build.gradle.kts 수정
안드로이드 SDK 다운로드
안드로이드 SDK 추가
안드로이드 SDK가 포함된 디렉토리는 프로젝트 내 어디든 상관없습니다.
dependencies {
implementation(files("libs/NPlayerSDK-release.aar"))
}
외부 라이브러리 의존성 추가
라이브러리 프로젝트 의존성은 안드로이드 SDK가 업데이트 됨에 따라 변동될 수 있습니다. 업데이트가 될 경우 해당 문서를 통해서 알려드리겠습니다.
dependencies {
implementation("androidx.media3:media3-ui:1.6.0")
implementation("androidx.media3:media3-session:1.6.0")
implementation("androidx.media3:media3-exoplayer-smoothstreaming:1.6.0")
implementation("androidx.fragment:fragment-ktx:1.8.6")
implementation("androidx.navigation:navigation-fragment-ktx:2.8.9")
implementation("androidx.navigation:navigation-compose:2.8.9")
implementation("androidx.room:room-runtime:2.6.1")
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("net.java.dev.jna:jna:5.17.0@aar")
implementation("com.google.android.material:material:1.12.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
}
자바 버전
안드로이드 SDK에서 사용하는 자바 관련 버전은 아래와 같습니다.
android {
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
AndroidManifest.xml 수정
퍼미션 추가
<manifest xmlns:android="....." >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
</manifest>
이름 | 설명 |
---|---|
android.permission. INTERNET | 네트워크에서 데이터 통신을 가능하게 설정 |
android.permission. READ_MEDIA_VIDEO | 외부 저장소에서 비디오 파일을 열기 위한 설정 타겟 API 수준 33 이상에서 설정 타겟 API 수준 32 이하는 android.permission.READ_EXTERNAL_STORAGE를 사용 |
android.permission. FOREGROUND_SERVICE | 서비스를 포그라운드에서 사용하기 위해서 설정 타겟 API 수준 28 이상에서 설정 |
android.permission. FOREGROUND_SERVICE_MEDIA_PLAYBACK | 백그라운드에서 동영상을 계속 재생하기 위한 설정 타겟 API 수준 34 이상에서 설정 - 적절한 포그라운드 서비스 유형을 지정해야 합니다. |
다운로드를 위한 브로드캐스트 수신기 선언
<receiver
android:name="com.newin.nplayer.sdk.DownloadCompleteReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
</intent-filter>
</receiver>
이름 | 설명 |
---|---|
android.intent.action. DOWNLOAD_COMPLETE | 다운로드가 완료될 때 다운로드 매니저가 보내는 브로드캐스트 인텐트 액션 |
미디어 및 플레이어 관련 설정 추가
<application>
<activity
android:name="com.newin.nplayer.sdk.MediaPlayerActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|keyboardHidden"
android:exported="false"
android:launchMode="singleTask"
android:supportsPictureInPicture="true"
android:theme="@style/Theme.AppCompat"/>
<service
android:name="com.newin.nplayer.sdk.MediaPlaybackService"
android:exported="false"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService" />
</intent-filter>
</service>
</application>
사용 방법
패키지 이름 추가
콘솔에 로그인하고 설정 > 애플리케이션으로 이동합니다.
아래 Bundle ID (Package name) 섹션에서 추가 버튼을 클릭합니다.
패키지 이름을 추가합니다.
패키지 이름은 build.gradle.kts 파일 내의 applicationId에서 찾을 수 있습니다.
android {
defaultConfig {
applicationId = "com.nplayersdk.sample" // 패키지 이름
}
}
액티비티 구성
먼저 startMediaPlayerService를 호출하여 서비스를 시작합니다. 여기서 플레이어와 미디어세션을 만들고 DRM 기본 설정을 합니다.
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.media3.common.MediaItem
import com.newin.nplayer.sdk.extensions.presentMediaPlayer
import com.newin.nplayer.sdk.extensions.startMediaPlayerService
import com.newin.nplayer.sdk.withDrmConfiguration
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startMediaPlayerService("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx") // App 아이디
}
}
App 아이디는 콘솔에서 설정 > 애플리케이션 > App ID > 보기를 클릭하여 확인 가능합니다. 복사하여 붙여넣기를 하실 수 있습니다.
미디어 아이템 구성 예제
아래처럼, 미디어 아이템을 구성하고 열 수 있습니다.
import androidx.media3.common.MediaItem
import com.newin.nplayer.sdk.MediaPlayerActivityConfiguration
import com.newin.nplayer.sdk.extensions.presentMediaPlayer
import com.newin.nplayer.sdk.extensions.withDrmConfiguration
Button(
onClick = {
// uri를 입력 받아서 아이템을 만듭니다. 이때, 반드시 DRM 설정을 합니다.
val mediaItem = MediaItem.fromUri("https://example.com/media.mp4")
.withDrmConfiguration(
appId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx", // App 아이디
userId = "사용자 아이디"
)
// 백그라운드 재생을 허용하게 설정합니다.
val configuration = MediaPlayerActivityConfiguration.defaultConfiguration
configuration.allowsBackgroundPlayback = true
// 미디어를 엽니다.
presentMediaPlayer(mediaItem, configuration)
}
) {
Text("Open player")
}
startMediaPlayerService
플레이어와 미디어세션을 만들고 DRM 기본 설정을 합니다.
MediaItem.fromUri
미디어 주소를 파라미터로 입력하여 미디어 아이템을 구성합니다. 파라미터로 받을 수 있는 타입은 아래와 같습니다.
타입 | 설명 |
---|---|
String | 스트링 형태의 미디어 주소 |
Uri | android.net.Uri 참고 |
withDrmConfiguration
uri를 입력받아서 미디어 아이템을 만들 때, 반드시 DRM 설정을 합니다. 제공받은 App 아이디와 사용자 아이디(User ID)를 입력하면 됩니다.
presentMediaPlayer
구성을 마친 미디어 아이템을 화면에 재생합니다.
자막을 추가한 예제
Media3에서 제공하는 setSubtitleConfigurations() 사용하여 자막을 추가할 수 있습니다.
val mediaItem = MediaItem.Builder()
.setUri("https://example.com/video.mp4")
.setSubtitleConfigurations(
listOf(
MediaItem.SubtitleConfiguration.Builder(
Uri.parse("https://example.com/subtitle.vtt")
)
.setMimeType(MimeTypes.TEXT_VTT)
.setLanguage("en")
.setSelectionFlags(C.SELECTION_FLAG_DEFAULT)
.build()
)
)
.build()
Seek 기능을 제한한 예제
미디어 아이템을 구성할 때, setSeekable(false)을 사용하여 Seek 기능을 제한할 수 있습니다.
val mediaItem = MediaItem.Builder()
.setUri("https://www.example.com/video.mp4")
.setSeekable(false)
.build()
MediaPlayer
fun MediaPlayer(context: Context): MediaPlayer
안드로이드 SDK에서 제공하는 MediaPlayer가 아니라, Jetpack Media3에서 제공하는 ExoPlayer를 사용하려면 아래와 같이 사용하면 됩니다. ExoPlayer는 Player를 확장한 클래스로 Jetpack Media3에서 제공합니다.
사용 예제
val mediaPlayer = MediaPlayer(context)
mediaPlayer.load(mediaItem)
커스터마이징하여 만든 플레이어를 바로 등록하여 미디어 플레이어를 사용할 수도 있습니다.
fun MediaPlayer(innerPlayer: Player): MediaPlayer
사용 예제
val mediaPlayer = MediaPlayer(player)
mediaPlayer.load(mediaItem)
주의: 현재 안드로이드 SDK는 MediaPlayer()으로 직접 미디어 플레이어를 구성할 경우, DRM 관련 기능을 지원하지 않습니다. DRM 영상을 사용하려면, presentMediaPlayer()를 하여 플레이어를 구성한 후, getMediaPlayer()를 사용해 주세요.
인터페이스
DownloadManager.Listener
import com.newin.nplayer.sdk.DownloadManager.Listener
DownloadManager.Listener는 다운로드와 관련된 이벤트 처리를 위한 인터페이스로, 위와 같은 메서드를 제공합니다. 각각 메서드에 대한 설명은 아래 메서드를, 리스너를 추가 하는 방법은 addListener를 참고하시면 됩니다.
메서드
onItemAdded
fun onItemAdded(item: DownloadItem)
파라미터 | 타입 | 설명 |
---|---|---|
item | DownloadItem | 목록에 추가된 다운로드 아이템 |
다운로드할 아이템이 목록에 추가될 때 처리를 위한 메서드입니다. 아이템을 추가할 때 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.
onItemRemoved
fun onItemRemoved(item: DownloadItem)
파라미터 | 타입 | 설명 |
---|---|---|
item | DownloadItem | 목록에서 제거된 다운로드 아이템 |
다운로드 목록에서 아이템을 제거할 때 처리를 위한 메서드입니다. 아이템이 제거될 때 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.
onProgressUpdated
fun onProgressUpdated(item: DownloadItem)
파라미터 | 타입 | 설명 |
---|---|---|
item | DownloadItem | 다운로드가 진행 중인 다운로드 아이템 |
다운로드가 진행되는 매순간을 처리하기 위한 메서드입니다. 아이템 다운로드가 진행됨에 따라 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.
onStatusChanged
fun onStatusChanged(item: DownloadItem)
파라미터 | 타입 | 설명 |
---|---|---|
item | DownloadItem | 다운로드 상태가 바뀐 다운로드 아이템 |
다운로드 아이템의 상태가 변경될 때 처리를 위한 메서드입니다. 즉, 다운로드를 완료하였거나, 실패하였을 때 등의 상황에 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.
MediaPlayer
import com.newin.nplayer.sdk.MediaPlayer
interface MediaPlayer : Player
미디어 플레이어 인터페이스입니다. 활성화된 미디어 플레이어에 접근하는 방법은 getMediaPlayer()를 참고하세요.
정적 속성
ACTION_PLAYBACK_FINISHED
companion object {
const val ACTION_PLAYBACK_FINISHED
}
미디어 재생이 끝났을 때 브로드캐스터 수신기에서 사용하기 위한 정적 속성입니다. 브로드캐스터 수신기를 아래처럼 등록하고 해제하시면 됩니다.
private val playbackFinishedReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent) {
// 미디어 재생 종료 시 처리할 내용
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ContextCompat.registerReceiver(
this,
playbackFinishedReceiver,
IntentFilter(MediaPlayer.ACTION_PLAYBACK_FINISHED),
ContextCompat.RECEIVER_EXPORTED,
)
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(playbackFinishedReceiver)
}
onReceive
의 intent
에서 제공하는 정보는 다음과 같습니다.
이름 | 타입 | 내용 |
---|---|---|
"uri" | string | 미디어의 uri |
"currentTime" | long | 미디어 재생 위치 |
"duration" | long | 미디어 전체 길이 |
"reason" | string | 미디어 종료 이유 |
속성
allowsPictureInPicturePlayback
var allowsPictureInPicturePlayback: Boolean
allowsCellularAccess
var allowsCellularAccess: Boolean
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 동영상 재생 시, 셀룰러 데이터 사용 여부 | 가능 | true |
동영상을 재생(스트리밍)할 때, 셀룰러 데이터를 사용할 지 여부를 나타내는 속성입니다.
audioTracks
val audioTracks: List<Track>
타입 | 설명 | 설정 |
---|---|---|
List<Track> | 오디오 트랙 목록 | 불가능 |
현재 재생 중인 미디어의 오디오 트랙을 가져오는 속성입니다.
autoplay
var autoplay: Boolean
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 미디어가 로드되었을 때, 즉 미디어가 준비가 된 즉시 재생할 것인지 결정하는 값 | 가능 | true |
미디어가 중단되지 않고 충분한 양의 미디어 사용이 가능할 때 즉시 재생이 시작되어야 하는지를 나타내는 속성입니다. true면 자동 재생합니다.
buffered
val buffered: TimeRanges
타입 | 설명 | 설정 |
---|---|---|
com.newin.nplayer. sdk.utils.TimeRanges | 현재 버퍼에 담고 있는 미디어 리소스의 구간 데이터 | 불가능 |
버퍼에 있는 미디어 리소스의 구간을 반환합니다.
currentMediaItem
val currentMediaItem: MediaItem
타입 | 설명 | 설정 |
---|---|---|
MediaItem | 현재 재생 중인 미디어 아이템 | 불가능 |
현재 재생 중인 미디어 아이템을 의미하는 속성입니다.
currentMediaItemIndex
val currentMediaItemIndex: Int
타입 | 설명 | 설정 |
---|---|---|
Int | 현재 재생 중인 미디어 아이템의 index | 불가능 |
현재 재생 중인 미디어 아이템의 index를 의미하는 속성입니다.
currentSrc
val currentSrc: Uri?
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
android.net.Uri? | 설정 시, 교체할 미디어 아이템의 Uri 반환 시, 현재 선택된 미디어 아이템의 Uri | 가능 | null |
미디어 리소스의 uri를 의미하는 속성입니다.
currentTime
var currentTime: Duration
타입 | 설명 | 설정 |
---|---|---|
java.time.Duration | 설정 시, 재생하고 싶은 특정 위치 반환 시, 현재 재생 시점 | 가능 |
현재 재생 위치를 Duration 단위로 지정합니다.
currentWatermarkSettings
val currentWatermarkSettings: WatermarkSettings?
타입 | 설명 | 설정 |
---|---|---|
WatermarkSettings | 오디오 트랙 목록 | 불가능 |
현재 워터마크 설정 상태를 반환하는 속성입니다.
defaultMuted
var defaultMuted: Boolean
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 음소거 기본 설정 상태 | 가능 | false |
오디오의 음소거 기본 설정을 나타내는 속성입니다.
defaultPlaybackRate
var defaultPlaybackRate: Float
타입 | 설명 | 설정 | 범위 | 기본값 |
---|---|---|---|---|
Float | 미디어의 기본 재생 속도 | 가능 | 0.1~4.0 | 1.0 |
미디어의 기본 재생 속도를 나타내는 속성입니다.
deviceVolume
var deviceVolume: Float
타입 | 설명 | 범위 | 설정 |
---|---|---|---|
Float | 현재 미디어의 음량 | 0.0~1.0 | 가능 |
현재 미디어 플레이어의 음량을 나타내는 속성입니다.
duration
val duration: Duration
타입 | 설명 | 설정 |
---|---|---|
java.time.Duration | 현재 미디어의 전체 길이 | 불가능 |
현재 미디어 길이를 나타냅니다.
ended
val ended: Boolean
타입 | 설명 | 설정 |
---|---|---|
Boolean | 미디어 재생 완료 여부를 반환 | 불가능 |
미디어 재생 완료 여부를 나타내는 속성입니다.
error
val error: PlaybackException?
타입 | 설명 | 설정 |
---|---|---|
PlaybackException? | 최근에, 즉, 마지막으로 발생한 에러. 발생한 에러가 없을 경우 null을 반환 | 불가능 |
최근 발생한 에러를 나타내는 속성입니다.
isCaptureAllowed
val isCaptureAllowed: Boolean
isSeekable
val isSeekable: Boolean
타입 | 설명 | 설정 |
---|---|---|
Boolean | Seek 기능 사용 가능 여부 | 불가능 |
현재 플레이어에서 Seek 기능을 사용할 수 있는지 여부를 반환하는 속성입니다.
isScrubbing
val isScrubbing: Boolean
loop
var loop: Boolean
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 미디어 반복 재생 여부를 결정하는 값 | 가능 | false |
미디어 재생이 끝났을 때 다시 처음부터 재생할 지 여부를 나타내는 속성입니다.
mediaItems
val mediaItems: List<MediaItem>
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
List<MediaItem> | 현재 재생 목록에 있는 미디어 아이템들 | 불가능 | [] |
미디어 아이템들의 목록을 나타내는 속성입니다. 해당 속성은 설정이 불가능합니다. 목록 전체를 바꾸고 싶을 때는 Player의 setMediaItems()를 사용하시면 됩니다.
muted
var muted: Boolean
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 오디오 음소거 여부 | 가능 | false |
음소거 여부를 나타내는 속성입니다. 음소거면 true, 아니면 false입니다.
paused
val paused: Boolean
타입 | 설명 | 설정 |
---|---|---|
Boolean | 미디어 일시 정지 여부 | 불가능 |
미디어가 일시 정지 상태인지 나타내는 속성입니다. 다음과 같은 조건 중 하나라도 해당할 때, true를 반환합니다.
- playWhenReady의 값이 false일 때,
- playbackState가 STATE_IDLE일 때 (제한된 리소스를 가지고 있을 때),
- playbackState가 STATE_ENDED일 때 (미디어 재생이 끝났을 때).
playbackRate
var playbackRate: Float
타입 | 설명 | 설정 | 범위 | 기본값 |
---|---|---|---|---|
Float | 재생 속도 | 가능 | 0.1~4.0 | 1.0 |
미디어가 재생 속도를 나타내는 속성입니다. 정상 속도는 1.0이고, 1보다 작을 때는 느리게, 1보다 클 때는 빠르게 재생합니다. 이 때, 오디오 피치 유지 여부는 preservesPitch의 값으로 제어할 수 있습니다.
preservesPitch
var preservesPitch: Boolean
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 오디오 피치 유지 여부 | 가능 | true |
재생 속도에 따른 오디오 피치 유지 여부를 나타내는 속성입니다. 값이 true면 재생 속도가 변해도 오디오 피치는 변함 없으며, false일 경우 재생 속도에 따라 오디오 피치가 변합니다.
repeatRange
var repeatRange: RepeatRange?
타입 | 설명 | 설정 |
---|---|---|
MediaPlayer.RepeatRange? | 반복 구간 범위 | 가능 |
반복 구간 범위를 나타내는 속성입니다. null이 아닌 값으로 설정을 했을 경우 해당 구간을 지속해서 반복 재생합니다. start가 설정되어 있지 않을 경우에는 반복 구간의 시작은 미디어의 맨 앞부분이며, end가 설정되어 있지 않을 경우에는 반복 구간의 끝은 미디어의 맨 마지막 부분으로 간주합니다.
screenBrightness
var screenBrightness: Float
seekBackIncrement
var seekBackIncrement: Duration
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
java.time.Duration | 현재 위치에서 전으로 이동하는 시간의 크기 | 가능 | 10초 |
seekBack()을 호출하여 이동할 때, 현재 위치에서 전으로 이동하는 시간 정도를 나타내는 속성입니다. 왼쪽 방향키를 입력 받거나 하단 인터페이스의 되감기 버튼을 클릭했을 때 이 속성을 사용합니다.
seekForwardIncrement
var seekForwardIncrement: Duration
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
java.time.Duration | 현재 위치에서 후로 이동하는 시간의 크기 | 가능 | 10초 |
seekForward()을 호출하여 이동할 때, 현재 위치에서 후로 이동하는 시간 정도를 나타내는 속성입니다. 오른쪽 방향키를 입력 받거나 하단 인터페이스의 빨리 감기 버튼을 클릭했을 때 이 속성을 사용합니다.
seeking
val seeking: Boolean
타입 | 설명 | 설정 |
---|---|---|
Boolean | 현재 미디어가 새로운 위치로 이동하고 있는지(탐색 중인지) 여부 | 불가능 |
미디어가 탐색 중이지를 나타내는 속성입니다. 현재 미디어가 새로운 위치로 이동하고 있거나 탐색중이면 true를 반환합니다.
subtitleTracks
val subtitleTracks: List<Track>
타입 | 설명 | 설정 |
---|---|---|
List<Track> | 자막 트랙 목록 | 불가능 |
현재 재생 중인 미디어의 자막 트랙을 가져오는 속성입니다.
videoTracks
val videoTracks: List<Track>
타입 | 설명 | 설정 |
---|---|---|
List<Track> | 비디오 트랙 목록 | 불가능 |
현재 재생 중인 미디어의 비디오 트랙을 가져오는 속성입니다.
메서드
beginSeekTo
fun beginSeekTo(direction: SeekDirection)
deselectTrack
fun deselectTrack(track: Track)
파라미터 | 타입 | 설명 |
---|---|---|
track | Track | 선택을 해제할 (자막) 트랙 |
트랙 선택을 해제하여 비활성화하는 메서드입니다. 자막 트랙만 해제 가능합니다.
endSeekTo
fun endSeekTo(direction: SeekDirection)
enterPictureInPicture
fun enterPictureInPicture(activity: Activity, sourceRectHint: Rect? = null)
파라미터 | 타입 | 설명 |
---|---|---|
activity | Activity | 현재 액티비티 |
sourceRectHint | Rect? | setSourceRectHint 참고 |
fun enterPictureInPicture(activity: Activity, sourceView: View? = null)
파라미터 | 타입 | 설명 |
---|---|---|
activity | Activity | 현재 액티비티 |
sourceView | View? | 현재 뷰 |
화면 속 화면 모드로 전환하는 메서드입니다.
fastSeek
fun fastSeek(to: Duration)
파라미터 | 타입 | 설명 |
---|---|---|
to | java.time.Duration | 재생하고자 하는 위치 값 |
입력된 시간으로 바로 이동하기 위한 메서드입니다.
- 주의: 해당 메서드의 원래 목적은 정확한 위치보다는 새로운 위치에서 더 빠르게 재생을 하도록 하는 것이었습니다. 그러나 안드로이드에서는 현재 정확한 위치와 빠른 재생을 동시에 수행할 수 없기 때문에, 현재는 currentTime, seekTo()를 사용한 것과 유사한 결과를 얻게 됩니다. 즉, 이 메서드를 사용하면 정확한 위치로 이동하게 됩니다. 향후 안드로이드에서 이러한 기능을 제공할 경우, 원래 목적에 맞게 업데이트될 예정입니다.
load
fun load(uri: String)
파라미터 | 타입 | 설명 |
---|---|---|
uri | String | 로드하려는 문자열 형식의 미디어 주소 |
미디어 주소를 문자열로 입력 받아서 미디어를 로드하기 위한 메서드입니다.
load
fun load(uri: Uri)
파라미터 | 타입 | 설명 |
---|---|---|
uri | Uri | 로드하려는 android.net.Uri 형식의 미디어 주소 |
미디어 주소를 Uri 타입으로 입력 받아서 미디어를 로드하기 위한 메서드입니다.
load
fun load(mediaItem: MediaItem)
미디어 아이템을 로드하기 위한 메서드입니다.
load
fun load(mediaItems: List<MediaItem>)
미디어 아이템 목록을 로드하기 위한 메서드입니다.
pause
fun pause()
미디어를 일시 정지하기 위한 메서드입니다.
play
fun play()
미디어를 재생하기 위한 메서드입니다.
prepare
fun prepare()
미디어 관련 기본 설정을 하기 위한 메서드입니다. 이 메서드를 실행하면, defaultPlaybackRate, defaultMuted 설정을 미디어 플레이어에 적용하고, 미디어를 로딩하기 시작하고 재생에 필요한 리소스를 확보합니다.
release
fun release()
미디어 목록, 이벤트 핸들러, 리스너 등 미디어에 관련하여 설정했던 것들을 모두 해제한 후, 미디어 플레이어를 릴리스 시키기 위한 메서드입니다. 미디어 플레이어를 더이상 사용하지 않을 시에는 반드시 사용해야 합니다.
seekBack
fun seekBack()
현재 위치에서 속성 seekBackIncrement 만큼 전으로 이동하기 위한 메서드입니다.
seekBack
fun seekBack(increment: Duration)
파라미터 | 타입 | 설명 |
---|---|---|
increment | java.time.Duration | 새로운 위치는 현재 위치에서 입력된 파라미터를 뺀 결과입니다. 즉, 음수 입력 시, 입력된 파라미터의 절대값만큼 후로 이동합니다. |
현재 위치에서 입력된 시간 전으로 이동하기 위한 메서드입니다.
seekForward
fun seekForward()
현재 위치에서 속성 seekForwardIncrement 만큼 후로 이동하기 위한 메서드입니다.
seekForward
fun seekForward(increment: Duration)
파라미터 | 타입 | 설명 |
---|---|---|
increment | java.time.Duration | 새로운 위치 현재 위치에서 입력된 파라미터를 더한 결과입니다. 즉, 음수 입력 시, 입력된 파라미터의 절대값만큼 되돌아갑니다. |
현재 위치에서 입력된 시간 후로 이동하기 위한 메서드입니다.
seekTo
fun seekTo(position: Duration, force: Boolean = false)
파라미터 | 타입 | 설명 |
---|---|---|
position | java.time.Duration | 입력된 파라미터로 재생 위치를 이동합니다. |
force | Boolean | 강제로 위치를 바꿔야할 때, true로 설정. 기본값은 false입니다. |
입력된 시간 위치로 이동하기 위한 메서드입니다.
selectTrack
fun selectTrack(track: Track)
파라미터 | 타입 | 설명 |
---|---|---|
track | Track | 활성화 할 (오디오,비디오,자막)트랙 |
트랙을 선택하여 활성화하는 메서드입니다.
startScrubbing
fun startScrubbing(position: Duration)
stopScrubbing
fun stopScrubbing(position: Duration)
updateScrubbing
fun updateScrubbing(position: Duration)
addEventHandler
fun addEventHandler(handler: EventHandler): EventHandler
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
handler | EventHandler | EventHandler | 추가할 이벤트 핸들러 |
이벤트 핸들러를 추가하기 위한 메서드입니다. 반환된 이벤트 핸들러는 이벤트 핸들러를 제거할 목적으로 removeEventHandler()에서 사용할 수 있습니다. 이벤트 핸들러를 추가한 후, 해당 이벤트 핸들러가 더 이상 필요 없을 때는 반드시 removeEventHandler() 메서드를 사용해서 제거하세요.
removeEventHandler
fun removeEventHandler(handler: EventHandler)
파라미터 | 타입 | 설명 |
---|---|---|
handler | EventHandler | 제거할 이벤트 핸들러 |
addEventHandler()로 추가된 이벤트 핸들러를 제거하기 위한 메서드입니다.
addListener
fun addListener(listener: MediaPlayer.Listener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | MediaPlayer.Listener | 추가할 이벤트 리스너 |
이벤트 리스너를 추가하기 위한 메서드입니다. 이벤트 리스너를 추가한 후, 해당 이벤트 리스너가 더 이상 필요 없을 때는 반드시 removeListener() 메서드를 사용해서 제거하세요.
removeListener
fun removeListener(listener: MediaPlayer.Listener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | MediaPlayer.Listener | 제거할 이벤트 리스너 |
addListener()로 추가된 이벤트 리스너를 제거하기 위한 메서드입니다.
클래스
RepeatRange
MediaPlayer.RepeatRange에 자세한 설명이 있습니다.
MediaPlayer.Listener
import com.newin.nplayer.sdk.MediaPlayer.Listener
interface MediaPlayer.Listener : Player.Listener
MediaPlayer.Listener는 이벤트 처리를 위한 인터페이스로, 위와 같은 메서드를 제공합니다. 각각 메서드에 대한 설명은 메서드를, 사용 방법은 addListener()를 참고하시면 됩니다. 이벤트 리스너를 추가한 후, 해당 이벤트 리스너가 더 이상 필요 없을 때는 반드시 removeListener() 메서드를 사용해서 제거하세요.
Player에 이미 존재하는 이벤트 리스너일 경우에는, 안드로이드 SDK는 이벤트 핸들러만 제공합니다.
이벤트 리스너를 대신하여 사용 방법에 따라서 이벤트 핸들러를 사용하여 이벤트 처리를 할 수 있습니다. 이벤트 핸들러에서 사용되는 파라미터는 이벤트 리스너의 파라미터와 동일합니다. 이벤트 핸들러의 사용 방법은 addEventHandler()와 클래스를 참고하시면 됩니다.
메서드
onDurationChange
fun onDurationChange(duration: Duration)
파라미터 이름 | 타입 | 설명 |
---|---|---|
duration | java.time.Duration | 미디어 길이 |
미디어의 길이(duration)가 변경될 때 실행합니다.
onEnded
fun onEnded()
재생 목록의 마지막 미디어의 재생이 완료 된 시점에 실행합니다.
onError
fun onError(error: PlaybackException)
파라미터 이름 | 타입 | 설명 |
---|---|---|
error | PlaybackException | 재생 오류가 발생했을 때 예외 |
에러가 발생하여 리소스를 로드할 수 없을 때 실행합니다.
onLoadedData
fun onLoadedData()
미디어 트랙이 로드되었을 때 실행합니다.
onLoadedMetadata
fun onLoadedMetadata()
메타데이터가 로드되었을 때 실행합니다.
onLoadStart
fun onLoadStart()
미디어 리소스를 로딩하기 시작할 때 실행합니다.
onPause
fun onPause()
미디어 일시 정지를 요청한 후, 일시 정지 상태로 진입하는 시점에 실행합니다.
onPlay
fun onPlay()
미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 실행합니다. 단, 재생 위치가 변경될 때는 포함하지 않습니다. 자세한 설명은 EventHandler.Play를 참고하세요.
onPlaybackFinish
fun onPlaybackFinish(mediaItem: MediaItem, position: Duration, duration: Duration?, reason: PlaybackFinishReason)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mediaItem | MediaItem? | 종료된 미디어 아이템 |
position | java.time.Duration | 마지막 재생 위치 |
duration | java.time.Duration? | 미디어 길이 |
reason | PlaybackFinishReason | 미디어 종료 원인 |
미디어가 종료될 때 실행합니다. 이 때 마지막 재생 위치(position)와 미디어의 길이(duration) 값을 사용할 수 있습니다. 주의할 점은, 미디어가 로드된 후에 종료할 때만 실행된다는 것입니다. 만약 미디어가 로드되기 전에 종료되는 상황에도 사용하려면, onUnload()를 참고하세요.
onPlaying
fun onPlaying()
재생 위치가 변경되어 재생 되는 것을 포함하여, 미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 실행합니다. 자세한 설명은 EventHandler.Playing를 참고하세요.
onPositionDiscontinuity
fun onPositionDiscontinuity(
player: MediaPlayer,
oldPosition: Duration,
newPosition: Duration
)
파라미터 이름 | 타입 | 설명 |
---|---|---|
player | MediaPlayer | 미디어 플레이어 |
oldPosition | java.time.Duration | 이전 재생 위치 |
newPosition | java.time.Duration | 바뀐 재생 위치 |
재생 위치가 변경되는 시점에 실행합니다. 이전 위치와 이동한 위치 모두 접근이 가능합니다.
주의: Player.Listener의 onPositionDiscontinuity()는 이름만 같고, 사용 방법이 다릅니다.
onProgress
fun onProgress()
플레이어가 소스를 읽어오기 시작할 때에 실행합니다.
onRateChange
fun onRateChange(playbackRate: Float)
파라미터 이름 | 타입 | 설명 |
---|---|---|
playbackRate | Float | 재생 속도 |
재생 속도가 변경되는 시점에 실행합니다.
주의: 재생 속도는 그대로이지만, preservesPitch의 값이 변경될 때도 실행 됨
onRepeatRangeChange
fun onRepeatRangeChange(repeatRange: MediaPlayer.RepeatRange?)
파라미터 이름 | 타입 | 설명 |
---|---|---|
repeatRange | MediaPlayer.RepeatRange? | 구간 반복에서의 구간 |
구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때 실행합니다.
onSeeked
fun onSeeked()
seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 실행합니다.
onSeeking
fun onSeeking()
seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 실행합니다.
onSuspend
fun onSuspend()
미디어 로딩이 중지된 시점에 실행합니다.
onTimeUpdate
fun onTimeUpdate(position: Duration)
파라미터 이름 | 타입 | 설명 |
---|---|---|
position | java.time.Duration | 현재 재생 위치 |
currentTime이 변경되는 시점에 실행합니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.
onUnload
fun onUnload(mediaItem: MediaItem)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mediaItem | MediaItem | 종료된 미디어 아이템 |
미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때 실행합니다.
onVolumeChange
fun onVolumeChange(volume: Float, muted: Boolean)
파라미터 이름 | 타입 | 설명 |
---|---|---|
volume | Float | 디바이스 음량 |
muted | Boolean | 음소거 여부 |
볼륨이 변경되는 시점에 실행합니다. 무음(muted) 상태가 변경될 때도 실행합니다.
주의: Player.Listener의 onVolumeChanged() 메서드는 이 이벤트 리스너와 완전히 다른 동작을 합니다. 메서드 이름과 사용하는 파라미터도 다르니 주의하시기 바랍니다.
onWaiting
fun onWaiting()
일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 실행합니다.
onScrubStart
fun onScrubStart(position: Duration)
| 파라미터 이름 | 타입 | 설명 |
|:--:|:--:|:--:|
|position|[java.time.Duration](https://developer.android.com/reference/java/time/Duration)|스크러빙 위치|
스크러빙이 시작되는 시점에 실행합니다.
## onScrubMove
```kotlin
fun onScrubMove(position: Duration)
| 파라미터 이름 | 타입 | 설명 |
|:--:|:--:|:--:|
|position|[java.time.Duration](https://developer.android.com/reference/java/time/Duration)|스크러빙 위치|
스크러빙 위치가 갱신되는 시점에 실행합니다.
## onScrubMove
```kotlin
fun onScrubStop(position: Duration)
| 파라미터 이름 | 타입 | 설명 |
|:--:|:--:|:--:|
|position|[java.time.Duration](https://developer.android.com/reference/java/time/Duration)|스크러빙 위치|
스크러빙이 종료되는 시점에 실행합니다.
클래스
AudioTrack
import com.newin.nplayer.sdk.extensions.AudioTrack
class AudioTrack : Track
Track 클래스를 확장한 클래스로, 오디오 트랙에 사용되는 클래스입니다.
BookmarkItem
import com.newin.nplayer.sdk.BookmarkItem
data class BookmarkItem
북마크 아이템을 나타내는 구조체입니다. 북마크 타이틀과 재생 위치의 정보를 가지고 있습니다.
속성
title
val title: String?
타입 | 설명 |
---|---|
String? | 타이틀 |
position
val position: Duration
타입 | 설명 |
---|---|
Duration | 재생 위치 |
Context
import android.content.Context
abstract class Context
Context 클랙스를 확장하여, 미디어 플레이어를 설정하고 사용하는 메서드를 제공합니다.
메서드
getMediaPlayer
fun Context.getMediaPlayer(block: (MediaPlayer) -> Unit)
파라미터 | 타입 | 설명 |
---|---|---|
block | (MediaPlayer) -> Unit | 미디어 플레이어 제어 내용 |
현재 화면에 있는 플레이어를 제어하고 싶을 때 사용하는 메서드입니다. 미디어 플레이어를 비동기 방식으로 가지고 오기 때문에, 주의해서 사용해 주세요. 미디어 플레이어 사용 후에는 반드시 release()를 호출해주세요.
presentMediaPlayer
미디어를 여는 메서드입니다. 여러 타입을 파라미터로 받을 수 있습니다. 미디어 플레이어를 사용한 후에는 반드시 release()를 호출해주세요.
fun Context.presentMediaPlayer(mediaItem: MediaItem)
fun Context.presentMediaPlayer(
mediaItem: MediaItem,
configuration: MediaPlayerActivityConfiguration
)
파라미터 | 타입 | 설명 |
---|---|---|
mediaItem | MediaItem | 재생하려는 미디어 아이템 |
configuration | MediaPlayerActivityConfiguration | 설정 값 |
fun Context.presentMediaPlayer(mediaItems: Collection<MediaItem>)
fun Context.presentMediaPlayer(
mediaItems: Collection<MediaItem>,
configuration: MediaPlayerActivityConfiguration
)
파라미터 | 타입 | 설명 |
---|---|---|
mediaItem | Collection<MediaItem> | 재생하려는 미디어 아이템 목록 |
configuration | MediaPlayerActivityConfiguration | 설정 값 |
fun Context.presentMediaPlayer(
mediaItems: Collection<MediaItem>,
startMediaItem: MediaItem
)
파라미터 | 타입 | 설명 |
---|---|---|
mediaItems | Collection<MediaItem> | 재생하려는 미디어 아이템 목록 |
startMediaItem | MediaItem | 목록 중에서 처음 재생할 미디어 아이템. mediaItems에 포함되어 있어야 합니다. |
fun Context.presentMediaPlayer(
mediaItems: Collection<MediaItem>,
startMediaItem: MediaItem,
configuration: MediaPlayerActivityConfiguration
)
파라미터 | 타입 | 설명 |
---|---|---|
mediaItems | Collection<MediaItem> | 재생하려는 미디어 아이템 목록 |
startMediaItem | MediaItem | 목록 중에서 처음 재생할 미디어 아이템. mediaItems에 포함되어 있어야 합니다. |
configuration | MediaPlayerActivityConfiguration | 설정 값 |
fun Context.presentMediaPlayer(
mediaItems: Collection<MediaItem>,
startIndex: Int
)
파라미터 | 타입 | 설명 |
---|---|---|
mediaItems | Collection<MediaItem> | 재생하려는 미디어 아이템 목록 |
startIndex | Int | 목록 중에서 처음 재생할 미디어 아이템의 index. 0 이상 mediaItems 개수 - 1 이하의 값이어야 합니다. |
fun Context.presentMediaPlayer(
mediaItems: Collection<MediaItem>,
startIndex: Int,
configuration: MediaPlayerActivityConfiguration
)
파라미터 | 타입 | 설명 |
---|---|---|
mediaItems | Collection<MediaItem> | 재생하려는 미디어 아이템 목록 |
startIndex | Int | 목록 중에서 처음 재생할 미디어 아이템의 index. 0 이상 mediaItems 개수 - 1 이하의 값이어야 합니다. |
configuration | MediaPlayerActivityConfiguration | 설정 값 |
fun Context.presentMediaPlayer(uri: String)
파라미터 | 타입 | 설명 |
---|---|---|
uri | String | 재생하려는 문자열 형태의 미디어 주소 |
fun Context.presentMediaPlayer(
uri: String,
configuration: MediaPlayerActivityConfiguration
)
파라미터 | 타입 | 설명 |
---|---|---|
uri | String | 재생하려는 문자열 형태의 미디어 주소 |
configuration | MediaPlayerActivityConfiguration | 설정 값 |
fun Context.presentMediaPlayer(uri: Uri)
파라미터 | 타입 | 설명 |
---|---|---|
uri | android.net.Uri | 재생하려는 미디어 주소 |
fun Context.presentMediaPlayer(
uri: Uri,
configuration: MediaPlayerActivityConfiguration
)
파라미터 | 타입 | 설명 |
---|---|---|
uri | android.net.Uri | 재생하려는 미디어 주소 |
configuration | MediaPlayerActivityConfiguration | 설정 값 |
startMediaPlayerService
fun Context.startMediaPlayerService(appId: String)
파라미터 | 타입 | 설명 |
---|---|---|
appId | String | App 아이디 |
DownloadItem
import com.newin.nplayer.sdk.DownloadItem
data class DownloadItem
다운로드 아이템을 나타내는 데이터 클래스입니다. 다운로드에 대한 정보, 진행 상태 등의 정보를 가지고 있습니다.
속성
id
val id: DownloadItemId
타입 | 설명 |
---|---|
Id | 다운로드 아이템의 고유 아이디 |
다운로드 아이템의 고유의 아이디입니다. 다운로드를 일시정지하거나, 다시 시작할 때, 삭제할 때 등에 사용됩니다. 이때, Id는 value class로 아래와 같습니다.
typealias DownloadItemId = UUID
displayPath
val displayPath: String
타입 | 설명 |
---|---|
String | 다운로드된 아이템이 저장되는 상대 경로. 이때 상대 경로는 downloadsUri를 기준으로 함 |
fromUri
val fromUri: Uri
타입 | 설명 |
---|---|
android.net.Uri | 아이템을 가져올 주소 |
다운로드할 아이템의 주소입니다.
toUri
val toUri: Uri
타입 | 설명 |
---|---|
android.net.Uri | 다운로드된 아이템이 저장되는 절대 경로 |
다운로드된 아이템이 저장되는 절대 경로입니다.
status
val status: Status
타입 | 설명 |
---|---|
Status | 다운로드 아이템의 현재 상태 |
progress
val progress: Progress?
타입 | 설명 |
---|---|
Progress? | 다운로드 아이템의 다운로드 진행을 나타냅니다. |
failedReason
val failedReason: FailedReason?
타입 | 설명 |
---|---|
FailedReason? | 다운로드가 실패한 이유 |
클래스
Status
enum class Status(val value: String)
다운로드 아이템의 상태를 나타내는 열거형 클래스입니다.
Progerss
data class Progress(val downloadedSize: Long, val fileSize: Long)
다운로드 진행 정도를 나타내는 데이터 클래스입니다.
FailedReason
enum class FailedReason(val value: Int)
다운로드가 실패한 이유를 나타내는 열거형 클래스입니다.
Progress
import com.newin.nplayer.sdk.DownloadItem.Progress
data class Progress
다운로드 진행 정도를 나타내는 데이터 클래스입니다. 현재 다운로드된 파일 크기와 전체 파일 크기를 가지고 있습니다.
속성
downloadedSize
val downloadedSize: Long
타입 | 설명 |
---|---|
Long | 다운로드된 파일 크기 |
현재까지 다운로드된 파일의 크기를 나타내는 속성입니다. 단위는 바이트입니다.
fileSize
val fileSize: Long
타입 | 설명 |
---|---|
Long | 파일 전체 크기 |
파일 전체 크기를 나타내는 속성입니다. 단위는 바이트입니다.
DownloadManager
다운로드 매니저를 사용하기 전에 AndroidManifest.xml에 브로드캐스트 수신기를 선언합니다.
<receiver
android:name="com.newin.nplayer.sdk.DownloadCompleteReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
</intent-filter>
</receiver>
import com.newin.nplayer.sdk.DownloadManager
class DownloadManager
다운로드 매니저 클래스는 아래와 같은 속성과 메서드를 가지고 있습니다.
정적 속성
shared
companion object {
val shared: DownloadManager
}
타입 | 설명 | 설정 |
---|---|---|
DownloadManager | 현재 활성화된 다운로드 매니저에 접근하기 위한 속성 | 불가능 |
다운로드 매니저에 접근하기 위한 정적 속성입니다. 아래에 언급되는 속성 및 메서드를 호출할 때, DownloadManager.shared를 사용하여 접근할 수 있습니다.
인터페이스
DownloadManager.Listener
interface Listener {
fun onItemAdded(item: DownloadItem) {}
fun onItemRemoved(item: DownloadItem) {}
fun onStatusChanged(item: DownloadItem) {}
fun onProgressUpdated(item: DownloadItem) {}
}
다운로드와 관련된 이벤트 처리를 위한 인터페이스입니다. 자세한 내용은 DownloadManager.Listener를 참고하세요.
속성
downloadsUri
var downloadsUri: Uri
타입 | 설명 | 설정 |
---|---|---|
android.net.Uri | 다운로드된 아이템이 저장되는 최상위 디렉토리 | 불가능 |
다운로드된 아이템이 저장되는 디렉토리 중 최상위 디렉토리를 나타내는 속성입니다.
items
val items: List<DownloadItem>
타입 | 설명 | 설정 |
---|---|---|
List<DownloadItem> | 현재 다운로드 목록에 있는 아이템들 | 불가능 |
현재 다운로드 목록에 있는 아이템들을 반환하는 속성입니다.
maxParallelDownloads
var maxParallelDownloads: Int
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Int | 동시에 다운받을 수 있는 아이템 최대 개수 | 가능 | 3 |
동시에 받을 수 있는 아이템의 최대 개수를 반환하거나 설정합니다.
메서드
add
fun add(mediaItem: MediaItem, allowsCellularAccess: Boolean = true): DownloadItemId
파라미터 | 타입 | 설명 | 필수 | 기본값 |
---|---|---|---|---|
mediaItem | MediaItem | 추가하고자 하는 미디어 아이템 | O | 없음 |
allowsCellularAccess | Boolean | 다운로드 시 셀룰러 데이터 사용 여부 | X | true |
다운로드를 할 미디어 아이템을 추가합니다. 현재 다운로드가 진행되고 있는 아이템의 수가 maxParallelDownloads 보다 적으면 바로 다운로드를 시작합니다. 셀룰러 데이터 사용을 허용하지 않으려면, allowsCellularAccess를 false로 설정하여 호출하십시오.
getItemsByStatus
fun getItemsByStatus(status: DownloadItem.Status): List<DownloadItem>
파라미터 | 타입 | 설명 |
---|---|---|
status | DownloadItem.Status | 가져오고자 하는 아이템의 다운로드 상태 |
특정 다운로드 상태의 아이템 목록을 가져오기 위해서 사용하는 메서드입니다.
pause
fun pause(id: DownloadItemId)
파라미터 | 타입 | 설명 |
---|---|---|
id | Id | 일서 정지할 다운로드 아이템의 아이디 |
다운로드를 일시 정지할 때 사용하는 메서드입니다.
pauseAll
fun pauseAll()
다운로드 목록에 있는 모든 아이템의 다운로드를 일시 정지하게 하는 메서드입니다.
remove
fun remove(id: DownloadItemId)
파라미터 | 타입 | 설명 |
---|---|---|
id | Id | 제거할 다운로드 아이템의 아이디 |
다운로드 목록에서 아이템을 지울 때 사용하는 메서드입니다.
removeAll
fun removeAll()
다운로드 아이템 목록을 모두 지우는 메서드입니다.
removeCompleted
fun removeCompleted()
다운로드가 완료된 아이템을 목록에서 모두 지우는 메서드입니다.
resume
fun resume(id: DownloadItemId)
파라미터 | 타입 | 설명 |
---|---|---|
id | Id | 다운로드 재개할 아이템의 아이디 |
다운로드를 일시 정지한 아이템의 다운로드를 재개하는 메서드입니다.
resumeAll
fun resumeAll()
일시 정지한 모든 아이템의 다운로드를 재개하는 메서드입니다.
addListener
fun addListener(listener: Listener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | DownloadManager.Listener | 추가할 다운로드 매니저 리스너 |
다운로드 매니저 리스너를 추가하기 위한 메서드입니다. 리스너를 추가한 후, 해당 리스너가 더 이상 필요 없을 때는 반드시 removeListener() 메서드를 사용해서 제거하세요.
removeListener
fun removeListener(listener: Listener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | DownloadManager.Listener | 제거할 다운로드 매니저 리스너 |
다운로드 매니저 리스너를 제거하기 위한 메서드입니다.
이벤트 핸들러
import com.newin.nplayer.sdk.EventHandler
sealed class EventHandler
이벤트 핸들러의 종류와 사용 방법에 대한 설명입니다. 각각 데이터 클래스에 대한 설명은 클래스를, 사용 방법은 addEventHandler()를 참고하시면 됩니다. 이벤트 핸들러를 추가한 후, 해당 이벤트 핸들러가 더 이상 필요 없을 때는 반드시 removeEventHandler() 메서드를 사용해서 제거하세요.
이벤트 핸들러를 대신하여 사용 방법에 따라서 이벤트 리스너를 사용하여 이벤트 처리를 할 수 있습니다. 이벤트 리스너에서 사용되는 파라미터는 이벤트 핸들러의 파라미터와 동일합니다. 이벤트 리스너의 사용 방법은 addEventListener()와 메서드를 참고하시면 됩니다.
클래스
DurationChange
data class DurationChange(val listener: (Duration) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
java.time.Duration | 미디어 길이 |
미디어의 길이(duration)가 변경되었을 때를 처리하기 위한 핸들러입니다.
Ended
data class Ended(val listener: () -> Unit) : EventHandler()
재생 목록의 마지막 미디어의 재생이 완료 된 시점에 사용하기 위한 핸들러입니다.
Error
data class Error(val listener: (PlaybackException) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
PlaybackException | 재생 오류가 발생했을 때 예외 |
에러가 발생하여 리소스를 로드할 수 없을 때 사용하기 위한 핸들러입니다.
LoadedData
data class LoadedData(val listener: () -> Unit) : EventHandler()
미디어 트랙이 로드되었을 때 사용하기 위한 핸들러입니다.
LoadedMetadata
data class LoadedMetadata(val listener: () -> Unit) : EventHandler()
메타데이터가 로드되었을 때 사용하기 위한 핸들러입니다.
LoadStart
data class LoadStart(val listener: () -> Unit) : EventHandler()
미디어 리소스를 로딩하기 시작할 때 사용하기 위한 핸들러입니다.
MediaItemTransition
data class MediaItemTransition(val listener: (MediaItem?, @Player.MediaItemTransitionReason Int) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
MediaItem? | 교체된 미디어 아이템 |
@Player.MediaItemTransitionReason Int | 미디어 아이템 교체 이유 |
미디어 아이템이 교체 되는 시점에 사용하기 위한 핸들러입니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.
Pause
data class Pause(val listener: () -> Unit) : EventHandler()
미디어 일시 정지를 요청한 후, 일시 정지 상태로 진입하는 시점에 사용하기 위한 핸들러입니다.
Play
data class Play(val listener: () -> Unit) : EventHandler()
미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 사용하기 위한 핸들러입니다. 단, 재생 위치가 변경될 때는 포함하지 않습니다.
사용자가 재생 버튼을 클릭하거나 mediaPlayer.play()를 호출하는 등 플레이어에 재생 명령을 내렸을 때 처럼 직접 명령을 했을 때 상황에서 이벤트 처리를 여기서 할 수 있음 EventHandler.Playing과 다른 점은 seekTo() 등을 통해 재생 위치가 변경될 때의 이벤트는 여기서 처리할 수 없다는 것입니다. 중요한 점이 하나 더 있는데, Play와 관련된 이벤트 핸들러가 호출되면, Playing 이벤트는 Play 이벤트 이 후에 언제나 호출됩니다.
PlaybackFinish
data class PlaybackFinish(val listener: (MediaItem, Duration, Duration?, PlaybackFinishReason) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
MediaItem? | 종료된 미디어 아이템 |
java.time.Duration | 마지막 재생 위치 |
java.time.Duration? | 미디어 길이 |
PlaybackFinishReason | 미디어 종료 원인 |
미디어가 종료될 때 사용하기 위한 핸들러입니다. 이 때 마지막 재생 위치(position)와 미디어의 길이(duration) 값을 사용할 수 있습니다. 주의할 점은, 미디어가 로드된 후에 종료될 때만 사용할 수 있다는 것입니다. 만약 미디어가 로드되기 전에 종료되는 상황에도 사용하려면, Unload를 참고하세요.
PlaybackStateChange
data class PlaybackStateChange(val listener: (@Player.State Int) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
@Player.State Int | 재생 상태 |
미디어 로딩 상태에 따른 처리, 즉, 버퍼링인지 준비가 된 상태인지, 끝이 났는지, 플레이어를 종료하였는지 등의 상황에 따라 처리하기 위한 핸들러입니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.
Playing
data class Playing(val listener: () -> Unit) : EventHandler()
재생 위치가 변경되어 재생 되는 것을 포함하여, 미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 사용하기 위한 핸들러입니다.
즉, seekBack(), seekForward(), seekTo() 등의 호출로 재생 위치가 변경되기 위해, 미디어가 잠시 멈추었다가 다시 재생되는 이벤트를 처리할 수 있다는 것이 EventHandler.Play와 다른 점입니다. Playing과 관련된 이벤트 핸들러는 Play 이벤트 이후에 호출됩니다.
PositionDiscontinuity
data class PositionDiscontinuity(
val listener: (MediaPlayer, Duration, Duration) -> Unit
) : EventHandler()
파라미터 타입 | 설명 |
---|---|
MediaPlayer | 미디어 플레이어 |
java.time.Duration | 이전 재생 위치 |
java.time.Duration | 바뀐 재생 위치 |
재생 위치가 변경되는 시점에 사용하기 위한 핸들러입니다. 이전 위치와 이동한 위치 모두 접근이 가능합니다.
Progress
data class Progress(val listener: () -> Unit) : EventHandler()
플레이어가 소스를 읽어오기 시작할 때에 사용하기 위한 핸들러입니다.
RateChange
data class RateChange(val listener: (Float) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
Float | 재생 속도 |
재생 속도가 변경되는 시점에 사용하기 위한 핸들러입니다. 주의: 재생 속도는 그대로이지만, preservesPitch의 값이 변경될 때도 호출 됨
RepeatModeChange
data class RepeatModeChange(val listener: (@Player.RepeatMode Int) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
@Player.RepeatMode Int | 반복 모드 종류 |
반복 모드가 변경되는 시점에 사용하기 위한 핸들러입니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.
RepeatRangeChange
data class RepeatRangeChange(val listener: (MediaPlayer.RepeatRange?) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
MediaPlayer.RepeatRange? | 구간 반복에서의 구간 |
구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때를 처리하기 위한 핸들러입니다.
Seeked
data class Seeked(val listener: () -> Unit) : EventHandler()
seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 사용하기 위한 핸들러입니다.
Seeking
data class Seeking(val listener: () -> Unit) : EventHandler()
seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 사용하기 위한 핸들러입니다.
Suspend
data class Suspend(val listener: () -> Unit) : EventHandler()
미디어 로딩이 중지된 시점에 사용하기 위한 핸들러입니다.
TimeUpdate
data class TimeUpdate(val listener: (Duration) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
java.time.Duration | 현재 재생 위치 |
currentTime이 변경되는 시점에 사용하기 위한 핸들러입니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.
Unload
data class Unload(val listener: (MediaItem) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
MediaItem | 종료된 미디어 아이템 |
미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때를 처리하기 위한 핸들러입니다.
VideoSizeChange
data class VideoSizeChange(val listener: (VideoSize) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
VideoSize | 영상 사이즈 |
영상 크기가 바뀌는 시점에 사용하기 위한 핸들러입니다. 다음 영상으로 이동할 때, 영상 크기가 0x0으로 바뀌었다가 다음 영상의 크기로 바뀌게 되는데, 0x0으로 바뀔 때도 해당 이벤트는 호출됩니다. 즉, 다음 영상으로 이동할 경우, 이 핸들러는 두 번 호출 됩니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.
VolumeChange
data class VolumeChange(val listener: (Float, Boolean) -> Unit) : EventHandler()
파라미터 타입 | 설명 |
---|---|
Float | 디바이스 음량 |
Boolean | 음소거 여부 |
볼륨이 변경되는 시점에 사용하기 위한 핸들러입니다. 무음(muted) 상태가 변경될 때도 호출됩니다.
주의: Player.Listener의 onVolumeChanged() 메서드는 이 핸들러와 전혀 다릅니다. 메서드 이름과 사용하는 파라미터도 다르니 주의하시기 바랍니다.
Waiting
data class Waiting(val listener: () -> Unit) : EventHandler()
일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 사용하기 위한 핸들러입니다.
FragmentManager
import androidx.fragment.app.FragmentManager
androidx.fragment.app.FragmentManager 클래스를 확장하여, MediaPlayerBaseFragment의 미디어를 로드할 수 있는 기능을 제공합니다.
메소드
load
fun FragmentManager.load(parameters: MediaPlayerBaseFragment.Parameters)
파라미터 | 타입 | 설명 |
---|---|---|
parameters | MediaPlayerBaseFragment | 설정 값 |
MediaItem
import androidx.media3.common.MediaItem
미디어 아이템의 정보를 가져올 수 있는 위의 속성 및 메서드를 제공합니다. Agent에서 설정한 값을 불러올 수 있습니다.
속성
disablePlaybackRate
val MediaItem.disablePlaybackRate: Boolean
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 배속 기능 허용 여부 | 불가능 | false |
미디어의 배속 기능 허용 여부를 나타내는 속성입니다.
returnUrl
val MediaItem.returnUrl: Uri?
타입 | 설명 | 설정 |
---|---|---|
android.net.Uri? | 미디어 아이템의 리턴 Url | 불가능 |
Agent에서 설정한 미디어 아이템의 리턴 Url입니다.
seekable
val MediaItem.seekable: Boolean
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 탐색(Seek) 기능 허용 여부 | 불가능 | true |
미디어의 Seek 기능 허용 여부를 나타내는 속성입니다.
title
val MediaItem.title: CharSequence?
타입 | 설명 | 설정 |
---|---|---|
CharSequence? | 미디어의 제목 | 불가능 |
미디어 메타 데이터에 저장된 제목을 가져오는 속성입니다. 만약 미디어 메타 데이터에 제목이 없다면, 파일 이름을 가져옵니다.
uri
val MediaItem.uri: Uri?
타입 | 설명 | 설정 |
---|---|---|
android.net.Uri? | 미디어 아이템의 주소 | 불가능 |
미디어 아이템에 따라 로컬 주소가 나올 수도 있고, 웹 주소도 나올 수 있습니다.
useBookmarkCallback
val MediaItem.useBookmarkCallback: Boolean
타입 | 설명 | 설정 |
---|---|---|
Boolean | 북마크 콜백 사용 | 불가능 |
메서드
withDrmConfiguration
import com.newin.nplayer.sdk.extensions.withDrmConfiguration
fun MediaItem.withDrmConfiguration(
appId: String,
userId: String,
userData: Map<String, Any> = emptyMap(),
offlineAccessPeriod: Duration? = null,
): MediaItem
이름 | 타입 | 설명 | 필수 | 기본값 |
---|---|---|---|---|
appId | String | App 아이디 | O | 없음 |
userId | String | 사용자 아이디 | O | 없음 |
userData | Map<String, Any> | 사용자 데이터 | X | emptyMap() |
offlineAccessPeriod | java.time.Duration? | 오프라인 재생 기한 | X | null |
App 아이디와 사용자 아이디를 사용하여 DRM 설정을 하는 메서드입니다. Callback URL에 전달할 데이터(사용자 데이터)와 오프라인 재생 기한 설정을 추가하여 DRM 설정을 할 수 있습니다.
MediaItem.Builder
import androidx.media3.common.MediaItem.Builder
MediaItem.Builder 클래스를 확장하여, Seek 기능에 대한 메서드를 제공합니다.
메서드
setDisablePlaybackRate
fun MediaItem.Builder.setDisablePlaybackRate(disablePlaybackRate: Boolean): MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
disablePlaybackRate | Boolean | 배속 기능을 허용할 지에 대한 여부 | O |
미디어 아이템의 배속 기능을 허용할 지에 대한 여부를 설정하는 메서드입니다.
setSeekable
fun MediaItem.Builder.setSeekable(seekable: Boolean): MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
seekable | Boolean | Seek 기능을 허용할 지에 대한 여부 | O |
미디어 아이템의 Seek 기능을 허용할 지에 대한 여부를 설정하는 메서드입니다.
setUseBookmarkCallback
fun MediaItem.Builder.setUseBookmarkCallback(useBookmarkCallback: Boolean): MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
useBookmarkCallback | Boolean | 북마크 콜백 사용 여부 | O |
MediaItem.DrmConfiguration
import androidx.media3.common.MediaItem.DrmConfiguration
DRM 설정에 포함된 App 아이디, 사용자 아이디, 오프라인 재생 기간을 가져올 수 있는 속성을 제공합니다.
미디어 아이템의 아래 해당하는 속성에 접근하기 위해서는 아래 자바 코드(androidx.media3.common.MediaItem.java)를 참고하시면 됩니다.
public final class MediaItem implements Bundleable {
@Nullable public final LocalConfiguration localConfiguration;
}
public static final class LocalConfiguration implements Bundleable {
@Nullable public final DrmConfiguration drmConfiguration;
}
속성
appId
import com.newin.nplayer.sdk.extensions.appId
val MediaItem.DrmConfiguration.appId: String?
타입 | 설명 | 설정 |
---|---|---|
String? | App 아이디 | 불가능 |
App 아이디를 가져오는 속성입니다.
offlineAccessPeriod
import com.newin.nplayer.sdk.extensions.offlineAccessPeriod
val MediaItem.DrmConfiguration.offlineAccessPeriod: Duration?
타입 | 설명 | 설정 |
---|---|---|
java.time.Duration? | 오프라인 재생 기간 | 불가능 |
다운로드 컨텐츠의 오프라인 재생 기간을 가져오는 속성입니다.
userId
val MediaItem.DrmConfiguration.userId: String?
타입 | 설명 | 설정 |
---|---|---|
String? | 사용자 아이디 | 불가능 |
사용자 아이디를 가져오는 속성입니다.
MediaMetadata
import androidx.media3.common.MediaMetadata
미디어 메타 데이터 클래스입니다.
속성
artworkUrl
@Nullable Uri artworkUri
타입 | 설명 |
---|---|
android.net.Uri | 미디어 아이템의 아트워크 경로 |
미디어 아이템의 아트워크 경로를 나타내는 속성입니다.
title
@Nullable CharSequence title
타입 | 설명 |
---|---|
CharSequence | 미디어 아이템의 제목 |
미디어 아이템의 제목을 나타내는 속성입니다.
메서드
buildUpon()
MediaMetadata.Builder buildUpon()
미디어 메타 데이터를 추가하거나 수정하고자 할 때 사용하는 메서드입니다. 변경 후, .build()를 호출하여 구성을 완료합니다.
정적 클래스
Builder
static class Builder
미디어 메타데이터를 만드는 클래스입니다.
MediaPlayer.RepeatRange
import com.newin.nplayer.sdk.MediaPlayer.RepeatRange
data class RepeatRange(val start: Duration, val end: Duration)
구간 반복에 사용되는 데이터 클래스입니다.
생성자 파라미터
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
start | java.time.Duration | 구간 반복 시작 위치 값 | O |
end | java.time.Duration | 구간 반복 종료 위치 값 | O |
속성
start
val start: Duration
타입 | 설명 |
---|---|
java.time.Duration | 구간 반복 시작 위치를 반환 |
end
val end: Duration
타입 | 설명 |
---|---|
java.time.Duration | 구간 반복 종료 위치를 반환 |
메서드
withStart
fun withStart(start: Duration): RepeatRange
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
start | java.time.Duration | RepeatRange | 구간 반복 시작 위치를 업데이트한 오브젝트를 반환 |
withEnd
fun withEnd(end: Duration): RepeatRange
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
end | java.time.Duration | RepeatRange | 구간 반복 종료 위치를 업데이트한 오브젝트를 반환 |
MediaPlayerActivityConfiguration
import com.newin.nplayer.sdk.MediaPlayerActivityConfiguration
data class MediaPlayerActivityConfiguration(
var allowsBackgroundPlayback: Boolean,
var allowsCellularAccess: Boolean,
var allowsPictureInPicturePlayback: Boolean,
var controllerShowTimeout: Duration,
var defaultPlaybackRate: Float,
var seekBackwardIncrement: Duration,
var seekForwardIncrement: Duration,
var screenOrientationLock: ScreenOrientationLock,
var subtitleDisplayPosition: SubtitleDisplayPosition,
var subtitleTextPosition: Float,
var subtitleTextSize: SubtitleTextSize,
)
미디어 플레이어의 설정을 도와주는 데이터 클래스입니다. 아래와 같은 생성자 파라미터 및 속성, 열거형을 가지고 있습니다. configuration은 presentMediaPlayer()를 호출할 때 사용하여 미디어 플레이어를 설정합니다.
생성자 파라미터
이름 | 타입 | 설명 | 필수 | 기본값 |
---|---|---|---|---|
allowsBackgroundPlayback | Boolean | 백그라운드 재생을 허용할 지 여부 | X | false |
allowsCellularAccess | Boolean | 셀룰러 데이터 사용을 허용할 지 여부 | X | true |
allowsPictureInPicturePlayback | Boolean | 화면 속 화면 모드를 허용할 지 여부 | X | true |
controllerShowTimeout | java.time.Duration | 컨트롤러를 보여줄 최대 시간 | X | 5초 |
defaultPlaybackRate | Float | 미디어의 재생 속도 | X | 1.0 |
seekBackwardIncrement | java.time.Duration | 현재 위치에서 전으로 이동하는 시간의 크기 | X | 10초 |
seekForwardIncrement | java.time.Duration | 현재 위치에서 후로 이동하는 시간의 크기 | X | 10초 |
screenOrientationLock | ScreenOrientationLock | 화면 고정 방향 | X | Off |
subtitleDisplayPosition | SubtitleDisplayPosition | 자막 출력 위치 | X | OnVideo |
subtitleTextPosition | Float | 자막 위치 | X | 1.0 |
subtitleTextSize | SubtitleTextSize | 자막 크기 | X | Pixel(32) |
정적 속성
defaultConfiguration
companion object {
val defaultConfiguration: MediaPlayerActivityConfiguration
}
타입 | 설명 | 설정 |
---|---|---|
MediaPlayerActivityConfiguration | 기본 설정 값에 접근하기 위한 속성 | 불가능 |
기본 설정 값을 가져오는 정적 속성입니다. MediaPlayerActivityConfiguration.defaultConfiguration 를 사용하여 기본 설정 값을 가져올 수 있습니다.
속성
allowsBackgroundPlayback
var allowsBackgroundPlayback: Boolean = false
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 백그라운드 재생을 허용할 지 여부 | 가능 | false |
백그라운드 재생을 허용할 지 여부를 나타내는 속성입니다.
allowsCellularAccess
var allowsCellularAccess: Boolean = true
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 셀룰러 데이터 사용을 허용할 지 여부 | 가능 | true |
미디어를 재생할 때, 셀룰러 데이터를 사용할 지 여부를 나타내는 속성입니다.
allowsPictureInPicturePlayback
var allowsPictureInPicturePlayback: Boolean = true
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Boolean | 화면 속 화면 모드를 허용할 지 여부 | 가능 | true |
화면 속 화면 모드를 허용할 지 여부를 나타내는 속성입니다.
controllerShowTimeout
var controllerShowTimeout: Duration = Duration.ofSeconds(5)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
java.time.Duration | 컨트롤러를 자동으로 숨기는 시간 | 가능 | 5초 |
해당 시간만큼 아무 것도 입력하지 않으면 컨트롤러가 사라집니다. 0초로 설정할 경우에는 컨트롤러를 자동으로 숨기지 않습니다.
defaultPlaybackRate
var defaultPlaybackRate: Float = 1f
타입 | 설명 | 설정 | 범위 | 기본값 |
---|---|---|---|---|
Float | 미디어의 기본 재생 속도 | 가능 | 0.1~4.0 | 1.0 |
미디어 재생 속도를 나타내는 속성입니다.
seekBackwardIncrement
var seekBackwardIncrement: Duration = Duration.ofSeconds(10)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
java.time.Duration | 현재 위치에서 전으로 이동하는 시간의 크기 | 가능 | 10초 |
현재 위치에서 전으로 탐색하는 시간을 나타내는 속성입니다.
seekForwardIncrement
var seekForwardIncrement: Duration = Duration.ofSeconds(10)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
java.time.Duration | 현재 위치에서 후로 이동하는 시간의 크기 | 가능 | 10초 |
현재 위치에서 후로 탐색하는 시간을 나타내는 속성입니다.
screenOrientationLock
var screenOrientationLock: ScreenOrientationLock = ScreenOrientationLock.Off
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
ScreenOrientationLock | 화면 방향 고정 상태 | 가능 | Off |
화면의 고정 상태를 나타내는 속성입니다.
subtitleDisplayPosition
var subtitleDisplayPosition: SubtitleDisplayPosition = SubtitleDisplayPosition.OnVideo
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
SubtitleDisplayPosition | 자막 출력 위치 | 가능 | OnVideo |
자막 추력 위치를 나타내는 속성입니다.
subtitleTextPosition
var subtitleTextPosition: Float = 1f
타입 | 설명 | 설정 | 범위 | 기본값 |
---|---|---|---|---|
Float | 자막 위치 | 가능 | 0f~1f | 1f |
자막 위치를 나타내는 속성입니다. 이 속성은 화면에서 자막이 배치될 위치를 비율로 표현하며, 값의 범위는 0f에서 1f 사이입니다. 기본값은 1f으로, 자막이 화면의 맨 아래에 위치함을 의미합니다.
subtitleTextSize
var subtitleTextSize: SubtitleTextSize = SubtitleTextSize.Pixel(32)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
SubtitleTextSize | 자막 크기 | 가능 | SubtitleTextSize.Pixel(32) |
자막 크기를 나타내는 속성입니다. 자막 크기를 픽셀 단위 또는 비율로 나타낼 수 있습니다.
클래스
SubtitleTextSize
sealed class SubtitleTextSize
자막 크기를 나타내는 클래스입니다.
열거형
ScreenOrientationLock
enum class ScreenOrientationLock
화면 방향 고정 상태를 나타내는 열거형입니다.
SubtitleDisplayPosition
enum class SubtitleDisplayPosition
자막 출력 위치를 나타내는 열거형입니다.
MediaPlayerActivityConfiguration.SubtitleTextSize
import com.newin.nplayer.sdk.MediaPlayerActivityConfiguration.SubtitleTextSize
sealed class SubtitleTextSize
자막 크기를 나타내는 클래스입니다. 자막 크기를 픽셀 단위 또는 비율로 표현할 수 있습니다.
클래스
Pixel
data class Pixel(val pixel: Float) : SubtitleTextSize()
자막 크기를 픽셀 단위로 설정합니다.
Scale
data class Scale(val scale: Float) : SubtitleTextSize()
자막 크기를 비율로 설정합니다.
MediaPlayerBaseFragment
import com.newin.nplayer.sdk.MediaPlayerBaseFragment
open class MediaPlayerBaseFragment : Fragment()
androidx.fragment.app.Fragment를 상속한 미디어 플레이어 프레그먼의 기반 클래스입니다.
속성
playerView
val playerView: MediaPlayerBaseView
타입 | 설명 | 설정 |
---|---|---|
MediaPlayerBaseView | 미디어 플레이어 뷰 객체 | 불가능 |
player
val player: MediaPlayer?
타입 | 설명 | 설정 |
---|---|---|
MediaPlayer | 미디어 플레이어 객체 | 불가능 |
parameters
val parameters: MediaPlayerBaseFragment.Parameters
타입 | 설명 | 설정 |
---|---|---|
MediaPlayerBaseFragment.Parameters | 미디어 플레이어 설정을 담고 있는 객체 | 불가능 |
오버라이드 가능한 메서드
onPlayerCreated
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View
MediaPlayerBaseView를 상속하여 만든 사용자 플레이어 뷰를 제공합니다. 오버라이드하지 않으면 SDK에서 기본으로 제공되는 플레이어 뷰 객체를 만듭니다.
참고: android.android.app.Fragment.onCreateView
onPlayerCreated
open fun onPlayerCreated(player: MediaPlayer)
MediaPlayer 객체가 생성되면 호출됩니다.
onDeviceRootedOrAppPlayerDetected
open fun onDeviceRootedOrAppPlayerDetected()
장치가 루팅되거나 앱 플레이어를 감지기하면 호출됩니다.
MediaPlayerBaseFragment.Parameters
import com.newin.nplayer.sdk.MediaPlayerBaseFragment.Parameters
data class Parameters(
val mediaItems: List<MediaItem>,
val startMediaItemIndex: Int = 0,
val defaultPlaybackRate: Float = 1f,
val seekBackIncrement: Duration = Duration.ofSeconds(10),
val seekForwardIncrement: Duration = Duration.ofSeconds(10),
val allowsCellularAccess: Boolean = true,
val allowsBackgroundPlayback: Boolean = false,
val allowsPictureInPicturePlayback: Boolean = true,
val controllerShowTimeout: Duration = Duration.ofSeconds(5),
val subtitleDisplayPosition: SubtitleDisplayPosition = SubtitleDisplayPosition.OnVideo,
val subtitleTextPosition: Float = 1f,
val subtitleTextSize: SubtitleTextSize = SubtitleTextSize.Pixel(SubtitleTextSize.DEFAULT_FONT_PIXEL_SIZE * 2),
val extras: Bundle? = null,
)
미디어 플레이어 설정을 담고 있는 구성 객체입니다.
속성
mediaItems
val mediaItems: List<MediaItem>
startMediaItemIndex
val startMediaItemIndex: Int
defaultPlaybackRate
val defaultPlaybackRate: Float
seekBackIncrement
val seekBackIncrement: Duration
seekForwardIncrement
val seekForwardIncrement: Duration
allowsCellularAccess
val allowsCellularAccess: Boolean
allowsBackgroundPlayback
val allowsBackgroundPlayback: Boolean
allowsPictureInPicturePlayback
val allowsPictureInPicturePlayback: Boolean
controllerShowTimeout
val controllerShowTimeout: Duration
subtitleDisplayPosition
val subtitleDisplayPosition: SubtitleDisplayPosition
subtitleTextPosition
val subtitleTextPosition: Float
subtitleTextSize
val subtitleTextSize: SubtitleTextSize
extras
val extras: Bundle?
정적 메소드
fun fromBundle(bundle: Bundle): Parameters
메소드
fun toBundle(): Bundle
MediaPlayerBaseView
import com.newin.nplayer.sdk.MediaPlayerBaseView
open class MediaPlayerBaseView(context: Context) : PlayerView(context)
androidx.media3.ui.PlayerView를 상속한 미디어 플레이어 뷰의 기반 클래스입니다.
속성
player
var player: MediaPlayer?
videoContainerView
val videoContainerView: ViewGroup
controlContainerView
val controlContainerView: ViewGroup
infoContainerView
val infoContainerView: ViewGroup
subtitleTextSize
var subtitleTextSize: SubtitleTextSize
subtitleDisplayPosition
var subtitleDisplayPosition: SubtitleDisplayPosition
subtitleTextFractionPosition
var subtitleTextFractionPosition: Float
subtitleTextFractionPosition
var subtitleTextPixelPosition: Float
videoPan
var videoPan: PointF
videoZoom
var videoZoom: Float
메소드
containsPointInSubtitleTextBounds
fun containsPointInSubtitleTextBounds(point: PointF): Boolean
setAutoHideControl
fun setAutoHideControl()
setSubtitleTextPosition
fun setSubtitleTextPosition(position: SubtitleTextPosition,alignment: SubtitleTextAlignment)
unsetAutoHideControl
fun unsetAutoHideControl()
zoomVideo
fun zoomVideo(scaleFactor: Float, pivotX: Float, pivotY: Float)
zoomVideo
fun zoomVideo(scaleFactor: Float)
오버라이드 가능한 메서드
onAttachedToPlayer
open fun onAttachedToPlayer(player: MediaPlayer)
onDetachedFromPlayer
open fun onDetachedFromPlayer(player: MediaPlayer)
onVideoZoomChange
open fun onVideoZoomChange(scaleFactor: Float)
MediaPlayerException
import com.newin.nplayer.sdk.MediaPlayerException
class MediaPlayerException : PlaybackException
예외 처리를 위한 클래스입니다. androidx.media3.common.PlaybackException을 확장한 클래스로 아래와 같은 예외 처리 클래스로 사용됩니다.
AccessRightsExpiredException
class AccessRightsExpiredException(override val message: String) : MediaPlayerException
접근 권한이 만료된 경우
AppBundleNotRegisteredException
class AppBundleNotRegisteredException : MediaPlayerException
등록되지 않은 앱 번들 아이디를 사용한 경우
DeviceLimitExceededException
class DeviceLimitExceededException(override val message: String) : MediaPlayerException
기기 제한이 초과한 경우
LicenseCheckFailedException
class LicenseCheckFailedException(override val message: String) : MediaPlayerException
라이선스 확인에 실패한 경우
LicenseCheckFailureException
class LicenseCheckFailureException(override val message: String) : MediaPlayerException
라이선스 확인에 실패한 경우
LicenseNotFoundException
class LicenseNotFoundException(override val message: String) : MediaPlayerException
라이선스를 찾을 수 없는 경우
MultipleConnectionsException
class MultipleConnectionsException(override val message: String) : MediaPlayerException
동시 접속이 감지된 경우
NetworkException
class NetworkException(override val message: String) : MediaPlayerException
네트워크 관련 에러가 발생한 경우
NoAccessRightsException
class NoAccessRightsException(override val message: String) : MediaPlayerException
접근 권한이 없는 경우
NoCellularAccessException
class NoCellularAccessException : MediaPlayerException
셀룰러 데이터 사용이 허용되지 않은 상황에서 와이파이 연결이 끊어졌는데 미디어를 재생하려는 경우
NoOfflineAccessRightsException
class NoOfflineAccessRightsException(override val message: String) : MediaPlayerException
오프라인 접근 권한이 없는 경우
OfflineAccessRightsExpiredException
class OfflineAccessRightsExpiredException(override val message: String) : MediaPlayerException
오프라인 접근 권한이 만료된 경우
PlaybackLimitExceededException
class PlaybackLimitExceededException(override val message: String) : MediaPlayerException
재생 제한이 초과된 경우
SessionClosedException
class SessionClosedException(override val message: String) : MediaPlayerException
세션이 종료된 경우
SessionNotFoundException
class SessionNotFoundException(override val message: String) : MediaPlayerException
세션을 찾을 수 없는 경우
UnauthorizedException
class UnauthorizedException(override val message: String) : MediaPlayerException
권한이 없는 경우
UnexpectedException
class UnexpectedException(override val message: String, override val cause: Throwable?) : MediaPlayerException
현재 정의 되지 않은 에러가 발생한 경우
PlaybackInfo
import com.newin.nplayer.sdk.PlaybackInfo
data class PlaybackInfo
재생 정보 저장소에 저장된 정보를 나타내는 데이터 글래스입니다. 재생 정보 저장소의 shared 속성과 findBy 메서드를 사용하여 미디어의 정보를 가져올 수 있습니다.
속성
artworkUri
val artworkUri: Uri?
타입 | 설명 |
---|---|
android.net.Uri | 미디어 아이템의 아트워크 주소 |
미디어 아이템의 아트워크 경로를 나타내는 속성입니다.
duration
val duration: Duration?
타입 | 설명 |
---|---|
java.time.Duration | 미디어 아이템의 전체 길이 |
미디어 아이템의 전체 길이를 나타내는 속성입니다.
expiresOn
val expiresOn: Instant?
타입 | 설명 |
---|---|
java.time.Instant | 만료 일시 |
미디어 아이템의 만료 일시를 나타내는 속성입니다.
lastPlayedTime
val lastPlayedTime: Duration?
타입 | 설명 |
---|---|
java.time.Duration | 마지막 재생 위치 |
미디어 아이템이 마지막으로 재생한 위치를 나타내는 속성입니다.
uri
val uri: Uri
타입 | 설명 |
---|---|
android.net.Uri | 재생 미디어의 주소 |
미디어의 주소를 나타내는 속성입니다. 재생 정보 저장소로부터 정보를 가져올 때, 이 미디어 주소를 사용합니다.
PlaybackInfoRepository
import com.newin.nplayer.sdk.PlaybackInfoRepository
class PlaybackInfoRepository(context: Context)
재생 정보 저장소를 나타내는 클래스입니다. 미디어의 uri를 알고 있으면, 아래처럼, 속성 shared와 메서드 findBy()를 사용하여 해당 uri의 미디어 아이템 정보를 가져올 수 있습니다.
정적 속성
shared
companion object {
val shared: PlaybackInfoRepository
}
타입 | 설명 | 설정 |
---|---|---|
PlaybackInfoRepository | 현재 재생 정보 저장소에 접근하기 위한 속성 | 불가능 |
재생 정보 저장소에 접근하기 위한 정적 속성입니다. 아래에 언급되는 메서드를 호출할 때, PlaybackInfoRepository.shared를 사용하여 접근할 수 있습니다.
메서드
findBy
fun findBy(uri: Uri): PlaybackInfo?
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
uri | android.net.Uri | PlaybackInfo? | 미디어 uri를 입력하여 재생 정보를 반환 |
SubtitleTrack
import com.newin.nplayer.sdk.extensions.SubtitleTrack
class SubtitleTrack : Track
Track 클래스를 확장한 클래스로, 자막 트랙에 사용되는 클래스입니다.
아래와 같은 MIME type의 자막 트랙에 대해 다중 자막 선택을 지원합니다.
MimeTypes.TEXT_VTT | "application/vtt" |
MimeTypes.APPLICATION_SUBRIP | "application/x-subrip" |
SAMI | "application/smil+xml" |
TimeRange
import com.newin.nplayer.sdk.utils.TimeRange
data class TimeRange(val start: Duration, val duration: Duration)
buffered 속성에서 사용되는 데이터 클래스입니다.
생성자 파라미터
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
start | java.time.Duration | 구간 시작 위치 값 | O |
duration | java.time.Duration | 구간 길이 값 | O |
TimeRanges
import com.newin.nplayer.sdk.utils.TimeRanges
data class TimeRanges
buffered 속성에서 사용되는 데이터 클래스입니다.
속성
length
val length: Int
타입 | 설명 |
---|---|
Int | 구간 범위 값들의 개수를 반환 |
메서드
start
fun start(index: Int): Duration
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
index | Int | java.time.Duration | index 번째 데이터의 구간 시작 위치를 반환 |
end
fun end(index: Int): Duration
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
index | Int | java.time.Duration | index 번째 데이터의 구간 종료 위치를 반환 |
Track
import com.newin.nplayer.sdk.extensions.Track
sealed class Track
AudioTrack, SubtitleTrack, VideoTrack에 사용하기 위한 클래스입니다.
속성
type
val type: @TrackType Int
@interface TrackType {}
static int TRACK_TYPE_AUDIO = 1;
static int TRACK_TYPE_VIDEO = 2;
static int TRACK_TYPE_TEXT = 3;
타입 | 설명 |
---|---|
@TrackType Int | 현재 트랙의 종류를 나타냄 |
현재 트랙이 오디오 트랙(1) 인지, 비디오 트랙(2) 인지, 자막 트랙(3) 인지 알려주는 속성입니다.
format
val format: Format
현재 트랙의 format을 나타내는 속성입니다.
isSelected
val isSelected: Boolean
타입 | 설명 |
---|---|
Boolean | 트랙의 선택 여부 |
현재 트랙이 선택되었는지 여부를 나타내는 속성입니다.
Uri
import android.net.Uri
android.net.Uri 클래스를 확장하여, Uri를 미디어 아이템으로 만드는 메서드를 제공합니다.
메서드
toMediaItem
fun Uri.toMediaItem(): MediaItem
uri를 미디어 아이템으로 만드는 메서드입니다.
VideoTrack
import com.newin.nplayer.sdk.extensions.VideoTrack
class VideoTrack : Track
Track 클래스를 확장한 클래스로, 비디오 트랙에 사용되는 클래스입니다.
WatermarkSettings
import com.newin.nplayer.sdk.WatermarkSettings
data class WatermarkSettings
워터마크 설정을 나타내는 데이터 클래스입니다.
속성
이름 | 타입 | 설명 | 비고 |
---|---|---|---|
duration | java.time.Duration | 유지 시간 | |
interval | java.time.Duration | 출력 주기 | |
position | WatermarkSettings.Position | 워터마크의 위치 | |
text | String | 워터마크 출력 내용 | |
textColor | String | 글자 색상 | 예: #ff00ff |
textOpacity | Double | 글자의 불투명도 | 범위: 0.0~1.0 |
textSize | Double | 글자 크기 | 범위: 0.0~1.0 |
열거형
WatermarkSettings.Position
import com.newin.nplayer.sdk.WatermarkSettings.Position
워터마크의 위치를 나타내는 열거형입니다.
이름 | 위치 |
---|---|
TopLeft | 좌측 상단 고정 |
TopRight | 우측 상단 고정 |
BottomLeft | 좌측 하단 고정 |
BottomRight | 우측 하단 고정 |
Center | 가운데 고정 |
RandomInRegion1 | 좌측 상단 영역에서 무작위 |
RandomInRegion2 | 가운데 상단 영역에서 무작위 |
RandomInRegion3 | 우측 상단 영역에서 무작위 |
RandomInRegion4 | 좌측 하단 영역에서 무작위 |
RandomInRegion5 | 가운데 하단 영역에서 무작위 |
RandomInRegion6 | 우측 하단 영역에서 무작위 |
RandomInRegionAll | 전체 영역에서 무작위 |
열거형
DownloadItem.FailedReason
import com.newin.nplayer.sdk.DownloadItem.FailedReason
enum class FailedReason
다운로드가 실패한 이유를 나타내는 열거형입니다.
AccessRightsExpired
DownloadItem.FailedReason.AccessRightsExpired
접근 권한이 만료된 경우
CannotResume
DownloadItem.FailedReason.CannotResume
다운로드를 재개할 수 없는 경우
DeviceLimitExceeded
DownloadItem.FailedReason.DeviceLimitExceeded
기기 제한이 초과한 경우
DeviceNotFound
DownloadItem.FailedReason.DeviceNotFound
외부 저장소(SD 카드)가 없는 경우
FileAlreadyExists
DownloadItem.FailedReason.FileAlreadyExists
파일이 이미 존재하는 경우
FileError
DownloadItem.FailedReason.FileError
저장소와 관련된 문제가 있는 경우
HttpDataError
DownloadItem.FailedReason.HttpDataError
HTTP 레벨에서 오류가 발생한 경우
InsufficientSpace
DownloadItem.FailedReason.InsufficientSpace
저장 공간이 부족한 경우
NoAccessRights
DownloadItem.FailedReason.NoAccessRights
접근 권한이 없는 경우
TooManyRedirects
DownloadItem.FailedReason.TooManyRedirects
리다이렉션이 많이 일어난 경우
Unauthorized
DownloadItem.FailedReason.Unauthorized
권한이 없는 경우
UnhandledHttpCode
DownloadItem.FailedReason.UnhandledHttpCode
다운로드 매니저가 처리할 수 없는 HTTP 코드를 받은 경우
Unknown
DownloadItem.FailedReason.Unknown
다운로드가 알 수 없는 이유와 함께 완료된 경우
DownloadItem.Status
import com.newin.nplayer.sdk.DownloadItem.Status
enum class Status
아이템의 현재 다운로드 상태를 나타냅니다.
Completed
DownloadItem.Status.Completed
다운로드를 완료한 상태
Downloading
DownloadItem.Status.Downloading
다운로드 중인 상태
Failed
DownloadItem.Status.Failed
다운로드를 실패한 상태
Paused
DownloadItem.Status.Paused
다운로드를 일시 정지한 상태
Pending
DownloadItem.Status.Pending
다운로드를 할 수 있는 상태 혹은 다운로드를 기다리는 상태
MediaPlayerActivityConfiguration.ScreenOrientationLock
import com.newin.nplayer.sdk.MediaPlayerActivityConfiguration.ScreenOrientationLock
enum class ScreenOrientationLock
화면 방향 고정 상태를 나타내는 열거형입니다.
Portrait
MediaPlayerActivityConfiguration.ScreenOrientationLock.Portrait
세로 방향으로 고정
Landscape
MediaPlayerActivityConfiguration.ScreenOrientationLock.Landscape
가로 방향으로 고정
Off
MediaPlayerActivityConfiguration.ScreenOrientationLock.Off
고정하지 않음
MediaPlayerActivityConfiguration.SubtitleDisplayPosition
import com.newin.nplayer.sdk.MediaPlayerActivityConfiguration.SubtitleDisplayPosition
enum class SubtitleDisplayPosition
현재 미디어의 자막 출력 위치를 나타냅니다.
OnScreen
MediaPlayerActivityConfiguration.SubtitleDisplayPosition.OnScreen
화면 위에 자막을 출력하는 모드
OnVideo
MediaPlayerActivityConfiguration.SubtitleDisplayPosition.OnVideo
비디오 위에 자막을 출력하는 모드
PlaybackFinishReason
import com.newin.nplayer.sdk.PlaybackFinishReason
enum class PlaybackFinishReason
재생 종료의 원인을 나타내는 열거형입니다.
Ended
PlaybackFinishReason.Ended
미디어가 끝까지 재생되어 종료된 경우
Error
PlaybackFinishReason.Error
오류로 인해 재생이 종료된 경우
UserExited
PlaybackFinishReason.UserExited
다른 미디어로 이동하거나 미디어를 종료하는 등 사용자가 미디어 재생을 제어한 경우
미디어 플레이어 화면
설정
앞에 보여준 사용 방법대로 구현하여 presentMediaPlayer를 호출하면, 안드로이드 SDK의 미디어 플레이어 뷰를 사용할 수 있습니다.
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.media3.common.MediaItem
import com.newin.nplayer.sdk.extensions.presentMediaPlayer
import com.newin.nplayer.sdk.extensions.startMediaPlayerService
import com.newin.nplayer.sdk.withDrmConfiguration
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startMediaPlayerService("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx") // App 아이디
}
fun openMedia(uri: String) {
val mediaItem = MediaItem.fromUri(uri) // "https://example.com/media.mp4"
.withDrmConfiguration(
appId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx", // App 아이디
userId = "사용자 아이디"
)
presentMediaPlayer(mediaItem)
}
}
컨트롤러 화면 구성
- 화면 상단에 타임바를 중심으로하여, 왼쪽에 종료 버튼과 오른쪽에 메뉴 버튼이 있습니다. 우측에 화면 속 화면 버튼이 있습니다.
- 화면 중앙의 왼쪽에는 화면 회전 잠금, 구간 반복, 트랙 설정 버튼이 있습니다.
- 화면 중앙의 오른쪽에는 재생 속도와 관련된 버튼들이 있습니다.
- 화면 하단에는 화면 잠금 버튼과 미디어 네비게이션 버튼, 화면 크기 조절 버튼이 있습니다.
화면 구성에 대한 더 자세한 설명은 아래를 참고하십시오.
상단 인터페이스
1. 종료 버튼
미디어 플레이어를 종료합니다.
2. 타임바
사용자가 현재 재생 위치를 확인 하거나, 드래그나 클릭 등을 통해서 재생 위치를 변경할 수 있습니다.
왼쪽에는 현재 재생되는 위치가 시:분:초로 표시되며, 오른쪽에는 남은 시간이 표시됩니다.
위의 예제 그림을 보면, 미디어는 지금 10분 1초 부분을 재생하고 있고, 앞으로 4분 47초 남아있음을 나타냅니다.
재생 속도가 1이 아닐 경우에는 재생 속도를 고려하여 계산된 현재 재생 위치와 남은 시간을 아래 부분에 추가적으로 표시합니다.
아래의 그림은 재생 속도가 1.8배속일 때의 타임바를 보여줍니다.
3. 메뉴 버튼
메뉴를 엽니다.
4. 화면 속 화면 버튼
화면 속 화면 모드로 전환합니다. 안드로이드 8.0(API 수준 26)부터 사용 가능합니다. 보다 자세한 설명은 메뉴 내의 화면 속 화면을 참고하세요.
메뉴
재생 목록
현재 플레이어에 있는 재생 목록을 보여줍니다.
재생 목록에 있는 미디어 아이템을 선택하면, 재생 목록 화면은 닫지 않고, 해당 미디어 아이템을 재생합니다. 현재 재생되고 있는 아이템은 오른쪽 아이콘(✓)을 통해 확인할 수 있습니다. 완료 버튼을 클릭하면 재생 목록을 닫을 수 있습니다.
북마크
저장된 북마크 리스트를 보여줍니다.
우측 상단의 완료 버튼을 클릭하면 북마크 창을 닫을 수 있습니다.
좌측 상단의 플러스(+) 버튼을 클릭하여 현재 재생되고 있는 위치를 저장할 수 있습니다. 해당 버튼을 클릭하면, 북마크 제목을 넣을 수 있는 팝업창이 뜹니다. 확인을 클릭하여 현재 재생되는 위치를 북마크로 저장할 수 있습니다. 제목을 넣지 않아도, Untitled라는 이름의 북마크가 생성됩니다.
북마크 이름을 변경하려면 해당 아이템 행의 오른쪽에 있는 연필 버튼을 클릭하면 됩니다.
북마크를 삭제 하려면 해당 아이템 행의 맨 오른쪽의 휴지통 버튼을 클릭하면 됩니다.
화면 속 화면
화면 속 화면 모드를 활성화 하는 기능입니다. 상단 인터페이스의 화면 속 화면 버튼과 같은 기능입니다. 화면 속 화면 모드로 진입하면 아래와 같이 미디어가 표시됩니다.
화면 속 화면에 싱글 클릭하면, 다음과 같은 컨트롤러 화면이 나타납니다. 해당 화면은 안드로이드 8.0이상에서 기본적으로 제공되는 화면입니다.
-
설정 버튼 화면 속 화면 모드에 대한 설정을 수정합니다.
-
X 버튼 재생중인 미디어 플레이어를 종료합니다.
-
화면 속 화면 모드 종료 버튼 화면 속 화면 모드를 종료합니다.
-
이전 버튼 현재 위치가 미디어의 처음 부분과 매우 가까울 경우에는 이전 미디어를 재생하고, 그렇지 않거나 이전 미디어가 없을 경우에는 현재 재생되는 미디어의 맨 앞으로 이동합니다.
-
재생 / 일시 정지 토글 버튼 미디어가 재생 중이면 일시 정지를 하고, 일시 정지 중이면 재생합니다.
-
다음 버튼 다음 미디어로 이동합니다. 만약 현재 미디어가 목록의 마지막이면 비활성화 됩니다.
중앙 인터페이스
1.화면 회전 잠금 버튼
화면 회전에 대한 플레이어의 기본 설정은 디바이스의 오리엔테이션에 맞춰서 화면이 회전하면서 크기가 변경되는 것입니다. 화면 회전 잠금 버튼을 활성화 시키면 디바이스가 어느 방향으로 회전해도 활성화 시켰을 당시의 화면 상태를 계속 유지합니다.
2. 구간 반복 버튼
구간 반복 버튼을 한 번 클릭하면, 구간 반복 모드로 들어갑니다. 반대로, 구간 반복 모드일 때 이 버튼을 다시 클릭하면 구간 반복 모드가 해제됩니다.
구간 반복 모드로 들어가면 화면 하단에 시작 위치와 종료 위치를 보여주는 버튼이 나타납니다. 위 그림처럼 버튼에 보이는 구간 사이를 반복하여 재생을 합니다.
버튼이 흰색일 경우는 각각 미디어의 맨 처음과 끝을 의미합니다. 버튼을 클릭하면 현재 위치를 업데이트 하며 구간 범위가 변경되고, 해당 버튼이 활성화된 색으로 변경 됩니다.
방금 눌렀던(활성화 된) 버튼을 한 번 더 클릭하면, 현재 위치를 업데이트를 하는 것이 아니라 입력된 기존 위치를 초기화 하여, 맨 처음 또는 맨 끝으로 위치가 변경되고 버튼이 흰색으로 변경됩니다.
예를 들어, 사용자가 구간 반복 버튼을 눌러 구간 반복 모드로 진입 한 뒤, 1분 20초일 때, 시작 위치 버튼을 클릭하여 시작 위치를 1분 20초로 설정합니다. 그리고, 2분 10초로 이동하여, 종료 위치 버튼을 클릭하여, 종료 위치를 2분 10초로 설정합니다. 그러면, 미디어는 1:20~2:10 구간을 반복해서 계속 재생합니다. 다시 한 번 종료 위치 버튼을 클릭하면, 2분 10초가 사라지고, 해당 미디어의 전체 길이에 해당하는 위치가 버튼에 표시되고 버튼은 흰색으로 바뀝니다. 이제, 미디어 재생이 끝나면 1분 20초로 돌아가 다시 재생합니다.
3. 트랙 설정 버튼
1) 비디오 트랙 설정
현재 재생되는 비디오 트랙이 간단한 정보와 함께 화면에 표시됩니다.
비디오 트랙을 클릭하면, 비디오 트랙을 선택할 수 있는 화면이 나옵니다.
2) 오디오 트랙 설정
현재 재생되는 오디오 트랙이 간단한 정보와 함께 화면에 표시됩니다.
오디오 트랙을 클릭하면, 오디오 트랙을 선택할 수 있는 화면이 나옵니다.
3) 자막 트랙 설정
현재 재생되는 미디어에 자막이 포함되어 있는 경우, 자막 보기 스위치 버튼을 사용하여, 자막을 끄고 켤 수 있습니다.
자막 보기를 활성화 하면, 해당 미디어가 가지고 있는 모든 자막이 표시되며, 해당 자막을 클릭하여 자막 설정을 합니다.
4. 재생 속도 증가 버튼
재생 속도를 0.1배 만큼 증가 시킵니다. 버튼을 클릭하면 화면 중앙에 증가된 재생 속도를 보여줍니다. 최대 4.0배 까지 가능합니다.
5. 재생 속도 복구 버튼
현재 재생 속도를 보여줍니다. 버튼을 클릭하면 재생 속도를 정상속도로, 즉 1로 되돌립니다.
6. 재생 속도를 감소 버튼
재생 속도를 0.1배 만큼 감소 시킵니다. 버튼을 클릭하면 화면 중앙에 감소된 재생 속도를 보여줍니다. 최소 0.1배 까지 가능합니다.
하단 인터페이스
1. 화면 잠금 버튼
화면을 잠급니다. 화면을 길게 꾹 누르는 것과 동일합니다. 화면 잠금을 풀기 위해서는 화면 가운데 있는 자물쇠 해제 버튼을 클릭하면 됩니다.
2. 이전 버튼
6번의 다음 버튼과는 다르게, 목록에 이전 미디어가 없어도 활성화 됩니다. 현재 위치가 미디어의 처음 부분과 아주 가까울 경우에는 이전 미디어를 재생하고, 그렇지 않거나 이전 미디어가 없을 경우에는 현재 재생되는 미디어의 맨 앞으로 이동합니다.
3. 되감기 버튼
한 번 클릭할 경우, 재생 위치를 seekBackIncrement(기본값: 10초) 전으로 이동합니다. 연속해서 클릭할 경우에는 재생할 위치를 계속하여 seekBackIncrement 전으로 업데이트합니다. 길게 꾹 누를 경우 이동할 위치를 계속해서 1초 전으로 업데이트합니다. 연속해서 클릭하거나 길게 꾹 누를 경우에는, 바로 이동하지는 않고, 사용자가 동작 혹은 입력을 멈출 경우 해당 위치로 이동합니다.
4. 재생/일시 정지 토글 버튼
미디어를 재생하거나 일시 정지할 수 있습니다.
5. 빨리 감기 버튼
한 번 클릭할 경우, 재생 위치를 seekForwardIncrement(기본값: 10초) 후로 이동합니다. 연속해서 클릭할 경우에는 재생할 위치를 계속하여 seekForwardIncrement 후로 업데이트 합니다. 길게 꾹 누를 경우 이동할 위치를 계속해서 1초 후로 업데이트합니다. 연속해서 클릭하거나 길게 꾹 누를 경우에는, 바로 이동하지는 않고, 사용자가 동작 혹은 입력을 멈출 경우 해당 위치로 이동합니다.
6. 다음 버튼
목록에서 다음에 재생할 미디어가 있을 경우에만 활성화 됩니다. 이 버튼을 선택하면, 다음 미디어를 재생합니다.
7. 화면 크기 조절 버튼
총 다섯 종류의 화면을 제공합니다.
RESIZE_MODE_FIT (기본)
화면비(aspect ratio)를 유지하며, 화면에 가려지는 것이 없이 미디어를 보여줄 수 있는 최대 크기
RESIZE_MODE_FIXED_WIDTH
화면비를 유지하며, 화면 폭(width)에 딱 맞게 미디어 크기를 조절
RESIZE_MODE_FIXED_HEIGHT
화면비를 유지하며, 화면 높이(height)에 딱 맞게 미디어 크기를 조절
RESIZE_MODE_FILL
화면비를 무시하고, 화면에 빈 틈이 없이 가득 채울 수 있도록 미디어 크기를 조절
RESIZE_MODE_ZOOM
화면비를 유지하며, 화면에 빈 틈이 없이 가득 채울 수 있도록 미디어 크기를 조절
키보드, 패드를 사용한 미디어 제어
presentMediaPlayer()를 호출하여 미디어 플레이어를 생성하면, 키보드 또는 패드로 미디어를 제어할 수 있습니다.
키 또는 제스처 | 동작 |
---|---|
Directional pad의 왼쪽 키 | 10초(seekBackIncrement) 전으로 이동 |
Directional pad의 왼쪽 키를 길게 꾹 누르기 | 1초 전으로 계속 이동 |
Directional pad의 오른쪽 키 | 10초(seekForwardIncrement) 후로 이동 |
Directional pad의 오른쪽 키를 길게 꾹 누르기 | 1초 후로 계속 이동 |
스페이스 키 | 재생 / 일시 정지 토글 |
ESC 키 | 다이얼로그 닫기 |
왼쪽, 오른쪽으로 드래그 | n초 전, 후로 이동 |
왼쪽 화면에서 위, 아래로 드래그 | 화면 밝기 조정 |
오른쪽 화면에서 위, 아래로 드래그 | 볼륨 조절 |
싱글 클릭 | 컨트롤러 화면 켜기 / 끄기 |
더블 클릭 | 화면 속 화면 모드 |
길게 꾹 누르기 | 화면 잠금 모드 |
FAQ
컴파일 SDK 버전 오류 케이스
아래와 같은 오류가 생길 경우에는,
Project structure 윈도우를 열고, Modules 탭을 선택합니다. 그리고, Compile Sdk Version을 알맞게 수정하여 줍니다.
속성 업데이트가 안 되는 케이스
아래와 같이 매번 getMediaPlayer()를 사용하여 미디어 플레이어를 불러와서 속성을 업데이트 하는 경우에, 몇몇 속성들이 업데이트 되지 않는 경우가 있습니다.
Button(
onClick = {
getMediaPlayer {
it.muted = !it.muted // 토글이 되지 않음
}
}
) {
Text("Toggle mute")
}
매번 getMediaPlayer()를 사용하는 것이 아니라, 아래처럼 사용하시면 됩니다. 물론, 비동기로 미디어 플레이어를 가지고 온다는 사실은 잊지마세요.
val mediaPlayer: MediaPlayer? = null
getMediaPlayer {
mediaPlayer = it
}
Button(
onClick = {
val mediaPlayer = mediaPlayer ?: return
mediaPlayer.muted = !mediaPlayer.muted // 토글이 잘 됨
}
) {
Text("Toggle mute")
}
SDK 변경 이력
날짜 | 변경 내용 |
---|---|
2025.06.24. | |
2025.06.16. |
|
2025.06.12. |
|
2025.06.02. |
|
2025.05.07. |
|
2025.05.07. |
|
2025.04.21. |
|
2025.04.07. | |
2025.03.26. |
|
2025.03.20. | |
2025.03.07. | |
2025.02.27. |
|
2025.02.14. |
|
2025.01.23. |
|
2025.01.09. |
|
2025.01.07. |
|
2024.12.31. |
|
2024.12.06. | |
2024.11.11. |
|
2024.10.30. |
|
2024.10.10. |
|
2024.09.24. |
|
2024.09.12. |
|
2024.08.30. |
|
2024.08.20. |
|
2024.08.08. |
|
2024.07.05. |
|
2024.06.24. |
|
2024.06.21. |
|
2024.06.20. |
|
2024.06.14. |
|
2024.05.29. |
|
2024.05.24. |
|
2024.05.20. |
|
2024.05.09. |
|
2024.04.29. |
|
2024.04.24. |
|
2024.04.17. |
|
2024.04.12. |
|
2024.04.08. |
|
2024.04.03. |
|
2024.04.01. |
|
2024.03.21. |
|
2024.03.14. | |
2024.02.21. |
|
2024.02.15. |
|
2023.12.27. |
|
PlaynPlay SDK for iOS 연동 가이드
최근 수정일 | 2025.01.23. |
iOS SDK 다운로드
iOS SDK 샘플 다운로드
SDK 변경 이력은 여기에서 확인 가능합니다.
설정 방법
시작하기
이 문서는 iOS용 PlaynPlay SDK(이하 iOS SDK) 사용 방법을 안내합니다.
iOS SDK는 Minimum Deployment는 13.0입니다.
프로젝트 생성
빈 프로젝트 만들기
File > New > New Project 를 선택하여, 프로젝트를 생성합니다. (단축키: ⇧ ⌘ N)
템플릿 선택
사용하고자 하는 템플릿을 선택하고, Next 버튼을 선택하여 다음으로 진행합니다.
프로젝트 설정 및 생성
Product Name, Team, Organization Identifier, Build Identifier, Interface, Language, Storage를 설정하고, Next 버튼을 누르고 다음 화면으로 갑니다.
그리고 저장할 디렉토리를 정하고, Create 버튼을 눌러서 프로젝트를 생성합니다.
프로젝트 설정
iOS SDK 다운로드
iOS SDK 추가
왼쪽 탭에서 방금 만든 프로젝트를 클릭하면 오른쪽에 아래 그림과 같은 설정 창이 열립니다. PROJECT 아래의 아이템이 선택되어 있으면, 여기에서 iOS Deployment Target 등 원하는 설정을 해주시면 됩니다.
TARGETS 아래에 있는 아이템을 선택하시면, 아래 그림처럼 세부사항이 나타납니다. 프로젝트를 처음 만들어서 화면이 열렸을 경우에는 TARGETS 아래 아이템이 이미 선택되어 있을 수도 있습니다.
General 탭을 선택한 뒤, 아래로 쭉 내리면 Frameworks, Libraries, and Embedded Content 섹션이 있습니다. SDK를 추가하기 위해서 + 버튼을 누릅니다.
프레임워크와 라이브러리를 선택하는 팝업에서 Add Files를 선택합니다.
Open 버튼을 클릭하여 제공받은 NPlayerSDK를 추가합니다.
다음과 같이 추가가 된 것을 확인합니다.
이제 swift 파일에서 import NPlayerSDK를 입력하여 SDK를 사용할 수 있습니다.
Capability 추가
General의 오른쪽에 있는 Signing & Capabilities 탭을 클릭합니다. 그리고 + Capability 를 클릭합니다.
현재 추가되어 있지 않은 Capability 목록이 화면에 나타납니다.
커서 있는 곳에서 Background Modes를 직접 입력하여 검색을 하거나 아래 목록에서 Background Modes를 찾아서, 더블 클릭을 하시면 해당 모드가 추가 됩니다.
추가한 Background Modes에서 Audio, AirPlay, and Pictures in Picture를 활성화합니다.
Destination 선택
다시 프로젝트로 돌아간 후, Run destination을 선택합니다. My Mac을 선택하면, 실 디바이스 없이 테스트 및 디버깅을 할 수 있습니다.
사용 방법
번들 아이디 추가
콘솔에 로그인하고 설정 > 애플리케이션으로 이동합니다.
아래 Bundle ID (Package name) 섹션에서 추가 버튼을 클릭합니다.
번들 아이디를 추가합니다.
번들 아이디는 Xcode의 설정 창에서 TARGETS 아래의 아이템을 선택한 후, General 탭 내의 Identity 섹션의 Bundle Identifier 에서 확인할 수 있습니다.
혹은 Signing & Capabilities 탭 내의 Signing 섹션에서 확인 및 수정할 수 있습니다.
AppDelegate 설정
미디어 재생 서비스를 설정하는 부분을 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)에 추가합니다. 여기서 오디오 세션을 구성하고, App 아이디를 사용하여 DRM 기본 설정을 합니다.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
MediaPlaybackService.initialize(appId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx") // App 아이디
return true
}
App 아이디는 콘솔에서 설정 > 애플리케이션 > App ID > 보기를 클릭하여 확인 가능합니다. 복사하여 붙여넣기를 하실 수 있습니다.
다운로드 매니저를 사용하기 위해서 func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void)에 백그라운드 처리를 위한 부분을 추가합니다.
func application(
_ application: UIApplication,
handleEventsForBackgroundURLSession identifier: String,
completionHandler: @escaping () -> Void
) {
DownloadManager.shared.setBackgroundCompletionHandler(
sessionIdentifier: identifier,
completionHandler: completionHandler
)
}
뷰 컨트롤러 구성
하나의 미디어 열기
func openMedia() {
// DRM 설정을 합니다.
let drmConfiguration = DrmConfiguration
.Builder(
appId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
userId: "사용자 아이디"
)
.userData(userData) // 사용자 데이터(Callback URL에 전달한 데이터)
.build()
// 미디어 파일을 구성하며, DRM 설정을 합니다.
let mediaItem = MediaItem.from(url: URL(string: "https://example.com/media.mp4")!)
.buildUpon()
.drmConfiguration(drmConfiguration)
.build()
// 미디어를 엽니다.
present([mediaItem], 0)
}
재생 목록으로 열기
iOS SDK에서 제공하는 present(mediaItems:startIndex:configuration:) 메서드를 사용하면, 쉽게 재생 목록을 열 수 있습니다.
let mediaItems: [MediaItem] = [ mediaItem1, mediaItem2, mediaItem3, ...]
present(mediaItems: mediaItems, startIndex: 0)
제목을 설정하는 예제
let mediaMetadata = MediaMetadata
.Builder()
.title("제목")
.artworkUrl(URL(string:"https://www.example.com/image.jpg")!)
.build()
let mediaItem = MediaItem
.Builder(url: URL(string: "https://example.com/media.mp4")!)
.mediaMetadata(mediaMetadata)
.build()
자막을 추가하는 예제
let subtitleConfigurations = [
SubtitleConfiguration
.Builder(url: URL(string: "https://example.com/subtitle.vtt")!)
.language("언어")
.label("라벨")
.mode(.autoSelect)
.build(),
...
]
let mediaItem = MediaItem
.Builder(url: URL(string: "https://example.com/media.mp4")!)
.subtitleConfigurations(subtitleConfigurations)
.build()
Seek 기능 제한
미디어 아이템을 구성할 때, seekable(false)을 사용하여 Seek 기능을 제한할 수 있습니다.
let mediaItem = MediaItem.Builder(url: URL(string: "https://example.com/media.mp4")!)
.seekable(false)
.build()
클래스
AudioTrack
class AudioTrack : MediaTrack
MediaTrack를 확장한 클래스로, 오디오 트랙에 사용되는 클래스입니다.
속성
channels
var channels: Int! { get }
타입 | 설명 | 설정 |
---|---|---|
Int! | 채널 수 | 불가능 |
오디오 채널 수를 나타내는 속성입니다.
sampleRate
var sampleRate: Double! { get }
타입 | 설명 | 설정 |
---|---|---|
Double! | 샘플링 레이트 | 불가능 |
오디오 샘플링 레이트를 나타내는 속성입니다.
DownloadManager
다운로드 매니저를 사용하기 전에 반드시 AppDelegate 설정을 해야합니다.
func application(
_ application: UIApplication,
handleEventsForBackgroundURLSession identifier: String,
completionHandler: @escaping () -> Void
) {
DownloadManager.shared.setBackgroundCompletionHandler(
sessionIdentifier: identifier,
completionHandler: completionHandler
)
}
위와 같은 부분을 추가하여야, 앱이 백그라운드인 상태가 되어도 다운로드 관련 작업을 원활하게 진행할 수 있습니다.
class DownloadManager : NSObject, URLSessionDownloadDelegate
다운로드 매니저 클래스는 아래와 같은 속성과 메서드를 가지고 있습니다.
정적 속성
shared
static let shared: DownloadManager { get }
타입 | 설명 | 설정 |
---|---|---|
DownloadManager | 현재 활성화된 다운로드 매니저에 접근하기 위한 속성 | 불가능 |
다운로드 매니저에 접근하기 위한 정적 속성입니다. 아래에 언급되는 속성 및 메서드를 호출할 때, DownloadManager.shared를 사용하여 접근할 수 있습니다.
속성
downloadsUrl
var downloadsUrl: URL { get }
타입 | 설명 | 설정 |
---|---|---|
URL | 다운로드된 아이템이 저장되는 최상위 디렉토리 | 불가능 |
다운로드된 아이템이 저장되는 디렉토리 중 최상위 디렉토리를 나타내는 속성입니다.
items
var items: [DownloadItem] { get }
타입 | 설명 | 설정 |
---|---|---|
[DownloadItem] | 현재 다운로드 목록에 있는 아이템들 | 불가능 |
현재 다운로드 목록에 있는 아이템들을 반환하는 속성입니다.
maxParallelDownloads
var maxParallelDownloads: Int { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Int | 동시에 다운받을 수 있는 아이템 최대 개수 | 가능 | 3 |
동시에 받을 수 있는 아이템의 최대 개수를 반환하거나 설정합니다.
메서드
add(mediaItem:allowsCellularAccess:)
@discardableResult func add(
mediaItem: MediaItem,
allowsCellularAccess: Bool = true
) -> DownloadItem.Id
파라미터 | 타입 | 설명 | 필수 | 기본값 |
---|---|---|---|---|
mediaItem | MediaItem | 추가하고자 하는 미디어 아이템 | O | 없음 |
allowsCellularAccess | Bool | 다운로드 시 셀룰러 데이터 사용 여부 | X | true |
다운로드를 할 미디어 아이템을 추가합니다. 현재 다운로드가 진행되고 있는 아이템의 수가 maxParallelDownloads 보다 적으면 바로 다운로드를 시작합니다. 셀룰러 데이터 사용을 허용하지 않으려면, allowsCellularAccess를 false로 설정하여 호출하십시오.
addListener(_)
func addListener(_ listener: DownloadManager.Listener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | DownloadManager.Listener | 추가할 다운로드 매니저 리스너 |
다운로드 매니저 리스너를 추가하기 위한 메서드입니다. 리스너를 추가한 후, 해당 리스너가 더 이상 필요 없을 떄는 반드시 removeListener(_) 메서드를 사용해서 제거하세요.
itemsByStatus(_)
func itemsByStatus(_ status: DownloadItem.Status) -> [DownloadItem]
파라미터 | 타입 | 설명 |
---|---|---|
status | DownloadItem.Status | 가져오고자 하는 아이템의 다운로드 상태 |
특정 다운로드 상태의 아이템 목록을 가져오기 위해서 사용하는 메서드입니다.
pause(id:)
func pause(id: DownloadItem.Id)
파라미터 | 타입 | 설명 |
---|---|---|
id | DownloadItem.Id | 일서 정지할 다운로드 아이템의 아이디 |
다운로드를 일시 정지할 때 사용하는 메서드입니다.
pauseAll()
func pauseAll()
다운로드 목록에 있는 모든 아이템의 다운로드를 일시 정지하게 하는 메서드입니다.
remove(id:)
func remove(id: DownloadItem.Id)
파라미터 | 타입 | 설명 |
---|---|---|
id | DownloadItem.Id | 제거할 다운로드 아이템의 아이디 |
다운로드 목록에서 아이템을 지울 때 사용하는 메서드입니다.
removeAll()
func removeAll()
다운로드 아이템 목록을 모두 지우는 메서드입니다.
removeCompleted()
func removeCompleted()
다운로드가 완료된 아이템을 목록에서 모두 지우는 메서드입니다.
removeListener(_)
func removeListener(_ listener: DownloadManager.Listener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | DownloadManager.Listener | 제거할 다운로드 매니저 리스너 |
다운로드 매니저 리스너를 제거하기 위한 메서드입니다.
resume(id:)
func resume(id: DownloadItem.Id)
파라미터 | 타입 | 설명 |
---|---|---|
id | DownloadItem.Id | 계속 진행할 다운로드 아이템의 아이디 |
다운로드를 일시 정지한 아이템의 다운로드를 재개하는 메서드입니다.
resumeAll()
func resumeAll()
일시 정지한 모든 아이템의 다운로드를 재개하는 메서드입니다.
DrmConfiguration.Builder
class Builder
DRM 구성을 위해 초기 설정을 합니다. 제공받은 App 아이디와 사용자 아이디(User ID)를 입력하면 됩니다. .build()를 호출하여 구성을 완료합니다.
생성자
init(appId: String, userId: String)
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
appId | String | App 아이디 | O |
userId | String | 사용자 아이디 | O |
메서드
build()
func build() -> DrmConfiguration
추가로 입력 받은 정보로부터 DRM을 최종 구성합니다.
offlineAccessPeriod(_)
func offlineAccessPeriod(_ offlineAccessPeriod: Duration?) -> DrmConfiguration.Builder
오프라인 재생 기한을 설정합니다.
userData(_)
func userData(_ userData: [String : Any]) -> DrmConfiguration.Builder
사용자 데이터(Callback URL에 전달할 데이터)를 추가합니다.
MediaItem.Builder
class Builder
미디어 아이템에 정보를 추가하고 싶을 때는 MediaItem.Builder()를 사용하면 됩니다. 정보 추가 후에는 .build()를 호출하여야 미디어 아이템으로 사용할 수 있습니다.
생성자
init(url: URL)
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
url | URL | 미디어 주소 | O |
미디어 주소를 통해 미디어 아이템을 만들 수 있습니다.
메서드
build()
func build() -> MediaItem
Builder를 이용하여 설정한 정보에 기반하여 미디어 아이템을 만듭니다.
clippingConfiguration(_)
func clippingConfiguration(_ clippingConfiguration: ClippingConfiguration?) -> MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
clippingConfiguration | ClippingConfiguration? | 클리핑 설정 | O |
클리핑 설정을 넘겨줍니다.
disablePlaybackRate(_)
func disablePlaybackRate(_ disablePlaybackRate: Bool) -> MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
disablePlaybackRate | Bool | 배속 기능을 허용할 지에 대한 여부 | O |
배속 기능 허용 여부를 설정합니다. disablePlaybackRate(true)일 경우, 배속 기능이 제한됩니다.
drmConfiguration(_)
func drmConfiguration(_ drmConfiguration: DrmConfiguration?) -> MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
drmConfiguration | DrmConfiguration? | App 아이디와 사용자 아이디로 만든 DRM 설정 | O |
DRM 설정을 넘겨줍니다.
mediaMetadata(_)
func mediaMetadata(_ mediaMetadata: MediaMetadata?) -> MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
mediaMetadata | MediaMetadata? | 메타데이터 설정 | O |
메타데이터 설정을 넘겨줍니다.
returnUrl(_)
func returnUrl(_ returnUrl: URL?) -> MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
returnUrl | URL? | 리턴 Url | O |
리턴 Url을 설정합니다.
seekable(_)
func seekable(_ seekable: Bool) -> MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
seekable | Bool | Seek 기능을 허용할 지에 대한 여부 | O |
Seek 기능 허용 여부를 설정합니다. seekable(false)일 경우, Seek 기능이 제한됩니다.
subtitleConfigurations(_)
func subtitleConfigurations(_ subtitleConfigurations: [SubtitleConfiguration]) -> MediaItem.Builder
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
subtitleConfigurations | [SubtitleConfiguration] | 자막 설정 | O |
자막 설정을 넘겨줍니다.
url(_)
func url(_ url: URL) -> MediaItem.Builder
미디어 주소를 변경합니다.
useBookmarkCallback(_)
func useBookmarkCallback(_ useBookmarkCallback: Bool)
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
useBookmarkCallback | Bool | 북마크 콜백 사용 여부 | O |
MediaMetadata.Builder
class Builder
제목, 아트워크, 다운로드 경로를 추가할 때 사용합니다. .build()를 호출하여 구성을 완료합니다.
생성자
init()
파라미터 없이 미디어 메타데이터를 초기화합니다.
메서드
artworkUrl(_)
func artworkUrl(_ artworkUrl: URL?) -> MediaMetadata.Builder
아트워크를 추가합니다.
build()
func build() -> MediaMetadata
추가로 입력 받은 정보로부터 메타데이터를 최종 구성합니다.
title(_)
func title(_ title: String?) -> MediaMetadata.Builder
제목을 추가합니다.
MediaPlayer
class MediaPlayer
미디어 플레이어 클래스입니다. 활성화된 미디어 플레이어에 접근하는 방법은 player를 참고하세요.
속성
allowsBackgroundPlayback
var allowsBackgroundPlayback: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 백그라운드 재생을 허용할 지 여부 | 가능 | false |
백그라운드 재생을 허용할 지 여부를 나타내는 속성입니다.
allowsCellularAccess
var allowsCellularAccess: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 동영상 재생 시, 셀룰러 데이터 사용 여부 | 가능 | true |
동영상을 재생(스트리밍)할 때, 셀룰러 데이터를 사용할 지 여부를 나타내는 속성입니다.
allowsPictureInPicturePlayback
var allowsPictureInPicturePlayback: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 화면 속 화면 모드를 허용할 지 여부 | 가능 | true |
화면 속 화면 모드를 허용할 지 여부를 나타내는 속성입니다.
audioTracks
var audioTracks: [AudioTrack] { get }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
[AudioTrack] | 오디오 트랙 리스트 | 불가능 | [] |
오디오 트랙 리스트를 반환하는 속성입니다.
autoplay
var autoplay: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 미디어가 로드되었을 때, 즉 미디어가 준비가 된 즉시 재생할 것인지 결정하는 값 | 가능 | true |
미디어가 로드되었을 때, 즉시 재생이 시작되어야 하는지를 나타내는 속성입니다. true면 자동 재생합니다.
buffered
var buffered: [TimeRange] { get }
타입 | 설명 | 설정 |
---|---|---|
[TimeRange] | 현재 버퍼에 담고 있는 미디어 리소스의 범위 데이터 | 불가능 |
버퍼에 있는 미디어 리소스의 범위를 반환합니다.
canStartPictureInPictureAutomatically
var canStartPictureInPictureAutomatically: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 백그라운드에서 화면 속 화면 모드를 자동으로 시작할 지 여부 | 가능 | true |
앱이 백그라운드에 있을 때, 화면 속 화면 모드를 자동으로 시작할 수 있는지 여부를 의미하는 속성입니다.
currentMediaItem
var currentMediaItem: MediaItem? { get }
타입 | 설명 | 설정 |
---|---|---|
MediaItem? | 현재 재생 중인 미디어 아이템 | 불가능 |
현재 재생 중인 미디어 아이템을 반환하는 속성입니다.
currentMediaItemIndex
var currentMediaItemIndex: Int { get }
타입 | 설명 | 설정 |
---|---|---|
Int | 현재 재생 중인 미디어 아이템의 index | 불가능 |
현재 재생 중인 미디어 아이템의 index를 반환하는 속성입니다.
currentSrc
var currentSrc: URL? { get }
미디어 리소스의 uri를 반환하는 속성입니다.
currentTime
var currentTime: Duration { get set }
현재 재생 위치를 Duration 단위로 나타내는 속성입니다.
defaultMuted
var defaultMuted: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 음소거 기본 설정 상태 | 가능 | false |
오디오의 음소거 기본 설정을 나타내는 속성입니다.
defaultPlaybackRate
var defaultPlaybackRate: Float { get set }
타입 | 설명 | 설정 | 범위 | 기본값 |
---|---|---|---|---|
Float | 미디어의 기본 재생 속도 | 가능 | 0.1~4.0 | 1.0 |
미디어의 기본 재생 속도를 나타내는 속성입니다.
duration
var duration: Duration { get }
타입 | 설명 | 설정 |
---|---|---|
Duration | 현재 미디어의 전체 길이 | 불가능 |
현재 미디어 길이를 반환하는 속성입니다. 재생 가능한 미디어가 없을 경우 0에 해당하는 Duration을 반환합니다.
ended
var ended: Bool { get }
타입 | 설명 | 설정 |
---|---|---|
Bool | 재생 목록에서 마지막 미디어의 재생 완료 여부를 반환 | 불가능 |
미디어 재생 완료 여부를 반환하는 속성입니다.
error
var error: Error? { get }
타입 | 설명 | 설정 |
---|---|---|
Error? | 에러를 반환 | 불가능 |
최근 발생한 에러를 반환하는 속성입니다.
isFlippedHorizontally
var isFlippedHorizontally: Bool { get }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 화면이 좌우 반전 상태인지 여부 | 불가능 | false |
현재 재생 중인 미디어 화면이 좌우 반전 상태인지 여부를 반환하는 속성입니다
isFlippedVerticaly
var isFlippedVerticaly: Bool { get }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 화면이 상하 반전 상태인지 여부 | 불가능 | false |
현재 재생 중인 미디어 화면이 상하 반전 상태인지 여부를 반환하는 속성입니다.
isPictureInPictureActive
var isPictureInPictureActive: Bool { get }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 화면 속 화면 모드인지 여부 | 불가능 | false |
현재 재생되는 미디어가 화면 속 화면 모드인지를 반환하는 속성입니다.
isPictureInPicturePossible
var isPictureInPicturePossible: Bool { get }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 현재 화면 속 화면 모드로 전환할 수 있는지 여부 | 불가능 | false |
미디어가 화면 속 모드로 전환할 수 있는지 여부를 반환하는 속성입니다.
isSeekable
var isSeekable: Bool { get }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 미디어 아이템에서 위치를 이동할 수 있는지 여부 | 불가능 | false |
미디어에서 seek을 사용할 수 있는지 여부를 반환하는 속성입니다. 미디어의 길이가 파악이 될 경우 true를 반환합니다.
isSubtitlesVisible
var isSubtitlesVisible: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 화면에 자막 표시 여부 | 가능 | true |
화면에 자막 표시 여부. true나 false값을 넣어서 자막을 켜고 끌 수 있습니다.
loop
var loop: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 미디어 반복 재생 여부를 결정하는 값 | 가능 | false |
미디어 재생이 끝났을 때 다시 처음부터 재생할 지 여부를 나타내는 속성입니다.
maxSeekToPreviousPosition
var maxSeekToPreviousPosition: Duration { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Duration | 하단 인터페이스의 이전 버튼을 클릭하였을 때, 이전 미디어로 갈 것인지 현재 미디어의 맨 앞으로 갈 것인지에 대한 기준 값. 이 값보다 작으면 이전 미디어로 이동하고, 그렇지 않으면 현재 미디어의 맨 앞으로 이동합니다. | 가능 | 3초 |
이전 버튼을 눌렀을 때, 이전 미디어로 갈 수 있는 최대 허용 위치를 나타내는 속성입니다. 메서드 seekToPrevious()에서 사용됩니다.
mediaItems
var mediaItems: [MediaItem] { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
[MediaItem] | 현재 재생 목록에 있는 미디어 아이템들 | 가능 | [] |
미디어 아이템들의 목록을 나타내는 속성입니다.
muted
var muted: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 오디오 음소거 여부 | 가능 | false |
음소거 여부를 나타내는 속성입니다. 음소거면 true, 아니면 false입니다.
paused
var paused: Bool { get }
타입 | 설명 | 설정 |
---|---|---|
Bool | 미디어 일시 정지 여부 | 불가능 |
미디어가 일시 정지 상태인지 반환하는 속성입니다.
playbackRate
var playbackRate: Float { get set }
타입 | 설명 | 설정 | 범위 | 기본값 |
---|---|---|---|---|
Float | 재생 속도 | 가능 | 0.1~4.0 | 1.0 |
미디어의 재생 속도를 나타내는 속성입니다. 정상 속도는 1.0이고, 1보다 작을 때는 느리게, 1보다 클 때는 빠르게 재생합니다. 이 때, 오디오 피치 유지 여부는 preservesPitch의 값으로 제어할 수 있습니다.
playbackState
var playbackState: MediaPlayer.PlaybackState { get }
타입 | 설명 | 설정 |
---|---|---|
MediaPlayer.PlaybackState | 미디어의 현재 상태를 나타냅니다. | 불가능 |
미디어의 현재 상태를 반환하는 속성입니다.
preservesPitch
var preservesPitch: Bool { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 오디오 피치 유지 여부 | 가능 | true |
재생 속도에 따른 오디오 피치 유지 여부를 나타내는 속성입니다. 값이 true면 재생 속도가 변해도 오디오 피치는 변함 없으며, false일 경우 재생 속도에 따라 오디오 피치가 변합니다.
repeatMode
var repeatMode: MediaPlayer.RepeatMode { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
MediaPlayer.RepeatMode | 오디오 반복 모드 상태 | 가능 | none |
반복 모드를 나타내는 속성입니다.
repeatRange
var repeatRange: MediaPlayer.RepeatRange? { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
MediaPlayer.RepeatRange? | 반복 구간 범위 | 가능 | nil |
반복 구간 범위를 나타내는 속성입니다.
scalingMode
var scalingMode: ScalingMode { get set }
타입 | 설명 | 설정 |
---|---|---|
ScalingMode | 화면 스케일링 상태 | 가능 |
현대 미디어 화면의 스케일링 상태를 나타내는 속성입니다.
seekable
var seekable: [TimeRange] { get }
타입 | 설명 | 설정 |
---|---|---|
[TimeRange] | 미디어 내 탐색 가능한 구간 범위 | 불가능 |
미디어 내에서 탐색(seek)이 가능한 구간 범위를 반환하는 속성입니다.
seekBackIncrement
var seekBackIncrement: Duration { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Duration | 현재 위치에서 전으로 이동하는 시간의 크기 | 가능 | 10초 |
seekBack()을 호출하여 이동할 때, 현재 위치에서 전으로 이동하는 시간 정도를 나타내는 속성입니다. 왼쪽 방향키를 입력 받거나 하단 인터페이스의 되감기 버튼을 클릭했을 때 이 속성을 사용합니다.
seekForwardIncrement
var seekForwardIncrement: Duration { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Duration | 현재 위치에서 후로 이동하는 시간의 크기 | 가능 | 10초 |
seekForward()을 호출하여 이동할 때, 현재 위치에서 후로 이동하는 시간 정도를 나타내는 속성입니다. 오른쪽 방향키를 입력 받거나 하단 인터페이스의 빨리 감기 버튼을 클릭했을 때 이 속성을 사용합니다.
seeking
var seeking: Bool { get }
타입 | 설명 | 설정 |
---|---|---|
Bool | 현재 미디어가 새로운 위치로 이동하고 있는지(탐색 중인지) 여부 | 불가능 |
미디어가 탐색 중인지를 반환하는 속성입니다. 현재 미디어가 새로운 위치로 이동하고 있거나 탐색중이면 true를 반환합니다.
subtitleDisplayPosition
var subtitleDisplayPosition: SubtitleDisplayPosition { get set }
타입 | 설명 | 설정 |
---|---|---|
SubtitleDisplayPosition | 현재 미디어의 자막 출력 위치 | 가능 |
현재 미디어의 자막 출력 위치를 나타내는 속성입니다.
subtitleTextFractionPosition
var subtitleTextFractionPosition: CGFloat { get set }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Double | 자막 텍스트 위치 | 가능 | 1 |
현재 미디어의 자막 텍스트 위치를 비율 단위로 나타내는 속성입니다. 이 속성은 화면에서 자막이 배치될 위치를 비율로 표현하며, 값의 범위는 0.0에서 1.0 사이입니다. 기본값은 1.0으로, 자막이 화면의 맨 아래에 위치함을 의미합니다.
subtitleTextPixelPosition
var subtitleTextPixelPosition: CGFloat { get set }
타입 | 설명 | 설정 |
---|---|---|
Double | 자막 텍스트 위치 | 가능 |
현재 미디어의 자막 텍스트 위치를 픽셀 단위로 나타내는 속성입니다.
subtitleTextSize
var subtitleTextSize: SubtitleTextSize { get set }
타입 | 설명 | 설정 |
---|---|---|
SubtitleTextSize | 자막 텍스트 크기 | 가능 |
현재 미디어의 자막 텍스트 크기를 나타내는 속성입니다.
textTracks
var textTracks: [TextTrack] { get }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
[TextTrack] | 자막 리스트 | 불가능 | [] |
자막 리스트를 반환하는 속성입니다.
videoPan
var videoPan: CGPoint { get }
타입 | 설명 | 설정 |
---|---|---|
CGPoint | 미디어 화면의 이동 정도 | 불가능 |
현재 미디어 화면이 이동된 정도를 나타내는 속성입니다.
videoSize
var videoSize: CGSize { get }
타입 | 설명 | 설정 |
---|---|---|
CGSize | width와 height를 속성으로 가지는 구조체 | 불가능 |
현재 재생 중인 미디어의 원래 크기를 반환하는 속성입니다.
videoTracks
var videoTracks: [VideoTrack] { get }
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
[VideoTrack] | 비디오 트랙 리스트 | 불가능 | [] |
비디오 트랙 리스트를 반환하는 속성입니다.
videoZoom
var videoZoom: Double { get }
타입 | 설명 | 설정 |
---|---|---|
Double | 비디오 확대/축소 비율 | 불가능 |
현재 비디오의 확대/축소 비율을 나타내는 속성입니다.
view
var view: UIView { get }
타입 | 설명 | 설정 |
---|---|---|
UIView | 미디어 플레이어 화면 참고 | 불가능 |
미디어 플레이어 뷰를 반환하는 속성입니다.
volume
var volume: Float { get set }
타입 | 설명 | 범위 | 설정 |
---|---|---|---|
Float | 현재 미디어의 음량 | 0.0~1.0 | 가능 |
미디어 플레이어의 음량을 나타내는 속성입니다.
메서드
addEventHandler(_)
func addEventHandler(_ handler: MediaPlayer.EventHandler) -> MediaPlayer.EventTarget
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
handler | MediaPlayer.EventHandler | MediaPlayer.EventTarget | 이벤트 핸들러, 이벤트 타겟 참고 |
이벤트 핸들러를 추가하기 위한 메서드입니다. 반환된 이벤트 타겟은 이벤트 핸들러를 제거할 목적으로 removeEventHandler(_)에서 사용할 수 있습니다. 이벤트 핸들러를 추가한 후, 해당 이벤트 핸들러가 더 이상 필요 없을 때는 반드시 removeEventHandler(_) 메서드를 사용해서 제거하세요.
addEventListener(_)
func addEventListener(_ listener: MediaPlayer.EventListener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | MediaPlayer.EventListener | 이벤트 리스너 참고 |
이벤트 리스너를 추가하기 위한 메서드입니다. 이밴트 리스너를 추가한 후, 해당 이벤트 리스너가 더 이상 필요 없을 때는 반드시 removeEventListener(_) 메서드를 사용해서 제거하세요.
containsPointInSubtitleTextBounds(_)
func containsPointInSubtitleTextBounds(_ point: CGPoint) -> Bool
파라미터 | 타입 | 설명 |
---|---|---|
point | CGPoint | 미디어 화면 내 확인할 위치 |
현재 미디어 화면에서 지정된 위치가 자막 영역에 포함되는지 여부를 반환하는 메서드입니다.
fastSeekTo(position:)
func fastSeekTo(position: Duration)
파라미터 | 타입 | 설명 |
---|---|---|
position | Duration | 재생하고자 하는 위치 값 |
입력된 시간으로 빠르게 이동하기 위한 메서드입니다. 언제나 딱 정확한 위치로 가지는 않습니다.
flipHorizontal()
func flipHorizontal()
현재 미디어 화면을 좌우 반전시키는 메서드입니다.
flipVertical()
func flipVertical()
현재 미디어 화면을 상하 반전시키는 메서드입니다.
hasNextMediaItem()
func hasNextMediaItem() -> Bool
다음에 재생할 미디어가 있는지를 반환하는 메서드입니다. 목록의 마지막이 아니거나, 전체 반복 모드일 경우 true를 반환합니다.
hasPreviousMediaItem()
func hasNextMediaItem() -> Bool
바로 앞에 재생할 미디어가 있는지를 반환하는 메서드입니다. 목록의 처음이 아니거나, 전체 반복 모드일 경우 true를 반환합니다.
load(mediaItem:)
func load(mediaItem: MediaItem)
하나의 미디어를 로드하기 위한 메서드입니다.
load(mediaItems:startMediaItemIndex:)
func load(
mediaItems: [MediaItem],
startMediaItemIndex: Int = 0
)
여러 개의 미디어를 로드하기 위한 메서드입니다. 처음으로 재생할 미디어를 정할 수 있습니다.
load(src:)
func load(src: URL)
파라미터 | 타입 | 설명 |
---|---|---|
src | URL | 로드하려는 미디어의 주소 |
URL을 사용하여 미디어를 로드하기 위한 메서드입니다.
pause()
func pause()
미디어를 일시 정지하기 위한 메서드입니다.
play()
func play()
미디어를 재생하기 위한 메서드입니다.
prepare()
func prepare()
미디어 관련 기본 설정을 하기 위한 메서드입니다. 이 메서드를 실행하면, autoplay, defaultPlaybackRate, defaultMuted 설정을 미디어 플레이어에 적용하고, 미디어를 로딩하는 과정까지 진행합니다.
removeEventHandler(_)
func removeEventHandler(target: MediaPlayer.EventTarget)
파라미터 | 타입 | 설명 |
---|---|---|
target | MediaPlayer.EventTarget | 이벤트 핸들러, 이벤트 타겟 참고 |
addEventHandler(_)로 추가된 이벤트 핸들러를 제거하기 위한 메서드입니다.
removeEventListener(_)
func removeEventListener(_ listener: MediaPlayer.EventListener)
파라미터 | 타입 | 설명 |
---|---|---|
listener | MediaPlayer.EventListener | 이벤트 리스너 참고 |
addEventListener(_)로 추가된 이벤트 리스너를 제거하기 위한 메서드입니다.
resumePlayback()
func resumePlayback()
suspendPlayback 호출로 인한 일시 정지된 재생을 재기합니다.
seekBack()
func seekBack()
현재 위치에서 속성 seekBackIncrement 만큼 전으로 이동하기 위한 메서드입니다.
seekBack(increment:)
func seekBack(increment: Duration)
파라미터 | 타입 | 설명 |
---|---|---|
increment | Duration | 새로운 위치는 현재 위치에서 입력된 파라미터를 뺀 결과입니다. 즉, 음수 입력 시, 입력된 파라미터의 절대값만큼 후로 이동합니다. |
현재 위치에서 입력된 시간 전으로 이동하기 위한 메서드입니다.
seekForward()
func seekForward()
현재 위치에서 속성 seekForwardIncrement 만큼 후로 이동하기 위한 메서드입니다.
seekForward(increment:)
func seekForward(increment: Duration)
파라미터 | 타입 | 설명 |
---|---|---|
increment | Duration | 새로운 위치는 현재 위치에서 입력된 파라미터를 더한 결과입니다. 즉, 음수 입력 시, 입력된 파라미터의 절대값만큼 되돌아갑니다. |
현재 위치에서 입력된 시간 후로 이동하기 위한 메서드입니다.
seekTo(position:)
func seekTo(position: Duration)
파라미터 | 타입 | 설명 |
---|---|---|
position | Duration | 입력된 값으로 재생 위치를 이동합니다. |
입력된 시간 위치로 정확하게 이동하기 위한 메서드입니다.
seekTo(mediaItemIndex:position:)
func seekTo(mediaItemIndex: Int, position: Duration = .indefinite)
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
mediaItemIndex | Int | 재생 목록에서 미디어 아이템의 index | O |
position | Duration | 해당 미디어에서 재생하고하 하는 위치 입력하지 않으면, 마지막에 재생했던 위치에서 시작합니다. | X |
현재 재생 중인 미디어를 정지하고 다른 미디어를 재생하기 위한 메서드입니다. 재생 목록의 index만 파라미터로 넘겨줄 경우에는, 해당 미디어의 마지막에 재생했던 위치에서 시작합니다.
seekToNext()
func seekToNext()
seekToNexMediaItemt()와 동일합니다.
seekToNextMediaItem()
func seekToNextMediaItem()
다음으로 재생할 미디어가 있을 경우 현재 재생중인 미디어를 정지하고 다음 미디어로 이동하는 메서드입니다. 목록의 맨 뒤에 위치한 미디어이지만 전체 반복 모드일 경우, 목록의 맨 앞으로 이동합니다.
seekToPrevious()
func seekToPrevious()
현재 재생 위치가 속성 maxSeekToPreviousPosition보다 앞이면 이전 미디어로 이동합니다.(참고: seekToPreviousMediaItem()) 그렇지 않으면 현재 미디어의 맨 앞으로 이동합니다.
seekToPreviousMediaItem()
func seekToPreviousMediaItem()
앞에 재생할 미디어가 있을 경우 현재 재생중인 미디어를 정지하고 이전 미디어로 이동하는 메서드입니다. 목록의 맨 앞에 위치한 미디어일 경우, 목록의 마지막 미디어로 이동합니다.
startPictureInPicture()
func startPictureInPicture()
화면 속 화면 모드를 시작하는 메서드입니다.
startScrubbing(position:fast:)
func startScrubbing(position: Duration, fast: Bool = false)
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
position | Duration | 시작 위치 | O |
fast | Bool | true이면 빠른 이동, false이면 정확한 이동을 합니다. | O |
스크러빙을 시작합니다.
stop()
func stop()
미디어를 완전 종료할 때 부르는 메서드입니다. MediaPlayer가 종료되면 자동으로 호출됩니다.
stopPictureInPicture()
func stopPictureInPicture()
화면 속 화면 모드를 종료하는 메서드입니다.
stopScrubbing(position:)
func stopScrubbing(position: Duration)
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
position | Duration | 시작 위치 | O |
스크러빙을 종료합니다.
suspendPlayback()
func suspendPlayback()
재생을 일시 정지합니다. 다시 재생을 재기하려면 resumePlayback을 호출합니다.
updateScrubbing(position:)
func updateScrubbing(position: Duration)
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
position | Duration | 시작 위치 | O |
스크러빙 위치를 갱신합니다.
zoomVideo(_)
func zoomVideo(_ zoom: Double)
파라미터 | 타입 | 설명 |
---|---|---|
zoom | Double | 비디오 확대/축소 비율 |
비디오 확대/축소할 때 사용하는 메서드입니다.
zoomVideo(_:pivot:)
func zoomVideo(_ zoom: Double, pivot: CGPoint)
파라미터 | 타입 | 설명 | 필수 |
---|---|---|---|
zoom | Double | 비디오 확대/축소 비율 | O |
pivot | CGPoint | 중심 좌표 | O |
비디오 확대/축소가 적용될 중심이 되는 좌표를 지정하여 확대/축소할 때 사용하는 메서드입니다.
열거형
PlaybackState
enum PlaybackState
현재 미디어 상태를 나타내는 열거형입니다.
RepeatMode
enum RepeatMode
현재 미디어의 반복 모드 상태를 나타내는 열거형입니다.
ScalingMode
enum ScalingMode
현재 미디어 화면의 스케일링 상태를 나타냅니다.
SubtitleDisplayPosition
enum SubtitleDisplayPosition
현재 미디어의 자막 출력 위치를 나타냅니다.
구조체
RepeatRange
struct RepeatRange: Equatable
반복 모드에서 사용되는 구조체입니다.
MediaPlayer.EventTarget (MediaPlayerEventTarget)
extension MediaPlayer {
public typealias EventTarget = MediaPlayerEventTarget
}
class MediaPlayerEventTarget : Equatable
addEventHandler(_)로 추가된 이벤트 핸들러를 removeEventHandler(_)를 통해 삭제하기 위해서 사용되는 클래스입니다.
MediaPlayerViewController
class MediaPlayerBaseViewController : UIViewController
커스텀 뷰 컨트롤러에서 사용하는 베이스 클래스입니다.
커스텀 뷰 컨트롤러 구현은 샘플을 참고하세요.
속성
player
var player: MediaPlayer
타입 | 설명 | 설정 |
---|---|---|
MediaPlayer | 미디어 플레이어 | 불가능 |
미디어 플레어 인스턴스입니다.
interfaceOrientationMask
var interfaceOrientationMask: UIInterfaceOrientationMask
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
UIInterfaceOrientationMask | 화면 방향 | 가능 | .all |
화면의 방향을 설정합니다.
메서드
load(mediaItems:startMediaItemIndex:)
func load(
mediaItems: [MediaItem],
startMediaItemIndex: Int = 0
)
여러 개의 미디어를 로드하기 위한 메서드입니다. 처음으로 재생할 미디어를 정할 수 있습니다.
close()
func close()
뷰 컨트롤러를 닫습니다. UIViewController의 dismiss를 호출한 것과 동일합니다.
MediaPlayerViewController
class MediaPlayerViewController : UIViewController, UIGestureRecognizerDelegate
미디어 플레이어 뷰 컨트롤러입니다. 아래와 같은 속성과 구조체를 제공합니다.
활성화된 미디어 플레이어 뷰 컨트롤러에 접근하는 방법은 mediaPlayerViewController를 참고하세요.
속성
configuration
private(set) var configuration: MediaPlayerViewController.Configuration
타입 | 설명 | 설정 |
---|---|---|
MediaPlayerViewController.Configuration | 설정 값 | 불가능 |
현재 설정을 나타내는 속성입니다.
controllerShowTimeout
var controllerShowTimeout: Duration = .seconds(5)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Duration | 컨트롤러를 보여줄 최대 시간 | 가능 | 5초 |
player
private(set) var player: MediaPlayer
타입 | 설명 | 설정 |
---|---|---|
MediaPlayer | 현재 활성화 된 미디어 플레이어 | 불가능 |
미디어 플레이어에 접근할 수 있는 속성입니다.
구조체
MediaPlayerViewController.Configuration
struct Configuration
미디어 플레이어의 설정을 도와주는 구조체입니다.
MediaTrack
class MediaTrack : CustomStringConvertible
AudioTrack, TextTrack, VideoTrack의 부모 클래스입니다.
속성
codecName
var codecName: String { get }
타입 | 설명 | 설정 |
---|---|---|
String | 코덱 이름 | 불가능 |
isSelected
var isSelected: Bool { get set }
타입 | 설명 | 설정 |
---|---|---|
Bool | 현재 트랙이 선택(활성화) 되었는지 여부 | 가능 |
label
var label: String? { get }
타입 | 설명 | 설정 |
---|---|---|
String? | 라벨 | 불가능 |
language
var language: String? { get }
타입 | 설명 | 설정 |
---|---|---|
String? | 언어 | 불가능 |
PlaybackInfoRepository
class PlaybackInfoRepository
재생 정보 저장소를 나타내는 클래스입니다. 미디어의 uri를 알고 있으면, 정적 속성 shared와 메서드 find(by:)를 사용하여 해당 url의 미디어 아이템 정보를 가져올 수 있습니다.
정적 속성
shared
static var shared: PlaybackInfoRepository
타입 | 설명 | 설정 |
---|---|---|
PlaybackInfoRepository | 현재 재생 정보 저장소에 접근하기 위한 속성 | 불가능 |
재생 정보 저장소에 접근하기 위한 정적 속성입니다. 아래에 언급되는 메서드를 호출할 때, PlaybackInfoRepository.shared를 사용하여 접근할 수 있습니다.
메서드
find(by:)
func find(by url: URL) -> PlaybackInfo?
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
url | URL | PlaybackInfo? | 미디어 uri를 입력하여 재생 정보를 반환 |
SubtitleConfiguration.Builder
class Builder
자막을 추가할 때 사용합니다. URL을 파라미터로 넣어서 설정을 시작하고 필요한 요소를 추가합니다. .build()를 호출하여 구성을 완료합니다.
생성자
init(url: URL)
파라미터 | 타입 | 설명 |
---|---|---|
url | URL | 자막 주소 |
URL을 입력받아서 초기 설정을 합니다.
메서드
build()
func build() -> SubtitleConfiguration
입력된 구성 요소를 바탕으로 자막을 구성합니다.
label(_)
func label(_ label: String?) -> SubtitleConfiguration.Builder
파라미터 | 타입 | 설명 |
---|---|---|
label | String? | 설정하고자 하는 라벨 |
라벨을 설정합니다.
language(_)
func language(_ language: String?) -> SubtitleConfiguration.Builder
파라미터 | 타입 | 설명 |
---|---|---|
language | String? | 설정하고자 하는 언어 |
언어를 설정합니다.
mode(_)
func mode(_ mode: SubtitleConfiguration.Mode) -> SubtitleConfiguration.Builder
파라미터 | 타입 | 설명 |
---|---|---|
mode | SubtitleConfiguration.Mode | 설정하고자 하는 자막 모드 |
모드를 설정합니다.
TextTrack
class TextTrack : MediaTrack
MediaTrack을 확장한 클래스로, 자막에 사용되는 클래스입니다.
클래스 메서드
load(url:)
class func load(url: URL) async throws -> [TextTrack]
파라미터 | 타입 | 설명 |
---|---|---|
url | URL | 자막을 가져올 url |
url을 통해서, 자막을 가져오는 메서드입니다.
클래스
TextTrack.Cue
class Cue : Equatable
텍스트 큐를 나타내는 클래스입니다. 아래의 속성을 가지고 있습니다.
UIViewController
extension UIViewController
뷰 컨트롤러에서 미디어 플레이어 뷰 컨트롤러에 접근할 수 있는 속성과 미디어를 재생하는 메서드를 제공합니다.
속성
mediaPlayerViewController
var mediaPlayerViewController: MediaPlayerViewController? { get }
타입 | 설명 | 설정 |
---|---|---|
MediaPlayerViewController? | 현재 뷰 컨트롤러가 제공하는 미디어 플레이어 뷰 컨트롤러 | 불가능 |
현재 뷰 컨트롤러가 제공하는 미디어 플레이어 뷰 컨트롤러 또는 뷰 컨트롤러 계층 구조에서 그 상위 미디어 플레이어 뷰 컨트롤러 중 하나를 나타내는 속성입니다.
메서드
present(mediaItems:startIndex:configuration:)
func present(
mediaItems: [MediaItem],
startIndex: Int = 0,
configuration: configuration: MediaPlayerViewController.Configuration = .defaultConfiguration()
)
파라미터 | 타입 | 설명 | 기본값 |
---|---|---|---|
mediaItems | [MediaItem] | 미디어 아이템 목록 | 없음 |
startIndex | Int | 재생할 미디어의 인덱스 | 0 |
configuration | MediaPlayerViewController .Configuration | 설정 값 | .defaultConfiguration() |
미디어를 재생할 때 사용하는 메서드입니다. 미디어 아이템 목록과, 처음 재생할 미디어의 인덱스와 미디어 플레이어 뷰 컨트롤러의 설정을 입력받아서 현재 뷰컨트롤러에서 미디어를 재생합니다.
present(mediaItems:startIndex:configuration:)는 아래와 같이 구현되어 있으니 참고하여 확장해서 사용하십시오.
public func present(
mediaItems: [MediaItem],
startIndex: Int = 0,
configuration: MediaPlayerViewController.Configuration = .defaultConfiguration()
) {
if let playerViewController = self.mediaPlayerViewController {
playerViewController.player.load(
mediaItems: mediaItems,
startMediaItemIndex: startIndex
)
}
let playerViewController = MediaPlayerViewController.new(configuration: configuration))
self.present(playerViewController, animated: true) {
let player = playerViewController.player
player.addEventHandler(
.ended({ [weak self] in
self?.dismiss(animated: true) })
)
player.addEventHandler(
.error({ [weak playerViewController] error in
let alert = UIAlertController(
title: nil,
message: error.localizedDescription,
preferredStyle: .alert
)
alert.addAction(
UIAlertAction.init(
title: "Close",
style: .default
) { [weak self] _ in
self?.dismiss(animated: true)
}
)
playerViewController?.present(alert, animated: true)
})
)
player.load(
mediaItems: mediaItems,
startMediaItemIndex: startIndex
)
}
}
VideoTrack
class VideoTrack : MediaTrack
MediaTrack를 확장한 클래스로, 비디오 트랙에 사용되는 클래스입니다.
속성
height
var height: Int! { get }
타입 | 설명 | 설정 |
---|---|---|
Int! | 세로 길이 (픽셀) | 불가능 |
새로 길이를 나타내는 속성입니다. 단위는 픽셀입니다.
width
var width: Int! { get }
타입 | 설명 | 설정 |
---|---|---|
Int! | 가로 길이 (픽셀) | 불가능 |
가로 길이를 나타내는 속성입니다. 단위는 픽셀입니다.
구조체
DownloadItem
struct BookmarkItem
북마크 아이템을 나타내는 구조체입니다. 북마크 타이틀과 재생 위치의 정보를 가지고 있습니다.
속성
title
let title: String?
타입 | 설명 |
---|---|
String? | 타이틀 |
position
let position: Duration
타입 | 설명 |
---|---|
Duration | 재생 위치 |
ClippingConfiguration
struct ClippingConfiguration
클리핑 설정을 위한 구조체입니다.
생성자
init(startTime: Duration, endTime: Duration?)
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
startTime | Duration | 시작 시간 (초) | O |
endTime | Duration? | 끝 시간 (초) (지정하지 않으면 미디어의 끝 시간으로 설정) | X |
미디어 항목을 사용자 지정 시작 및 끝 위치로 잘라냅니다.
속성
startTime
let startTime: Duration
타입 | 설명 |
---|---|
Duration | 시작 시간 (초) |
endTime
var endTime: Duration? = nil
타입 | 설명 |
---|---|
Duration? | 끝 시간 (초) |
DownloadItem
struct DownloadItem
다운로드 아이템을 나타내는 구조체입니다. 다운로드에 대한 정보, 진행 상태 등의 정보를 가지고 있습니다.
속성
displayPath
let displayPath: String
타입 | 설명 |
---|---|
String | 다운로드된 아이템이 저장되는 상대 경로. 이때 상대 경로는 downloadsUrl를 기준으로 함 |
failedReason
let failedReason: String?
타입 | 설명 |
---|---|
String? | 다운로드가 실패한 이유 |
fromUrl
let fromUrl: URL
타입 | 설명 |
---|---|
URL | 아이템을 가져올 주소 |
다운로드할 아이템의 주소입니다.
id (DownloadItem.Id)
let id: Id
타입 | 설명 |
---|---|
Id | 다운로드 아이템의 고유 아이디 |
다운로드 아이템의 고유의 아이디입니다. 다운로드를 일시정지하거나, 다시 시작할 때, 삭제할 때 등에 사용됩니다. 이때, Id는 아래에서 보이는 것과 같이, NSObject의 typealias입니다.
extension DownloadItem {
public typealias Id = NSObject
}
progress
let progress: (Int64, Int64)?
타입 | 설명 |
---|---|
(Int64, Int64)? | 다운로드 아이템의 다운로드 진행 정도를 나타냅니다. 첫 번째는 현재까지 다운로드된 파일의 크기, 두 번째는 파일 전체 크기를 나타냅니다. |
status
let status: Status
타입 | 설명 |
---|---|
Status | 다운로드 아이템의 현재 상태 |
다운로드 아이템의 현재 상태입니다.
toUrl
let toUrl: URL
타입 | 설명 |
---|---|
URL | 다운로드된 아이템이 저장되는 절대 경로 |
다운로드된 아이템이 저장되는 절대 경로입니다.
열거형
Status
enum Status : String
아이템의 현재 다운로드 상태를 나타냅니다.
DrmConfiguration
struct DrmConfiguration
DRM 설정을 위한 구조체입니다.
생성자
init(appId: String, userId: String, userData: [String: Any])
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
appId | String | App 아이디 | O |
userId | String | 사용자 아이디 | O |
userData | [String : Any] | 사용자 데이터 | O |
App 아이디, 사용자 아이디, 사용자 데이터를 입력하여 Drm 설정을 할 수 있습니다.
속성
appId
let appId: String
타입 | 설명 |
---|---|
String | App 아이디 |
offlineAccessPeriod
var offlineAccessPeriod: Duration? = nil
타입 | 설명 |
---|---|
Duration? | 다운로드 컨텐츠의 오프라인 재생 기간 |
userData
var userData: [String : Any]
타입 | 설명 |
---|---|
[String : Any] | 사용자 데이터 |
let userId: String
타입 | 설명 |
---|---|
String | 사용자 아이디 |
메서드
buildUpon()
func buildUpon() -> DrmConfiguration.Builder
Builder를 사용하여 DRM에 대한 초기 설정을 합니다.
클래스
DrmConfiguration.Builder
class Builder
DRM 구성을 하기 위한 클래스입니다. 자세한 내용은 DrmConfiguration.Builder 문서를 참고하세요.
Duration
typealias Duration = CMTime
Duration은 시간을 표현하는 CMTime을 확장한 구조체입니다. Apple은 iOS 16.0 이상에서 지원하는 Duration을 제공하고 있지만, 현재 프로젝트에서 필수로 사용해야 하는 부분에 대한 구현을 위해 iOS SDK이 지원하는 모든 버전에서 사용 가능한 독자적인 Duration 구조체로 개발하였습니다. 이 구조체는 Duration과 유사한 속성과 메서드를 제공하여 사용법에 있어서 큰 변동이 없게 설계되었습니다. 확장한 내용 일부를 아래에 소개합니다. 더 자세한 내용은 Duration을 참고하시면 됩니다.
속성
var milliseconds: Float64 { get }
var microseconds: Float64 { get }
var nanoseconds: Float64 { get }
밀리초, 마이크로초, 나노초를 나타내는 속성입니다. 초에 해당하는 seconds는 CMTime에 포함되어 있습니다.
정적 메서드
static func seconds(_ seconds: Float64) -> CMTime
static func seconds<T: BinaryInteger>(_ seconds: T) -> CMTime
static func milliseconds<T: BinaryInteger>(_ milliseconds: T) -> CMTime
static func milliseconds(_ milliseconds: Float64) -> CMTime
static func microseconds<T: BinaryInteger>(_ microseconds: T) -> CMTime
static func microseconds(_ microseconds: Float64) -> CMTime
static func nanoseconds<T: BinaryInteger>(_ nanoseconds: T) -> CMTime
위의 정적 메서드를 이용하여, 초, 밀리초, 마이크로초, 나노초 단위를 입력하여 Duration을 만들 수 있습니다.
MediaItem
struct MediaItem
MediaItem은 미디어의 url, 자막 정보, 메타 데이터, DRM 설정 등을 가지고 있는 구조체입니다. 해당 속성에 접근하면 Agnet에서 설정한 값을 가져올 수 있습니다.
속성
clippingConfiguration
let clippingConfiguration: ClippingConfiguration?
타입 | 설명 |
---|---|
ClippingConfiguration? | 클리핑 설정 정보 |
disablePlaybackRate
var disablePlaybackRate: Bool
타입 | 설명 |
---|---|
Bool | 미디어 배속 기능 허용 여부 |
drmConfiguration
let drmConfiguration: DrmConfiguration?
타입 | 설명 |
---|---|
DrmConfiguration? | drm 설정 정보 |
mediaMetadata
let mediaMetadata: MediaMetadata?
타입 | 설명 |
---|---|
MediaMetadata? | 메타데이터 설정 정보 |
returnUrl
let returnUrl: URL?
seekable
let seekable: Bool
타입 | 설명 |
---|---|
Bool | 미디어 Seek 기능 허용 여부 |
subtitleConfigurations
let subtitleConfigurations: [SubtitleConfiguration]
타입 | 설명 |
---|---|
[SubtitleConfiguration] | 미디어 자막 정보 |
title
var title: String { get }
타입 | 설명 |
---|---|
String | 미디어 제목 |
url
let url: URL
타입 | 설명 |
---|---|
URL | 미디어 주소 |
useBookmarkCallback
var useBookmarkCallback: Bool
타입 | 설명 |
---|---|
Bool | 북마크 콜백 사용 여부 |
메서드
buildUpon()
func buildUpon() -> MediaItem.Builder
Builder를 사용하여 미디어 아이템에 대한 초기 설정을 합니다. 미디어 아이템의 기존 메타데이터나 DRM 구성을 바꿀 때 사용시면 됩니다. 미디어 아이템으로 사용하기 위해서는 반드시 .build()를 해야합니다.
정적 메서드
from(url:)
static func from(url: URL) -> MediaItem
타입 | 설명 |
---|---|
URL | URL 참고 |
미디어 주소를 파라미터로 입력하여 미디어 아이템을 구성하는 정적 함수입니다.
클래스
MediaItem.Builder
class Builder
미디어 아이템을 구성하기 위한 클래스입니다. 자세한 내용은 MediaItem.Builder를 참고하세요.
MediaMetadata
struct MediaMetadata
미디어 메타데이터를 나타내는 구조체입니다. 아래와 같은 속성 및 메서드를 제공합니다.
속성
artworkUrl
let artworkUrl: URL?
타입 | 설명 |
---|---|
URL? | 미디어 아이템의 아트워크 경로 |
expiresOn
let expiresOn: Date?
타입 | 설명 |
---|---|
Date? | 미디어 아이템의 만료 일시 |
title
let title: String?
타입 | 설명 |
---|---|
String? | 미디어 아이템 제목 |
메서드
buildUpon()
func buildUpon() -> MediaMetadata.Builder
미디어 메타 데이터를 추가하거나 수정하고자 할 때 사용하는 메서드입니다. 변경 후, .build()를 호출하여 구성을 완료합니다.
클래스
MediaMetadata.Builder
class Builder
미디어 메타데이터를 구성하기 위한 클래스입니다. 자세한 내용은 MediaMetadata.Builder를 참고하세요.
MediaPlayer.RepeatRange
struct RepeatRange: Equatable
반복 모드에서 사용되는 구조체입니다. 반복 구간의 시작 위치와 종료 위치를 설정하고 변경할 수 있습니다.
생성자
init(start: Duration, end: Duration)
속성
end
var end: Duration
타입 | 설명 |
---|---|
Duration | 반복 구간의 종료 위치 |
start
var start: Duration
타입 | 설명 |
---|---|
Duration | 반복 구간의 시작 위치 |
메서드
with(end:) -> RepeatRange
func with(end: Duration) -> MediaPlayer.RepeatRange
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
end | Duration | MediaPlayer.RepeatRange | 반복 구간 종료 위치를 변경한 뒤 구간 범위를 반환 |
with(start:) -> RepeatRange
func with(start: Duration) -> MediaPlayer.RepeatRange
파라미터 | 타입 | 반환 타입 | 설명 |
---|---|---|---|
start | Duration | MediaPlayer.RepeatRange | 반복 구간 시작 위치를 변경한 뒤 구간 범위를 반환 |
MediaPlayerViewController.Configuration
struct Configuration
미디어 플레이어의 설정을 도와주는 구조체입니다. 아래와 같은 속성, 메서드 및 열거형을 가지고 있습니다.
속성
allowsBackgroundPlayback
var allowsBackgroundPlayback: Bool = false
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 백그라운드 재생을 허용할 지 여부 | 가능 | false |
백그라운드 재생을 허용할 지 여부를 나타내는 속성입니다.
allowsCellularAccess
var allowsCellularAccess: Bool = true
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 셀룰러 데이터 사용을 허용할 지 여부 | 가능 | true |
미디어를 재생할 때, 셀룰러 데이터를 사용할 지 여부를 나타내는 속성입니다.
allowsPictureInPicturePlayback
var allowsPictureInPicturePlayback: Bool = true
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Bool | 화면 속 화면 모드를 허용할 지 여부 | 가능 | true |
화면 속 화면 모드를 허용할 지 여부를 나타내는 속성입니다.
controllerShowTimeout
var controllerShowTimeout: Duration = .seconds(5)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Duration | 컨트롤러를 자동으로 숨기는 시간 | 가능 | 5초 |
해당 시간만큼 아무 것도 입력하지 않으면 컨트롤러가 사라집니다. 0초로 설정할 경우에는 컨트롤러를 자동으로 숨기지 않습니다.
defaultPlaybackRate
var defaultPlaybackRate: Float = 1
타입 | 설명 | 설정 | 범위 | 기본값 |
---|---|---|---|---|
Float | 미디어의 기본 재생 속도 | 가능 | 0.1~4.0 | 1.0 |
미디어 재생 속도를 나타내는 속성입니다.
seekBackwardIncrement
var seekBackwardIncrement: Duration = .seconds(10)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Duration | 현재 위치에서 전으로 이동하는 시간의 크기 | 가능 | 10초 |
현재 위치에서 전으로 탐색하는 시간을 나타내는 속성입니다.
seekForwardIncrement
var seekForwardIncrement: Duration = .seconds(10)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
Duration | 현재 위치에서 후로 이동하는 시간의 크기 | 가능 | 10초 |
현재 위치에서 후로 탐색하는 시간을 나타내는 속성입니다.
screenOrientationLock
var screenOrientationLock: ScreenOrientationLock = .off
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
ScreenOrientationLock | 화면 방향 고정 상태 | 가능 | .off |
화면 방향 고정 상태를 나타내는 속성입니다.
subtitleDisplayPosition
var subtitleDisplayPosition: SubtitleDisplayPosition = .onVideo
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
SubtitleDisplayPosition | 자막 출력 위치 | 가능 | .onVideo |
자막 출력 위치를 나타내는 속성입니다.
subtitleTextPosition
var subtitleTextPosition: CGFloat = 1
타입 | 설명 | 설정 | 범위 | 기본값 |
---|---|---|---|---|
CGFloat | 자막 위치 | 가능 | 0.0~1.0 | 1.0 |
자막 위치를 나타내는 속성입니다. 이 속성은 화면에서 자막이 배치될 위치를 비율로 표현하며, 값의 범위는 0.0에서 1.0 사이입니다. 기본값은 1.0으로, 자막이 화면의 맨 아래에 위치함을 의미합니다.
subtitleTextSize
var subtitleTextSize: SubtitleTextSize = .pixel(32)
타입 | 설명 | 설정 | 기본값 |
---|---|---|---|
SubtitleTextSize | 자막 크기 | 가능 | .pixel(32) |
자막 크기를 나타내는 속성입니다. 자막 크기를 픽셀 단위 또는 비율로 나타낼 수 있습니다.
정적 메서드
defaultConfiguration()
static func defaultConfiguration() -> Configuration
기본 설정 값을 가져오는 정적 메서드입니다.
열거형
ScreenOrientationLock
enum ScreenOrientationLock: String
화면 방향 고정 상태를 나타내는 열거형입니다. 자세한 설명은 MediaPlayerViewController.Configuration.ScreenOrientationLock에서 확인하세요.
SubtitleDisplayPosition
typealias SubtitleDisplayPosition = MediaPlayer.SubtitleDisplayPosition
자막 출력 위치를 나타내는 열거형입니다. 자세한 설명은 MediaPlayer.SubtitleDisplayPosition에서 확인하세요.
SubtitleConfiguration
struct SubtitleConfiguration
자막에 관련한 구조체입니다.
생성자
init(url: URL, language: String? = nil, label: String? = nil, mode: Mode = .autoSelect)
이름 | 타입 | 설명 | 필수 | 기본값 |
---|---|---|---|---|
url | URL | 자막 주소 | O | 없음 |
language | String? | 자막 언어 | X | nil |
label | String? | 자막 라벨 | X | nil |
mode | SubtitleConfiguration.Mode | 자막 모드 | X | .autoSelect |
속성
label
let label: String?
타입 | 설명 |
---|---|
String? | 자막 라벨 |
language
let language: String?
타입 | 설명 |
---|---|
String? | 자막 언어 |
mode
let mode: Mode
타입 | 설명 |
---|---|
SubtitleConfiguration.Mode | 현재 자막 모드 |
url
let url: URL
타입 | 설명 |
---|---|
URL | 자막 주소 |
클래스
SubtitleConfiguration.Builder
class Builder
자막을 만드는 클래스입니다. 자세한 내용은 SubtitleConfiguration.Builder를 참고하세요.
열거형
SubtitleConfiguration.Mode
enum Mode
현재 자막 모드를 나타내는 열거형입니다. 자세한 내용은 SubtitleConfiguration.Mode를 참고하세요.
TimeRange
typealias TimeRange = CMTimeRange
TimeRanges는 시간 범위를 표현하는 CMTimeRange를 typealias한 구조체입니다. 자세한 설명은 CMTimeRange를 참고하시기 바랍니다. 이 구조체는 buffered와 seekable 속성에서 사용됩니다.
프로토콜
DownloadManager.Listener (DownloadManagerListener)
extension DownloadManager {
public typealias Listener = DownloadManagerListener
}
protocol DownloadManagerListener: AnyObject
DownloadManager.Listener(DownloadManagerListener)는 다운로드와 관련된 이벤트 처리를 위한 프로토콜로, 위와 같은 메서드를 제공합니다. 각각 메서드에 대한 설명은 아래 메서드를, 리스너를 추가하는 방법은 addListener(_)를 참고하시면 됩니다.
메서드
onItemAdded(_)
func onItemAdded(_ item: DownloadItem)
파라미터 | 타입 | 설명 |
---|---|---|
item | DownloadItem | 처리하고자 하는 다운로드 아이템 |
다운로드할 아이템이 목록에 추가될 때 처리를 위한 메서드입니다. 아이템을 추가할 때 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.
onItemRemoved(_)
func onItemRemoved(_ item: DownloadItem)
파라미터 | 타입 | 설명 |
---|---|---|
item | DownloadItem | 처리하고자 하는 다운로드 아이템 |
다운로드 목록에서 아이템을 제거할 때 처리를 위한 메서드입니다. 아이템이 제거될 때 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.
onProgressUpdated(_)
func onProgressUpdated(_ item: DownloadItem)
파라미터 | 타입 | 설명 |
---|---|---|
item | DownloadItem | 처리하고자 하는 다운로드 아이템 |
다운로드가 진행되는 매순간을 처리하기 위한 메서드입니다. 아이템 다운로드가 진행됨에 따라 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.
onStatusChanged(_)
func onStatusChanged(_ item: DownloadItem)
파라미터 | 타입 | 설명 |
---|---|---|
item | DownloadItem | 처리하고자 하는 다운로드 아이템 |
다운로드 아이템의 상태가 변경될 때 처리를 위한 메서드입니다. 즉, 다운로드를 완료하였거나, 실패하였을 때 등의 상황에 추가적인 처리가 필요할 경우에 이 메서드를 사용할 수 있습니다.
MediaPlayer.EventListener (MediaPlayerListener)
extension MediaPlayer {
public typealias Listener = MediaPlayerListener
}
protocol MediaPlayerListener : AnyObject
EventListener는 이벤트 처리를 위한 프로토콜로, 위와 같은 메서드를 제공합니다. 각각 메서드에 대한 설명은 메서드를, 사용 방법은 addEventListener(_)를 참고하시면 됩니다. 이밴트 리스너를 추가한 후, 해당 이벤트 리스너가 더 이상 필요 없을 때는 반드시 removeEventListener(_) 메서드를 사용해서 제거하세요.
이벤트 리스너를 대신하여 사용 방법에 따라서 이벤트 핸들러를 사용하여 이벤트 처리를 할 수 있습니다. 이벤트 핸들러에서 사용되는 파라미터는 이벤트 리스너의 파라미터와 동일합니다. 이벤트 핸들러의 사용 방법은 addEventHandler(_)와 케이스를 참고하시면 됩니다.
메서드
onCueChange(textCues:)
func onCueChange(textCues: [TextTrack.Cue])
파라미터 이름 | 타입 | 설명 |
---|---|---|
textCues | [TextTrack.Cue] | 자막 큐들 |
자막 큐가 변경되는 시점에 실행합니다.
onDurationChange(duration:)
func onDurationChange(duration: Duration)
파라미터 이름 | 타입 | 설명 |
---|---|---|
duration | Duration | 미디어 길이 |
미디어의 길이(duration)가 변경되는 시점에 실행합니다.
onEnded()
func onEnded()
재생 목록의 마지막 미디어의 재생이 완료된 시점에 실행합니다.
onError(error:)
func onError(error: Error)
파라미터 이름 | 타입 | 설명 |
---|---|---|
error | Error | 에러 |
에러가 발생할 때 실행합니다.
onLoadedData()
func onLoadedData()
미디어 아이템이 로드되었을 때 실행합니다.
onLoadStart()
func onLoadStart()
미디어 리소스를 로딩하기 시작할 때 실행합니다.
onMediaItemTransition(item:)
func onMediaItemTransition(item: MediaItem?)
파라미터 이름 | 타입 | 설명 |
---|---|---|
item | MediaItem | 교체된 미디어 아이템 |
미디어 아이템이 교체 되는 시점에 실행합니다.
onPause()
func onPause()
미디어가 일시 정지 상태로 진입하는 시점에 실행합니다.
onPictureInPictureActiveChange(active:)
func onPictureInPictureActiveChange(active: Bool)
파라미터 이름 | 타입 | 설명 |
---|---|---|
active | Bool | 현재 화면 속 화면 모드인 지 여부 |
화면 속 화면 모드가 켜지거나 꺼지는 시점에 실행합니다.
참고: onPictureInPictureDidStart
onPictureInPictureDidStop
onPictureInPictureWillStart
onPictureInPictureWillStop
onPictureInPicturePossibleChange(possible:)
func onPictureInPicturePossibleChange(possible: Bool)
파라미터 이름 | 타입 | 설명 |
---|---|---|
possible | Bool | 화면 속 화면 모드 사용 가능 여부 |
화면 속 화면 모드를 사용할 수 있을 때, (혹은 반대의 경우에) 실행합니다. 예를 들면, 화면 속 화면 모드 버튼을 활성화 및 비활성화 하기 위해서 필요합니다.
onPictureInPictureDidStart()
func onPictureInPictureDidStart()
화면 속 화면 모드가 시작한 후 실행합니다.
화면 속 화면 모드로 들어가면, onPictureInPictureWillStart() → onPictureInPictureActiveChange(true) → onPictureInPictureDidStart()의 순서대로 실행합니다.
onPictureInPictureDidStop()
func onPictureInPictureDidStart()
화면 속 화면 모드가 끝나면 실행합니다.
화면 속 화면 모드가 종료되면, onPictureInPictureWillStop() → onPictureInPictureActiveChange(false) → onPictureInPictureDidStop()의 순서대로 호출됩니다.
onPictureInPictureWillStart()
func onPictureInPictureWillStart()
화면 속 화면 모드가 시작하기 직전에 실행합니다.
화면 속 화면 모드로 들어가면, onPictureInPictureWillStart() → onPictureInPictureActiveChange(true) → onPictureInPictureDidStart()의 순서대로 실행합니다.
onPictureInPictureWillStop()
func onPictureInPictureWillStop()
화면 속 화면 모드가 끝나기 직전애 실행합니다.
화면 속 화면 모드가 종료되면, onPictureInPictureWillStop() → onPictureInPictureActiveChange(false) → onPictureInPictureDidStop()의 순서대로 호출됩니다.
onPlay()
func onPlay()
미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 실행합니다. 사용자가 재생 버튼을 클릭하거나 mediaPlayer.play()를 호출하는 등 플레이어에 재생 명령을 내렸을 때 등과 같이 명령을 했을 때 상황에서 이벤트 처리를 여기서 할 수 있습니다. onPlay가 실행된 이후에 onPlaying는 언제나 호출됩니다. 재생 중에 미디어를 이동하든지 재생 위치를 이동하면, 언제나 onPause -> onPlay -> onPlaying 순서로 호출됩니다.
onPlaybackFinish(mediaItem:position:duration:reason:)
public func onPlaybackFinish(
mediaItem: MediaItem,
position: Duration,
duration: Duration?,
reason: PlaybackFinishReason
)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mediaItem | MediaItem | 종료된 미디어 아이템 |
position | Duration | 마지막 재생 위치 |
duration | Duration | 미디어 길이 |
reason | PlaybackFinishReason | 미디어 종료 원인 |
미디어가 종료될 때 실행합니다. 이 때 마지막 재생 위치(position)와 미디어의 길이(duration) 값을 사용할 수 있습니다. 주의할 점은, 미디어가 로드된 후에 종료할 때만 실행된다는 것입니다. 만약 미디어가 로드되기 전에 종료되는 상황에도 사용하려면, onUnload(mediaItem:)를 참고하세요.
onPlaybackStateChange(state:)
func onPlaybackStateChange(state: MediaPlayer.PlaybackState)
파라미터 이름 | 타입 | 설명 |
---|---|---|
state | MediaPlayer.PlaybackState | 재생 상태 |
미디어 로딩 상태에 따라서, 즉, 버퍼링인지 준비가 된 상태인지, 끝이 났는지, 플레이어를 종료하였는지 등의 상황이 발생하면 실행합니다. 상황에 따른 설명은 playbackState를 참고하세요.
onPlaying()
func onPlaying()
미디어가 재생 상태로 변한 직후에 실행합니다. playing과 관련된 이벤트 핸들러는 play 이벤트 이후에 항상 호출됩니다.
onPositionDiscontinuity(oldPosition:newPosition:)
func onPositionDiscontinuity(oldPosition: Duration, newPosition: Duration)
재생 위치가 변경되는 시점에 실행합니다. 이전 위치와 이동한 위치 모두 접근이 가능합니다.
onProgress()
func onProgress()
플레이어가 리소스를 읽을 때 실행합니다.
onRateChange(rate:)
func onRateChange(rate: Float)
파라미터 이름 | 타입 | 설명 |
---|---|---|
rate | Float | 재생 속도 |
재생 속도가 변경되는 시점에 실행합니다.
onRepeatModeChange(mode:)
func onRepeatModeChange(mode: MediaPlayer.RepeatMode)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mode | MediaPlayer.RepeatMode | 반복 모드 종류 |
반복 모드가 설정되었을 때 실행합니다.
onRepeatRangeChange(range:)
func onRepeatRangeChange(range: MediaPlayer.RepeatRange?)
파라미터 이름 | 타입 | 설명 |
---|---|---|
range | MediaPlayer.RepeatRange? | 구간 반복에서의 구간 |
구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때 실행합니다.
onScalingModeChange(mode:)
func onScalingModeChange(mode: MediaPlayer.ScalingMode)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mode | MediaPlayer.ScalingMode | 화면 스케일링 상태 |
미디어 화면의 스케일링 상태가 변하는 시점에 실행합니다.
onSeeked()
func onSeeked()
seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 실행합니다.
onSeeking()
func onSeeking()
seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 실행합니다.
onScrubMove(position: Duration)
func onScrubMove(position: Duration)
파라미터 이름 | 타입 | 설명 |
---|---|---|
position | Duration | 스크러빙 위치 |
스크러빙 위치가 갱신되는 시점에 실행합니다.
onScrubStart(position: Duration)
func onScrubStart(position: Duration)
파라미터 이름 | 타입 | 설명 |
---|---|---|
position | Duration | 스크러빙 위치 |
스크러빙이 시작되는 시점에 실행합니다.
onScrubStop(position: Duration)
func onScrubStop(position: Duration)
파라미터 이름 | 타입 | 설명 |
---|---|---|
position | Duration | 스크러빙 위치 |
스크러빙이 종료되는 시점에 실행합니다.
onTimeUpdate(position:)
func onTimeUpdate(position: Duration)
파라미터 이름 | 타입 | 설명 |
---|---|---|
position | Duration | 현재 재생 위치 |
currentTime이 변경되는 시점에 실행합니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.
onUnload(mediaItem:)
func onUnload(mediaItem: MediaItem)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mediaItem | MediaItem | 종료된 미디어 아이템 |
미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때를 실행합니다.
onVideoSizeChange(size:)
func onVideoSizeChange(size: CGSize)
파라미터 이름 | 타입 | 설명 |
---|---|---|
size | CGSize | 영상 사이즈 |
미디어 아이템의 비디오 크기가 달라지는 시점에 실행합니다. 아이템을 교체하는 순간에는 (0.0, 0.0)의 값으로 바뀌는 것도 체크를 하니 참고하시기 바랍니다.
onVolumeChange(volume:muted:)
func onVolumeChange(volume: Float, muted: Bool)
파라미터 이름 | 타입 | 설명 |
---|---|---|
volume | Float | 디바이스 음량 |
muted | Bool | 음소거 여부 |
볼륨이 변경되는 시점에 실행합니다. 무음(muted) 상태가 변경될 때도 실행합니다.
onWaiting()
func onWaiting()
일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 실행됩니다. playbackState가 .buffering이 될 때 호출됩니다.
PlaybackInfo
protocol PlaybackInfo
재생 정보 저장소에 저장된 정보를 나타내는 프로토콜입니다. 재생 정보 저장소의 shared 속성과 find(by:) 메서드를 사용하여 미디어의 정보를 가져올 수 있습니다.
속성
artworkUrl
var artworkUrl: URL? { get }
타입 | 설명 |
---|---|
URL | 미디어 아이템의 아트워크 주소 |
미디어 아이템의 아트워크 경로를 나타내는 속성입니다.
duration
var duration: Duration? { get }
타입 | 설명 |
---|---|
Duration | 미디어 아이템의 전체 길이 |
미디어 아이템의 전체 길이를 나타내는 속성입니다.
expiresOn
var expiresOn: Date? { get }
타입 | 설명 |
---|---|
Date | 만료 일시 |
미디어 아이템의 만료 일시를 나타내는 속성입니다.
lastPlayedTime
var lastPlayedTime: Duration? { get }
타입 | 설명 |
---|---|
Duration | 마지막 재생 위치 |
미디어 아이템이 마지막으로 재생한 위치를 나타내는 속성입니다.
url
var url: URL { get }
타입 | 설명 |
---|---|
URL | 재생 미디어의 주소 |
미디어의 주소를 나타내는 속성입니다. 재생 정보 저장소로부터 정보를 가져올 때, 이 미디어 주소를 사용합니다.
열거형
DownloadItem.Status
enum Status : String
아이템의 현재 다운로드 상태를 나타냅니다.
케이스
completed
case completed = "Completed"
다운로드를 완료한 상태
downloading
case downloading = "Downloading"
다운로드 중인 상태
failed
case failed = "Failed"
다운로드를 실패한 상태
paused
case paused = "Paused"
다운로드를 일시 정지한 상태
pending
case pending = "Pending"
다운로드를 할 수 있는 상태 혹은 다운로드를 기다리는 상태
MediaPlayer.EventHandler (MediaPlayerEventHandler)
extension MediaPlayer {
public typealias EventHandler = MediaPlayerEventHandler
}
enum MediaPlayerEventHandler
이벤트 핸들러의 종류와 사용 방법에 대한 설명입니다. 각각 케이스에 대한 설명은 케이스를, 사용 방법은 addEventHandler(_)를 참고하시면 됩니다. 이벤트 핸들러를 추가한 후, 해당 이벤트 핸들러가 더 이상 필요 없을 때는 반드시 removeEventHandler(_) 메서드를 사용해서 제거하세요.
이벤트 핸들러를 대신하여 사용 방법에 따라서 이벤트 리스너를 사용하여 이벤트 처리를 할 수 있습니다. 이벤트 리스너에서 사용되는 파라미터는 이벤트 핸들러의 파라미터와 동일합니다. 이벤트 리스너의 사용 방법은 addEventListener(_)와 메서드를 참고하시면 됩니다.
케이스
durationChange
case durationChange((_ duration: Duration) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
duration | Duration | 미디어 길이 |
미디어의 길이(duration)가 변경되었을 때를 처리하기 위한 핸들러입니다.
ended
case ended(() -> Void)
재생 목록의 마지막 미디어의 재생이 완료된 시점에 사용하기 위한 핸들러입니다.
error
case error((_ error: Error) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
error | Error | 에러 |
에러가 발생할 때 사용하기 위한 핸들러입니다.
loadedData
case loadedData(() -> Void)
미디어 아이템이 로드되었을 때 사용하기 위한 핸들러입니다.
loadStart
case loadStart(() -> Void)
미디어 리소스를 로딩하기 시작할 때 사용하기 위한 핸들러입니다.
mediaItemTransition
case mediaItemTransition((_ item: MediaItem?) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
item | MediaItem | 교체된 미디어 아이템 |
미디어 아이템이 교체 되는 시점에 사용하기 위한 핸들러입니다.
pause
case pause(() -> Void)
미디어가 일시 정지 상태로 진입하는 시점에 사용하기 위한 핸들러입니다.
pictureInPictureActiveChange
case pictureInPictureActiveChange((_ active: Bool) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
active | Bool | 현재 화면 속 화면 모드인 지 여부 |
화면 속 화면 모드가 켜지거나 꺼지는 시점에 사용하기 위한 핸들러입니다.
참고: pictureInPictureDidStart
pictureInPictureDidStop
pictureInPictureWillStart
pictureInPictureWillStop
pictureInPicturePossibleChange
case pictureInPicturePossibleChange((_ possible: Bool) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
possible | Bool | 화면 속 화면 모드 사용 가능 여부 |
화면 속 화면 모드를 사용할 수 있을 때, (혹은 반대의 경우에) 사용하기 위한 핸들러입니다. 예를 들면, 화면 속 화면 모드 버튼을 활성화 및 비활성화 하기 위해서는 이 핸들러가 필요합니다.
pictureInPictureDidStart
case pictureInPictureDidStart(() -> Void)
화면 속 화면 모드가 시작한 후 사용하기 위한 핸들러입니다.
화면 속 화면 모드로 들어가면, pictureInPictureWillStart → pictureInPictureActiveChange(true) → pictureInPictureDidStart의 순서대로 호출됩니다.
pictureInPictureDidStop
case pictureInPictureDidStop(() -> Void)
화면 속 화면 모드가 끝나고 난 후 사용하기 위한 핸들러입니다.
화면 속 화면 모드가 종료되면, pictureInPictureWillStop → pictureInPictureActiveChange(false) → pictureInPictureDidStop의 순서대로 호출됩니다.
pictureInPictureWillStart
case pictureInPictureWillStart(() -> Void)
화면 속 화면 모드가 시작하기 직전에 사용하기 위한 핸들러입니다.
화면 속 화면 모드로 들어가면, pictureInPictureWillStart → pictureInPictureActiveChange(true) → pictureInPictureDidStart의 순서대로 호출됩니다.
pictureInPictureWillStop
case pictureInPictureWillStop(() -> Void)
화면 속 화면 모드가 끝나기 직전애 사용하기 위한 핸들러입니다.
화면 속 화면 모드가 종료되면, pictureInPictureWillStop → pictureInPictureActiveChange(false) → pictureInPictureDidStop의 순서대로 호출됩니다.
play
case play(() -> Void)
미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 사용하기 위한 핸들러입니다. 사용자가 재생 버튼을 클릭하거나 mediaPlayer.play()를 호출하는 등 플레이어에 재생 명령을 내렸을 때 등과 같이 명령을 했을 때 상황에서 이벤트 처리를 여기서 할 수 있습니다. play와 관련된 이벤트 핸들러가 호출된 이후에 playing 이벤트 핸들러는 언제나 호출됩니다. 재생 중에 미디어를 이동하든지 재생 위치를 이동하면, 언제나 pause -> play -> playing 순서로 호출됩니다.
playbackFinish
case playbackFinish(
(_ mediaItem: MediaItem, _ position: Duration, _ duration: Duration?, _ reason: PlaybackFinishReason) -> Void
)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mediaItem | MediaItem | 종료된 미디어 아이템 |
position | Duration | 마지막 재생 위치 |
duration | Duration | 미디어 길이 |
reason | PlaybackFinishReason | 미디어 종료 원인 |
미디어가 종료될 때 사용하기 위한 핸들러입니다. 이 때 마지막 재생 위치(position)와 미디어의 길이(duration) 값을 사용할 수 있습니다. 주의할 점은, 미디어가 로드된 후에 종료될 때만 사용할 수 있다는 것입니다. 만약 미디어가 로드되기 전에 종료되는 상황에도 사용하려면, Unload를 참고하세요.
playbackStateChange
case playbackStateChange((_ state: MediaPlayer.PlaybackState) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
state | MediaPlayer.PlaybackState | 재생 상태 |
미디어 로딩 상태에 따른 처리, 즉, 버퍼링인지 준비가 된 상태인지, 끝이 났는지, 플레이어를 종료하였는지 등의 상황에 따라 처리하기 위한 핸들러입니다. 상황에 따른 설명은 playbackState를 참고하세요.
playing
case playing(() -> Void)
미디어가 재생 상태로 변한 직후에 사용하기 위한 핸들러입니다. playing과 관련된 이벤트 핸들러는 play 이벤트 이후에 항상 호출됩니다.
positionDiscontinuity
case positionDiscontinuity(
(_ oldPosition: Duration, _ newPosition: Duration) -> Void
)
재생 위치가 변경되는 시점에 사용하기 위한 핸들러입니다. 이전 위치와 이동한 위치 모두 접근이 가능합니다.
progress
case progress(() -> Void)
플레이어가 리소스를 읽을 때 사용하기 위한 핸들러입니다.
rateChange
case rateChange((_ rate: Float) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
rate | Float | 재생 속도 |
재생 속도가 변경되는 시점에 사용하기 위한 핸들러입니다.
repeatModeChange
case repeatModeChange((_ mode: MediaPlayer.RepeatMode) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mode | MediaPlayer.RepeatMode | 반복 모드 종류 |
반복 모드가 설정되었을 때 처리하기 위한 핸들러입니다.
repeatRangeChange
case repeatRangeChange((_ range: MediaPlayer.RepeatRange?) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
range | MediaPlayer.RepeatRange? | 구간 반복에서의 구간 |
구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때를 처리하기 위한 핸들러입니다.
scalingModeChange
case scalingModeChange((_ mode: MediaPlayer.ScalingMode) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mode | MediaPlayer.ScalingMode | 화면 스케일링 상태 |
미디어 화면의 스케일링 상태가 변하는 시점에 사용하기 위한 핸들러입니다.
seeked
case seeked(() -> Void)
seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 사용하기 위한 핸들러입니다.
seeking
case seeking(() -> Void)
seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 사용하기 위한 핸들러입니다.
textCueChange
case textCueChange((_ textCues: [TextTrack.Cue]) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
textCues | [TextTrack.Cue] | 자막 큐들 |
자막 큐가 변경되는 시점에 사용하기 위한 핸들러입니다.
timeUpdate
case timeUpdate((_ position: Duration) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
position | Duration | 현재 재생 위치 |
currentTime이 변경되는 시점에 사용하기 위한 핸들러입니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.
unload
case unload((_ mediaItem: MediaItem) -> Void)
)
파라미터 이름 | 타입 | 설명 |
---|---|---|
mediaItem | MediaItem | 종료된 미디어 아이템 |
미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때를 처리하기 위한 핸들러입니다.
videoSizeChange
case videoSizeChange((_ size: CGSize) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
size | CGSize | 영상 사이즈 |
미디어 아이템의 비디오 크기가 달라지는 시점에 사용하기 위한 핸들러입니다. 아이템을 교체하는 순간에는 (0.0, 0.0)의 값으로 바뀌는 것도 체크를 하니 참고하시기 바랍니다.
volumeChange
case volumeChange((_ volume: Float, _ muted: Bool) -> Void)
파라미터 이름 | 타입 | 설명 |
---|---|---|
volume | Float | 디바이스 음량 |
muted | Bool | 음소거 여부 |
볼륨이 변경되는 시점에 사용하기 위한 핸들러입니다. 무음(muted) 상태가 변경될 때도 호출됩니다.
waiting
case waiting(() -> Void)
일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 사용하기 위한 핸들러입니다. playbackState가 .buffering이 될 때 호출됩니다.
MediaPlayer.PlaybackState
enum PlaybackState
현재 미디어 상태를 나타냅니다.
케이스
buffering
case buffering
미디어를 읽어오는 상태
ended
case ended
미디어가 목록의 마지막이며, 마지막 재생 위치에 도달한 상태
idle
case idle
미디어를 완전히 중지한 상태
ready
case ready
미디어가 준비된 상태 또는 로딩이 완료된 상태
MediaPlayer.RepeatMode
enum RepeatMode
현재 미디어의 반복 모드 상태를 나타냅니다.
케이스
all
case all
전체 반복 모드 상태. 마지막 미디어가 종료되면 맨 처음 미디어로 이동합니다.
none
case none
반복 모드 꺼진 상태
one
case one
하나의 미디어만 반복하는 상태
MediaPlayer.ScalingMode
enum ScalingMode
현재 미디어 화면의 스케일링 상태를 나타냅니다.
케이스
aspectFill
case aspectFill
화면비를 유지하며, 화면에 빈 틈이 없이 가득 채울 수 있는 모드
aspectFit
case aspectFit
화면비를 유지하며 화면에 가려지는 것이 없이 미디어를 보여줄 수 있는 최대 크기 모드
fill
case fill
화면비를 무시하고, 화면에 빈 틈이 없이 가득 채울 수 있는 모드
MediaPlayer.SubtitleDisplayPosition
enum SubtitleDisplayPosition
현재 미디어의 자막 출력 위치를 나타냅니다.
케이스
onScreen
case onScreen
화면 위에 자막을 출력하는 모드
onVideo
case onVideo
비디오 위에 자막을 출력하는 모드
MediaPlayer.SubtitleTextSize
public enum SubtitleTextSize
자막 크기를 나타내는 열거형입니다. 자막 크기를 픽셀 단위 또는 비율로 표현할 수 있습니다.
케이스
pixel
case pixel(CGFloat)
자막 크기를 픽셀 단위로 설정합니다.
scale
case scale(CGFloat)
자막 크기를 비율로 설정합니다.
MediaPlayerError
enum MediaPlayerError : LocalizedError
Locallized Error를 확장한 열거형으로, 에러 상태를 나타내는 열거형입니다. 에러 발생 시에, 이 열거형을 토대로 상황에 맞는 처리를 할 수 있습니다.
케이스
accessRightsExpired
case accessRightsExpired(message: String)
접근 권한이 만료된 경우
appBundleNotRegistered
case appBundleNotRegistered
등록되지 않은 앱 번들 아이디를 사용한 경우
deviceLimitExceeded
case deviceLimitExceeded(message: String)
기기 제한이 초과한 경우
licenseCheckFailed
case licenseCheckFailed(message: String)
라이선스 확인에 실패한 경우
licenseNotFound
case licenseNotFound(message: String)
라이선스를 찾을 수 없는 경우
multipleConnections
case multipleConnections(message: String)
동시 접속이 감지된 경우
network
case network(message: String)
네트워크 관련 에러가 발생한 경우
noAccessRights
case noAccessRights(message: String)
접근 권한이 없는 경우
noCellularAccess
case noCellularAccess
셀룰러 데이터 사용이 허용되지 않은 상황에서 와이파이 연결이 끊어졌는데 미디어를 재생하려는 경우
noLicenseData
case noLicenseData(message: String)
라이선스 데이터가 없는 경우
noOfflineAccessRights
case noOfflineAccessRights(message: String)
오프라인 접근 권한이 없는 경우
offlineAccessRightsExpired
case offlineAccessRightsExpired(message: String)
오프라인 접근 권한이 만료된 경우
playbackLimitExceeded
case playbackLimitExceeded(message: String)
재생 제한이 초과된 경우
screenCaptureDetected
case screenCaptureDetected(message: String)
화면 캡처가 감지된 경우
sessionClosed
case sessionClosed(message: String)
세션이 종료된 경우
sessionNotFound
case sessionNotFound(message: String)
세션을 찾을 수 없는 경우
unauthorized
case unauthorized(message: String)
권한이 없는 경우
unexpected
case unexpected(message: String)
현재 정의 되지 않은 에러가 발생한 경우
MediaPlayerViewController.Configuration.ScreenOrientationLock
enum ScreenOrientationLock : String
화면 방향 고정 상태를 나타내는 열거형입니다.
케이스
landscape
case landscape = "landscape"
가로 방향으로 고정
off
case off = "off"
고정하지 않음
portrait
case portrait = "portrait"
세로 방향으로 고정
메서드
toInterfaceOrientaion()
func toInterfaceOrientaion() -> UIInterfaceOrientationMask
현재 화면 방향 고정 상태를 UIInterfaceOrientationMask 타입으로 나타내는 메서드입니다.
portrait 일 때는, UIInterfaceOrientationMask.portrait를, landscape일 때는 UIInterfaceOrientationMask.landscape를, 화면 고정을 끄면 UIInterfaceOrientationMask.all을 반환합니다.
PlaybackFinishReason
enum PlaybackFinishReason
재생 종료의 원인을 나타내는 열거형입니다.
케이스
ended
case ended
미디어가 끝까지 재생되어 종료된 경우
error
case error
오류로 인해 재생이 종료된 경우
userExited
case userExited
다른 미디어로 이동하거나 미디어를 종료하는 등 사용자가 미디어 재생을 제어한 경우
SubtitleConfiguration.Mode
enum Mode : String
현재 자막의 모드를 나타냅니다.
케이스
autoSelect
case autoSelect = "autoSelect"
화면에 자막을 하나만 출력할 때를 나타냅니다.
다른 자막들이 모두 .hidden일 때(.showing이 없을 경우), .autoSelect로 설정된 자막 중에서 목록에서 가장 앞에 있는 자막이 선택됩니다.
만약 다른 아이템 중 하나라도 .showing으로 설정되어 있으면, .autoSelect로 설정되어 있더라도 선택되지 않습니다.
hidden
case hidden = "hidden"
해당 설정 값을 가진 자막들을 제외합니다. 즉, 화면에 출력하지 않습니다.
showing
case showing = "showing"
해당 설정 값을 가진 자막들을 선택하여 보여줍니다. 두 개 이상의 자막도 선택하여 출력가능합니다.
미디어 플레이어 화면
컨트롤러 화면 구성
- 화면 상단에 타임바를 중심으로하여, 왼쪽에 종료 버튼과 오른쪽에 메뉴 버튼이 있습니다. 우측에 화면 속 화면 버튼이 있습니다.
- 화면 중앙의 왼쪽에는 화면 회전 잠금, 구간 반복, 트랙 설정 버튼이 있습니다.
- 화면 중앙의 오른쪽에는 재생 속도와 관련된 버튼들이 있습니다.
- 화면 하단에는 화면 잠금 버튼과 미디어 네비게이션 버튼, 화면 크기 조절 버튼이 있습니다.
화면 구성에 대한 더 자세한 설명은 아래를 참고하십시오.
상단 인터페이스
1. 종료 버튼
미디어 플레이어를 종료합니다.
2. 타임바
사용자가 현재 재생 위치를 확인 하거나, 드래그나 클릭 등을 통해서 재생 위치를 변경할 수 있습니다.
왼쪽에는 현재 재생되는 위치가 시:분:초로 표시되며, 오른쪽에는 남은 시간이 표시됩니다.
위의 예제 그림을 보면, 미디어는 지금 5분 21초 부분을 재생하고 있고, 앞으로 9분 26초 남아있음을 나타냅니다.
재생 속도가 1이 아닐 경우에는 재생 속도를 고려하여 계산된 현재 재생 위치와 남은 시간을 아래 부분에 추가적으로 표시합니다.
아래의 그림은 재생 속도가 1.8배속일 때의 타임바를 보여줍니다.
3. 메뉴 버튼
메뉴를 엽니다.
4. 화면 속 화면 버튼
화면 속 화면 모드로 전환합니다. 보다 자세한 설명은 화면 속 화면을 참고하세요.
메뉴
1. 재생목록
현재 플레이어에 있는 재생 목록을 보여줍니다.
재생 목록에 있는 미디어 아이템을 선택하면, 재생 목록 화면이 닫히며, 해당 미디어 아이템을 재생합니다. 현재 재생되고 있는 아이템은 오른쪽 아이콘(✓)을 통해 확인할 수 있습니다. 완료 버튼을 클릭하면 재생 목록을 닫을 수 있습니다.
2. 북마크
저장된 북마크 리스트를 보여줍니다.
우측 상단의 완료 버튼을 클릭하면 북마크 창을 닫을 수 있습니다. 좌측 상단의 플러스(+) 버튼을 클릭하여 현재 재생되고 있는 위치를 저장할 수 있습니다. 해당 버튼을 클릭하면, 북마크 제목을 넣을 수 있는 팝업창이 뜹니다. 확인을 클릭하여 현재 재생되는 위치를 북마크로 저장할 수 있습니다. 제목을 넣지 않아도, Untitled라는 이름의 북마크가 생성됩니다.
북마크 이름을 수정하거나 삭제하려면, 해당 북마크를 꾹 누른 채로 왼쪽으로 스와이프하면 됩니다.
왼쪽 방향으로 약간 스와이프하면 아래 그림처럼 편집, 삭제 버튼이 나타납니다.
북마크 이름을 변경하려면 편집 버튼을 클릭하면 됩니다.
북마크를 삭제 하려면 삭제 버튼을 클릭하면 됩니다. 혹은 왼쪽 방향으로 끝까지 스와이프를 하게 되면, 클릭할 필요없이 바로 삭제 확인 팝업이 뜨게 됩니다.
3. 화면 속 화면
화면 속 화면 모드를 활성화 하는 기능입니다. 상단 인터페이스의 화면 속 화면 버튼과 같은 기능입니다. 화면 속 화면 모드로 진입하면 아래와 같이 미디어가 표시됩니다.
화면 속 화면에 싱글 클릭하면, 다음과 같은 컨트롤러 화면이 나타납니다.
1. X 버튼, 2. 화면 속 화면 모드 종료 버튼
화면 속 화면 모드를 종료합니다.
3. 재생 / 일시 정지 토글 버튼
미디어가 재생 중이면 일시 정지를 하고, 일시 정지 중이면 재생합니다.
중앙 인터페이스
1. 화면 회전 잠금 버튼
화면 회전에 대한 플레이어의 기본 설정은 디바이스의 오리엔테이션에 맞춰서 화면이 회전하면서 크기가 변경되는 것입니다. 화면 회전 잠금 버튼을 활성화 시키면 디바이스가 어느 방향으로 회전해도 활성화 시켰을 당시의 화면 상태를 계속 유지합니다.
2. 구간 반복 버튼
구간 반복 버튼을 한 번 클릭하면, 구간 반복 모드로 들어갑니다. 반대로, 구간 반복 모드일 때 이 버튼을 다시 클릭하면 구간 반복 모드가 해제됩니다.
구간 반복 모드로 들어가면 화면 하단에 시작 위치와 종료 위치를 보여주는 버튼이 나타납니다. 위 그림처럼 버튼에 보이는 구간 사이를 반복하여 재생을 합니다.
버튼이 기본색일 경우는 각각 미디어의 맨 처음과 끝을 의미합니다. 버튼이 기본색일 경우, 버튼을 클릭하면 현재 위치를 업데이트 하며 구간 범위가 변경되고, 해당 버튼이 활성화된 색으로 변경 됩니다.
위처럼 위치를 업데이트 했던(활성화 된) 버튼을 한 번 더 클릭하면, 현재 위치를 업데이트를 하는 것이 아니라 버튼에 표시된 위치를 초기화합니다. 구간 시작 위치일 경우에는 맨 처음으로 구간 종료 위치일 경우에는 맨 끝으로 위치가 변경되고 버튼이 기본색으로 변경됩니다.
예를 들어, 사용자가 구간 반복 버튼을 눌러 구간 반복 모드로 진입 한 뒤, 1분 20초일 때, 시작 위치 버튼을 클릭하여 시작 위치를 1분 20초로 설정합니다. 그리고 2분 10초로 이동하여, 종료 위치 버튼을 클릭하여, 종료 위치를 2분 10초로 설정합니다. 그러면 미디어는 1:20~2:10 구간을 반복해서 계속 재생합니다. 다시 한 번 종료 위치 버튼을 클릭하면, 2분 10초가 사라지고, 해당 미디어의 전체 길이에 해당하는 위치가 버튼에 표시되고 버튼은 기본색으로 바뀝니다. 이제는 미디어 재생이 끝나면 1분 20초로 돌아가 다시 재생합니다.
3. 트랙 설정 버튼
1) 비디오 트랙 설정
현재 재생되는 비디오 트랙이 간단한 정보와 함께 화면에 표시됩니다.
비디오 트랙을 클릭하면, 비디오 트랙을 선택할 수 있는 화면이 나옵니다.
2) 오디오 트랙 설정
현재 재생되는 오디오 트랙이 간단한 정보와 함께 화면에 표시됩니다.
오디오 트랙을 클릭하면, 오디오 트랙을 선택할 수 있는 화면이 나옵니다.
3) 자막 트랙 설정
현재 재생되는 미디어에 자막이 포함되어 있는 경우, 자막 보기 스위치 버튼을 사용하여, 자막을 끄고 켤 수 있습니다.
자막 보기를 활성화 하면, 해당 미디어가 가지고 있는 모든 자막이 표시되며, 해당 자막을 클릭하여 자막 설정을 합니다.
4. 재생 속도 증가 버튼
재생 속도를 0.1배 만큼 증가 시킵니다. 버튼을 클릭하면 화면 중앙에 증가된 재생 속도를 보여줍니다. 최대 4.0배 까지 가능합니다.
5. 재생 속도 복구 버튼
현재 재생 속도를 보여줍니다. 버튼을 클릭하면 재생 속도를 정상속도로, 즉 1로 되돌립니다.
6. 재생 속도를 감소 버튼
재생 속도를 0.1배 만큼 감소 시킵니다. 버튼을 클릭하면 화면 중앙에 감소된 재생 속도를 보여줍니다. 최소 0.1배 까지 가능합니다.
하단 인터페이스
1. 화면 잠금 버튼
화면을 잠급니다. 화면을 길게 꾹 누르는 것과 동일합니다. 화면 잠금을 풀기 위해서는 화면 가운데 있는 자물쇠 해제 버튼을 클릭하면 됩니다.
2. 이전 버튼
6번의 다음 버튼과는 다르게, 목록에 이전 미디어가 없어도 활성화 됩니다. 현재 위치가 maxSeekToPreviousPosition 보다 전이면 이전 미디어를 재생하고, 그렇지 않거나 이전 미디어가 없을 경우에는 현재 재생되는 미디어의 맨 앞으로 이동합니다.
3. 되감기 버튼
한 번 클릭할 경우, 재생 위치를 seekBackIncrement(기본값: 10초) 전으로 이동합니다. 연속해서 클릭할 경우에는 재생할 위치를 계속하여 seekBackIncrement 전으로 업데이트합니다. 길게 꾹 누를 경우 이동할 위치를 계속해서 1초 전으로 업데이트합니다. 연속해서 클릭하거나 길게 꾹 누를 경우에는, 바로 이동하지는 않고, 사용자가 동작 혹은 입력을 멈출 경우 해당 위치로 이동합니다.
4. 재생/일시 정지 토글 버튼
미디어를 재생하거나 일시 정지할 수 있습니다.
5. 빨리 감기 버튼
한 번 클릭할 경우, 재생 위치를 seekForwardIncrement(기본값: 10초) 후로 이동합니다. 연속해서 클릭할 경우에는 재생할 위치를 계속하여 seekForwardIncrement 후로 업데이트 합니다. 길게 꾹 누를 경우 이동할 위치를 계속해서 1초 후로 업데이트합니다. 연속해서 클릭하거나 길게 꾹 누를 경우에는, 바로 이동하지는 않고, 사용자가 동작 혹은 입력을 멈출 경우 해당 위치로 이동합니다.
6. 다음 버튼
목록에서 다음에 재생할 미디어가 있을 경우에만 활성화 됩니다. 이 버튼을 선택하면, 다음 미디어를 재생합니다.
7. 화면 크기 조절 버튼
세 종류의 화면 크기를 제공합니다.
Scaling.aspectFit (기본)
화면비를 유지하며, 화면에 가려지는 것이 없이 미디어를 보여줄 수 있는 최대 크기로 화면 전환
Scaling.aspectFill
화면비를 유지하며, 화면에 빈 틈이 없이 가득 채울 수 있도록 미디어 크기로 화면 전환
Scaling.fill
화면비를 무시하고, 화면에 빈 틈이 없이 가득 채울 수 있도록 미디어 크기로 화면 전환
키보드, 패드를 사용한 미디어 제어
미디어 플레이어에서, 키보드 또는 패드로 미디어를 제어할 수 있습니다. 사용 가능한 키 및 제스처는 아래와 같습니다.
키 또는 제스처 | 동작 |
---|---|
왼쪽 방향키 | 10초(seekBackIncrement) 전으로 이동 |
왼쪽 방향키를 길게 꾹 누르기 | 1초 전으로 계속 이동 |
오른쪽 방향키 | 10초(seekForwardIncrement 후로 이동 |
오른쪽 방향키를 길게 꾹 누르기 | 1초 후로 계속 이동 |
스페이스 키 | 재생 / 일시 정지 토글 |
ESC 키 | 다이얼로그 닫기 |
왼쪽, 오른쪽으로 드래그 | n초 전, 후로 이동 |
왼쪽 화면에서 위, 아래로 드래그 | 화면 밝기 조정 |
오른쪽 화면에서 위, 아래로 드래그 | 볼륨 조절 |
싱글 클릭 | 컨트롤러 화면 켜기 / 끄기 |
더블 클릭 | 화면 속 화면 모드 |
길게 꾹 누르기 | 화면 잠금 모드 |
FAQ
파일을 찾을 수 없다는 에러 메시지가 나옵니다.
디렉토리나 파일 이름의 대소문자를 일치시키면 됩니다.
미디어 파일이 재생되지 않습니다.
Destination을 My Mac으로 합니다. 그렇게 해도 안 되면 연락 부탁드립니다.
SDK 변경 이력
날짜 | 변경 내용 |
---|---|
2025.07.18. |
|
2025.06.26. |
|
2025.06.24. | |
2025.06.11. |
|
2025.04.21. |
|
2025.03.31. | |
2025.03.20. | |
2025.03.07. | |
2025.02.27. |
|
2025.02.05. |
|
2025.01.23. | |
2025.01.09. |
|
2025.01.07. |
|
2024.12.31. |
|
2024.12.06. | |
2024.11.11. |
|
2024.10.30. |
|
2024.08.30. |
|
2024.08.08. |
|
2024.07.05. |
|
2024.06.24. |
|
2024.06.21. |
|
2024.06.20. |
|
2024.05.24. |
|
2024.05.20. |
|
2024.05.09. |
|
2024.04.29. |
|
2024.04.24. |
|
2024.04.17. |
|
2024.04.12. |
|
2024.04.11 |
|
2024.04.03. |
|
2024.04.01. |
|
2024.03.13. | |
2024.02.21. |
|
2024.02.15. |
|
2024.01.17. |
|
Callback URL
Callback URL 등록

미디어 재생 및 다운로드 제어 등을 위해 플레이어는 고객사가 콘솔 사이트에서 세팅한 Callback URL을 호출합니다. 이후 반환되는 응답에 따라 동작합니다.
Authorization 등록

API 접근 권한을 위해 문자열 형태로 등록가능합니다. 선택사항입니다.
Interval 설정

콘솔 사이트에 세팅된 interval에 맞춰 주기적으로 Callback URL에 미디어 재생 진행 상태를 전달합니다. 이를 통해 진도율 계산 등 필요한 데이터 활용이 가능합니다.
Callback URL에 전달하는 정보
접근 권한 검사 (CheckAccessRights)
라이선스 발급 시 권한 검사를 위해 호출됩니다.
호출
Callback URL | 콜백 URL (콘솔에서 설정) |
Authorization | API 접근 권한 목적으로 사용 (콘솔에서 설정) |
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>
{
"type": "CheckAccessRights",
"appId": string,
"mediaUrl": string,
"deviceId": string,
"userId": string,
"userData": object,
"offline": boolean,
}
이름 | 타입 | 설명 | ||||||
---|---|---|---|---|---|---|---|---|
appId | string | App 아이디 | ||||||
mediaUrl | string | 미디어 URL | ||||||
deviceId | string | 디바이스 아이디 | ||||||
userId | string | 사용자 아이디 | ||||||
userData | object | launchAgent 호출 시 입력한 정보 (사용자 및 컨텐츠 식별 등의 용도) | ||||||
offline | boolean |
|
반환
{
"result": "Ok" | "Expired" | "NoRights" | "DeviceLimitExceeded",
"expiresOn": number
}
result
값 | 설명 |
---|---|
Ok | 접근 권한 있음 |
Expired | 접근 권한 만료됨 |
NoRights | 접근 권한 없음 |
DeviceLimitExceeded | 디바이스 제한 초과 |
expiresOn (옵션)
result가 "Ok"일 때, 접근 만료 일시 값이 필요합니다. 이때, Unix epoch time으로 표시합니다.
재생 진행 상태 보고 (NotifyPlaybackProgress)
재생 중 콘솔에 설정된 Interval에 따라 주기적으로 재생 진행 상태를 보고합니다.
호출
Callback URL | 콜백 URL (콘솔에서 설정) |
Authorization | API 접근 권한 목적으로 사용 (콘솔에서 설정) |
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>
{
"type": "NotifyPlaybackProgress",
"appId": string,
"sessionId": string,
"userId": string,
"userData": object,
"mediaUrl": string,
"position": number,
"duration": number,
"progress": {
"playTime": number,
"watchTime": number,
}
}
이름 | 타입 | 설명 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
appId | string | App 아이디 | |||||||||
sessionId | string | 세션 아이디 | |||||||||
userId | string | 사용자 아이디 | |||||||||
userData | object | launchAgent 호출 시 입력한 정보 (사용자 및 컨텐츠 식별 등의 용도) | |||||||||
mediaUrl | string | 미디어 URL | |||||||||
position | number | 현재 재생 위치 (단위: 밀리초) | |||||||||
duration | number | 전체 재생 길이 (단위: 밀리초) | |||||||||
progress | object | 현재 세션의 진행 상태
|
반환
{
"result": "Ok" | "PlaybackLimitExceeded"
}
result
값 | 설명 |
---|---|
Ok | 성공 |
PlaybackLimitExceeded | 재생 제한 초과 (배수 제한, 재생 횟수 등) |
재생 상태 보고 (NotifyPlaybackStatus)
미디어 파일 재생 시작 및 종료 시 호출됩니다.
호출
Callback URL | 콜백 URL (콘솔에서 설정) |
Authorization | API 접근 권한 목적으로 사용 (콘솔에서 설정) |
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>
{
"type": "NotifyPlaybackStatus",
"appId": string,
"sessionId": string,
"userId": string,
"userData": object,
"mediaUrl": string,
"status": "Started" | "Stopped",
"createdAt": number
}
이름 | 타입 | 설명 | ||||||
---|---|---|---|---|---|---|---|---|
appId | string | App 아이디 | ||||||
sessionId | string | 세션 아이디 | ||||||
userId | string | 사용자 아이디 | ||||||
userData | object | launchAgent 호출 시 입력한 정보 (사용자 및 컨텐츠 식별 등의 용도) | ||||||
mediaUrl | string | 미디어 URL | ||||||
status | string | 재생 상태
| ||||||
createdAt | number | 해당 JSON 생성 일시 (단위: Unix epoch time) |
반환
{
"result": "Ok"
}
result
값 | 설명 |
---|---|
Ok | 성공 |
재생 종료 보고 (NotifyPlaybackFinish)
미디어 파일 재생 종료 시 호출됩니다.
호출
Callback URL | 콜백 URL (콘솔에서 설정) |
Authorization | API 접근 권한 목적으로 사용 (콘솔에서 설정) |
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>
{
"type": "NotifyPlaybackFinish",
"appId": string,
"sessionId": string,
"userId": string,
"userData": object,
"mediaUrl": string,
"position": number,
"duration": number,
"progress": {
"playTime": number,
"watchTime": number,
},
"reason": "Ended" | "Error" | "UserExited"
}
이름 | 타입 | 설명 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
appId | string | App 아이디 | |||||||||
sessionId | string | 세션 아이디 | |||||||||
userId | string | 사용자 아이디 | |||||||||
userData | object | launchAgent 호출 시 입력한 정보 (사용자 및 컨텐츠 식별 등의 용도) | |||||||||
mediaUrl | string | 미디어 URL | |||||||||
position | number | 현재 재생 위치 (단위: 밀리초) | |||||||||
duration | number | 전체 재생 길이 (단위: 밀리초) | |||||||||
progress | object | 현재 세션의 진행 상태
| |||||||||
reason | string | 미디어 종료 원인
|
반환
{
"result": "Ok"
}
result
값 | 설명 |
---|---|
Ok | 성공 |
오프라인 재생 정보 보고 (NotifyOfflinePlaybackLog)
재생 관련 보고가 오프라인 상태로 인해 전송되지 않았을 경우, 온라인 연결 시 로컬에 저장된 데이터를 전송합니다.
재생 시작 | 재생 종료 | 적용 |
---|---|---|
오프라인 | 오프라인 | O |
오프라인 | 온라인 | O |
온라인 | 오프라인 | O |
온라인 | 온라인 | X |
호출
Callback URL | 콜백 URL (콘솔에서 설정) |
Authorization | API 접근 권한 목적으로 사용 (콘솔에서 설정) |
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>
{
"type": "NotifyOfflinePlaybackLog",
"appId": string,
"userId": string,
"userData": object,
"mediaUrl": string,
"items": [
{
"sessionId": string,
"startedAt": number,
"stoppedAt": number,
"position": number,
"duration": number,
"progress": {
"playTime": number,
"watchTime": number,
},
"finishReason": "Ended" | "Error" | "UserExited"
}
]
}
이름 | 타입 | 설명 |
---|---|---|
appId | string | App 아이디 |
userId | string | 사용자 아이디 |
userData | object | launchAgent 호출 시 입력한 정보 (사용자 및 컨텐츠 식별 등의 용도) |
mediaUrl | string | 미디어 URL |
items | [Log] | 로그 |
Log
이름 | 타입 | 설명 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
sessionId | string | 세션 아이디 | |||||||||
startedAt | number | 시작 시간 | |||||||||
stoppedAt | number | 종료 시간 | |||||||||
position | number | 현재 재생 위치 (단위: 밀리초) | |||||||||
duration | number | 전체 재생 길이 (단위: 밀리초) | |||||||||
progress | object | 현재 세션의 진행 상태
| |||||||||
finishReason | string | 미디어 종료 원인
|
반환
{
"result": "Ok"
}
result
값 | 설명 |
---|---|
Ok | 성공 |
다운로드 상태 보고 (NotifyDownloadStatus)
미디어 파일 다운로드 시작, 완료, 중단, 실패 시 호출됩니다.
호출
Callback URL | 콜백 URL (콘솔에서 설정) |
Authorization | API 접근 권한 목적으로 사용 (콘솔에서 설정) |
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>
{
"type": "NotifyDownloadStatus",
"appId": string,
"sessionId": string,
"userId": string,
"userData": object
"mediaUrl": string,
"status": "Started" | "Completed" | "Canceled" | "Failed",
"createdAt": number
}
이름 | 타입 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
appId | string | App 아이디 | ||||||||||
sessionId | string | 세션 아이디 | ||||||||||
userId | string | 사용자 아이디 | ||||||||||
userData | object | launchAgent 호출 시 입력한 정보 (사용자 및 컨텐츠 식별 등의 용도) | ||||||||||
mediaUrl | string | 미디어 URL | ||||||||||
status | string | 다운로드 상태
| ||||||||||
createdAt | number | 해당 JSON 생성 일시 (단위: Unix epoch time) |
반환
{
"result": "Ok"
}
result
값 | 설명 |
---|---|
Ok | 성공 |
북마크 데이터 제공 (GetBookmarks)
플레이어에서 북마크 데이터가 필요할 때 호출됩니다.
참고: launchAgent호출 시 MediaItem의 useBookmarkCallback을 true로 설정했을 때 호출됩니다.
호출
Callback URL | 콜백 URL (콘솔에서 설정) |
Authorization | API 접근 권한 목적으로 사용 (콘솔에서 설정) |
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>
{
"type": "GetBookmarks",
"appId": string,
"sessionId": string,
"userId": string,
"userData": object,
"mediaUrl": string
}
이름 | 타입 | 설명 |
---|---|---|
appId | string | App 아이디 |
sessionId | string | 세션 아이디 |
userId | string | 사용자 아이디 |
userData | object | launchAgent 호출 시 입력한 정보 (사용자 및 컨텐츠 식별 등의 용도) |
mediaUrl | string | 미디어 URL |
반환
{
"result": "Ok",
"bookmarks": [{"title": "제목", "pos": 60}]
}
result
값 | 설명 |
---|---|
Ok | 성공 |
bookmarks
값 | 설명 |
---|---|
[Bookmark] | 북마크 값 (배열) |
북마크 데이터 업데이트 (UpdateBookmarks)
북마크 데이터 변경 시 호출됩니다.
참고: launchAgent호출 시 MediaItem의 bookmarks에 북마크 데이터를 전달했을 경우에만 호출됩니다.
호출
Callback URL | 콜백 URL (콘솔에서 설정) |
Authorization | API 접근 권한 목적으로 사용 (콘솔에서 설정) |
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>
{
"type": "UpdateBookmarks",
"appId": string,
"sessionId": string,
"userId": string,
"userData": object,
"mediaUrl": string,
"bookmarks": [Bookmark]
}
이름 | 타입 | 설명 |
---|---|---|
appId | string | App 아이디 |
sessionId | string | 세션 아이디 |
userId | string | 사용자 아이디 |
userData | object | launchAgent 호출 시 입력한 정보 (사용자 및 컨텐츠 식별 등의 용도) |
mediaUrl | string | 미디어 URL |
bookmarks | [Bookmark] | 업데이트된 북마크 데이터 |
반환
{
"result": "Ok"
}
result
값 | 설명 |
---|---|
Ok | 성공 |
Callback URL 변경 이력
날짜 | 변경 내용 |
---|---|
2025.02.24. |
|
2024.05.24. |
|
2024.05.20. |
|
2024.02.01. |
|
DRM Packaging
DRM 패키징은 아래의 순서로 진행하시면 됩니다.
다운로드
콘솔 사이트에서 DRM 패키징 툴을 다운로드 합니다.
이때, 다운로드한 ndrm-pkg 파일과 ndrmconfig 파일은 같은 디렉토리에 있어야 합니다.

사용 방법
ndrm-pkg [옵션] [파일]
옵션
-o, --out-dir <OUT_DIR>
이 옵션을 사용하면 <OUT_DIR> 디렉토리에 DRM 패키징된 파일들이 생성됩니다.
이 옵션을 사용하지 않으면 해당 파일이 있는 디렉토리에 DRM 패키징된 파일들이 생성됩니다.
사용 예제
ndrm-pkg -o output video/*.mp4
-h, --help
패키징 툴의 사용 방법을 볼 수 있습니다.
파일
[파일]에는 한 개 이상의 파일을 사용할 수 있고 파일과 파일 사이는 스페이스로 구분합니다. 또한, [파일]에 와일드카드를 사용할 수 있습니다.
/ | 디렉토리와 파일 사이에 사용 |
* | 전체 파일을 대신하여 사용 *.mp4 형태로도 사용 가능 |
? | 문자 하나를 대신하여 사용 ??나 ??? 형태로도 사용 가능 |
** | 하위 모든 경로에 대해 지정하고 싶을 때 사용 사용한 후에는 반드시 /[파일]이 필요 |
사용 예제
ndrm-pkg data/2024/video.mp4
ndrm-pkg data/2023/video.mp4 data/2024/video.mp4
ndrm-pkg video/*
ndrm-pkg video/*.mp?
ndrm-pkg -o output **/video*.mp4
ndrm-pkg -o output data/**/*
ndrm-pkg -o output data/**/video*.mp4
ndrm-pkg -o output **/video0?.mp4 data/**/media??.mp4
ndrm-pkg -o output **/test*.?p?