소개

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"
};
속성타입설명참고
minVersionstring | nullPlaynPlay 앱의 최소 버전최소 버전 이상의 버전은 업데이트 알림을 하지 않습니다.

참고: 스크립트 추가시 '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)
파라미터타입설명
typeLaunchType실행 타입
mediaItemOrUrlMediaItem | URL | string재생 / 다운로드 항목 정보
optionsOptions | 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
}
이름타입설명
urlstring | URL미디어 URL
drmDRM | nullDRM 설정 (옵션)
subtitles[Subtitle] | null자막 설정 (옵션)
metadataMetadata | null메타데이터 설정 (옵션)
clippingClipping | null미디어 클리핑 설정 (옵션)
returnUrlstring | URL | null리턴 URL (옵션)
seekableboolean | null탐색(Seek) 기능을 허용 여부 (옵션, 기본값: true)
disablePlaybackRateboolean | null배속 기능을 허용 여부 (옵션, 기본값: false)
startTimenumber | StartTime | null재생 시작 시간 설정 (옵션)
useBookmarkCallbackboolean | null북마크 콜백 URL 사용 (옵션, 기본값: false)

설명
trueGetBookmarks, UpdateBookmarks Callback 사용
falsePlaynPlay 서비스에서 제공하는 북마크 불러오기 저장 방식 사용

DRM

{
    "appId": string,
    "userId": string,
    "userData": object | null,
    "offlineAccessPeriod": number | null
}
이름타입설명
appIdstringApp 아이디
userIdstring사용자 아이디
userDataobject | null고객사의 필요에 따라 Callback URL에 전달할 데이터 (옵션)
offlineAccessPeriodnumber | null다운로드 컨텐츠의 오프라인 재생 기한 설정
(옵션, 단위: 초)

설명
null제한없이 재생 가능
0오프라인 재생 권한 없음
nn초까지 재생 가능

미디어 아이템을 구성할 때, 위와 같은 구성 요소를 포함하는 DRM 설정을 추가할 수 있습니다.

Subtitle

{
    "url": string | URL,
    "language": string | null,
    "label": string | null,
    "mode": "autoSelect" | "show" | "hidden" | null
}
이름타입설명
urlstring | URL자막 URL
languagestring | null자막 언어 (옵션)
labelstring | null자막 타이틀 (옵션)
modestring | null자막 선택 모드
(옵션, 기본값: "autoSelect")

설명
autoSelect자동 선택
show자막 보이기
hidden자막 숨기기

미디어 아이템을 구성할 때, 위와 같은 요소를 포함하는 자막을 추가할 수 있습니다.

StartTime

{
    "value": number,
    "syncedAt": Date | null
}
이름타입설명
valuenumber시작 시간 값 (초)
syncedAtDate | null시작 시간이 업데이트된 시간 (옵션)
설정한 시작 시간과 오프라인에 저장된 최근 저장된 재생 시간 중 가장 최근의 값을 선택하기 위한 목적

Metadata

{
    "title": string | null,
    "artworkUrl": string | URL | null,
    "downloadPath": string | null
}
이름타입설명
titlestring | null모바일 플레이어 타임바에 표시되는 타이틀
artworkUrlstring | URL | nullartwork URL (옵션)
downloadPathstring | null다운로드 파일의 경로 표시 값
타입이 LaunchType.DOWNLOAD의 경우 설정

미디어 아이템을 구성할 때, 메타데이터를 추가할 수 있습니다.

Clipping

{
    "startTime": number,
    "endTime": number | null
}

Bookmark

{
    "pos": number,
    "title": string | null
}
이름타입설명
posnumber북마크 시간 (초) (필수)
titlestring | null북마크 제목 (옵션: 지정하지 않으면 'Untitled')

미디어 항목을 사용자 지정 시작 및 끝 위치로 잘라냅니다. 미디어 아이템을 구성할 때, 클리핑을 추가할 수 있습니다.

Options

{
    "height": number | null,
    "width": number | null
}
이름타입설명
heightnumber | null플레이어의 높이
widthnumber | 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);
이름타입설명
appIdstringApp ID
scriptURLURL | string서비스 스크립트 경로
optionsOptions서비스 스크립트 경로

PlaynPlay 보안 서비스를 실행합니다. 개발툴을 사용하려면 반드시 호출해야합니다.

커스텀 페이지와 같은 경로에 'playnplay-service.js'를 생성하고 다음 코드를 추가합니다. (이미 다른 서비스워커를 사용 중이라면 해당 서비스워커에 추가합니다.)

self.importScripts('https://app.playnplay.com/modules/playnplay-service.js');

scriptURL이 커스텀 페이지와 다른 경로에 있을 경우 scope를 지정해야합니다. 자세한 내용을 다음 링크를 참조하세요.

Options

{
    "scope": string | null
}
이름타입설명
scopestring | null서비스 등록 스코프

window: openDevTools()

개발툴을 엽니다.

개발 시 디버깅 용도로만 사용하고 프로덕션 환경에 사용하지 않을 것을 권합니다.

HTMLMediaElement: open()

이름타입설명
mediaItemMediaItem | 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 샘플 다운로드

안드로이드 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스트링 형태의 미디어 주소
Uriandroid.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 기능을 제한할 수 있습니다.

참고: setSeekable
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를 사용하려면 아래와 같이 사용하면 됩니다. ExoPlayerPlayer를 확장한 클래스로 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)
파라미터타입설명
itemDownloadItem목록에 추가된 다운로드 아이템

다운로드할 아이템이 목록에 추가될 때 처리를 위한 메서드입니다. 아이템을 추가할 때 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.

onItemRemoved

fun onItemRemoved(item: DownloadItem)
파라미터타입설명
itemDownloadItem목록에서 제거된 다운로드 아이템

다운로드 목록에서 아이템을 제거할 때 처리를 위한 메서드입니다. 아이템이 제거될 때 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.

onProgressUpdated

fun onProgressUpdated(item: DownloadItem)
파라미터타입설명
itemDownloadItem다운로드가 진행 중인 다운로드 아이템

다운로드가 진행되는 매순간을 처리하기 위한 메서드입니다. 아이템 다운로드가 진행됨에 따라 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.

onStatusChanged

fun onStatusChanged(item: DownloadItem)
파라미터타입설명
itemDownloadItem다운로드 상태가 바뀐 다운로드 아이템

다운로드 아이템의 상태가 변경될 때 처리를 위한 메서드입니다. 즉, 다운로드를 완료하였거나, 실패하였을 때 등의 상황에 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.

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)
}

onReceiveintent에서 제공하는 정보는 다음과 같습니다.

이름타입내용
"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>오디오 트랙 목록불가능

현재 재생 중인 미디어의 오디오 트랙을 가져오는 속성입니다.

참고: AudioTrack

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.01.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
타입설명설정
BooleanSeek 기능 사용 가능 여부불가능

현재 플레이어에서 Seek 기능을 사용할 수 있는지 여부를 반환하는 속성입니다.

isScrubbing

val isScrubbing: Boolean

loop

var loop: Boolean
타입설명설정기본값
Boolean미디어 반복 재생 여부를 결정하는 값가능false

미디어 재생이 끝났을 때 다시 처음부터 재생할 지 여부를 나타내는 속성입니다.

mediaItems

val mediaItems: List<MediaItem>
타입설명설정기본값
List<MediaItem>현재 재생 목록에 있는 미디어 아이템들불가능[]

미디어 아이템들의 목록을 나타내는 속성입니다. 해당 속성은 설정이 불가능합니다. 목록 전체를 바꾸고 싶을 때는 PlayersetMediaItems()를 사용하시면 됩니다.

muted

var muted: Boolean
타입설명설정기본값
Boolean오디오 음소거 여부가능false

음소거 여부를 나타내는 속성입니다. 음소거면 true, 아니면 false입니다.

paused

val paused: Boolean
타입설명설정
Boolean미디어 일시 정지 여부불가능

미디어가 일시 정지 상태인지 나타내는 속성입니다. 다음과 같은 조건 중 하나라도 해당할 때, true를 반환합니다.

  1. playWhenReady의 값이 false일 때,
  2. playbackState가 STATE_IDLE일 때 (제한된 리소스를 가지고 있을 때),
  3. playbackState가 STATE_ENDED일 때 (미디어 재생이 끝났을 때).
참고: Player.State

playbackRate

var playbackRate: Float
타입설명설정범위기본값
Float재생 속도가능0.1~4.01.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>자막 트랙 목록불가능

현재 재생 중인 미디어의 자막 트랙을 가져오는 속성입니다.

참고: SubtitleTrack

videoTracks

val videoTracks: List<Track>
타입설명설정
List<Track>비디오 트랙 목록불가능

현재 재생 중인 미디어의 비디오 트랙을 가져오는 속성입니다.

참고: VideoTrack

메서드

beginSeekTo

fun beginSeekTo(direction: SeekDirection)

deselectTrack

fun deselectTrack(track: Track)
파라미터타입설명
trackTrack선택을 해제할 (자막) 트랙

트랙 선택을 해제하여 비활성화하는 메서드입니다. 자막 트랙만 해제 가능합니다.

endSeekTo

fun endSeekTo(direction: SeekDirection)

enterPictureInPicture

fun enterPictureInPicture(activity: Activity, sourceRectHint: Rect? = null)
파라미터타입설명
activityActivity현재 액티비티
sourceRectHintRect?setSourceRectHint 참고
fun enterPictureInPicture(activity: Activity, sourceView: View? = null)
파라미터타입설명
activityActivity현재 액티비티
sourceViewView?현재 뷰

화면 속 화면 모드로 전환하는 메서드입니다.

fastSeek

fun fastSeek(to: Duration)
파라미터타입설명
tojava.time.Duration재생하고자 하는 위치 값

입력된 시간으로 바로 이동하기 위한 메서드입니다.

  • 주의: 해당 메서드의 원래 목적은 정확한 위치보다는 새로운 위치에서 더 빠르게 재생을 하도록 하는 것이었습니다. 그러나 안드로이드에서는 현재 정확한 위치와 빠른 재생을 동시에 수행할 수 없기 때문에, 현재는 currentTime, seekTo()를 사용한 것과 유사한 결과를 얻게 됩니다. 즉, 이 메서드를 사용하면 정확한 위치로 이동하게 됩니다. 향후 안드로이드에서 이러한 기능을 제공할 경우, 원래 목적에 맞게 업데이트될 예정입니다.

load

fun load(uri: String)
파라미터타입설명
uriString로드하려는 문자열 형식의 미디어 주소

미디어 주소를 문자열로 입력 받아서 미디어를 로드하기 위한 메서드입니다.

load

fun load(uri: Uri)
파라미터타입설명
uriUri로드하려는 android.net.Uri 형식의 미디어 주소

미디어 주소를 Uri 타입으로 입력 받아서 미디어를 로드하기 위한 메서드입니다.

load

fun load(mediaItem: MediaItem)
파라미터타입설명
mediaItemMediaItem로드하려는 미디어 아이템

미디어 아이템을 로드하기 위한 메서드입니다.

load

fun load(mediaItems: List<MediaItem>)
파라미터타입설명
mediaItemsList<MediaItem>로드하려는 미디어 아이템의 리스트

미디어 아이템 목록을 로드하기 위한 메서드입니다.

pause

fun pause()

미디어를 일시 정지하기 위한 메서드입니다.

참고: Playerpause()

play

fun play()

미디어를 재생하기 위한 메서드입니다.

참고: Playerplay()

prepare

fun prepare()

미디어 관련 기본 설정을 하기 위한 메서드입니다. 이 메서드를 실행하면, defaultPlaybackRate, defaultMuted 설정을 미디어 플레이어에 적용하고, 미디어를 로딩하기 시작하고 재생에 필요한 리소스를 확보합니다.

참고: Playerprepare()

release

fun release()

미디어 목록, 이벤트 핸들러, 리스너 등 미디어에 관련하여 설정했던 것들을 모두 해제한 후, 미디어 플레이어를 릴리스 시키기 위한 메서드입니다. 미디어 플레이어를 더이상 사용하지 않을 시에는 반드시 사용해야 합니다.

참고: Playerrelease()

seekBack

fun seekBack()

현재 위치에서 속성 seekBackIncrement 만큼 전으로 이동하기 위한 메서드입니다.

참고: PlayerseekBack()

seekBack

fun seekBack(increment: Duration)
파라미터타입설명
incrementjava.time.Duration새로운 위치는 현재 위치에서 입력된 파라미터를 뺀 결과입니다.
즉, 음수 입력 시, 입력된 파라미터의 절대값만큼 후로 이동합니다.

현재 위치에서 입력된 시간 전으로 이동하기 위한 메서드입니다.

seekForward

fun seekForward()

현재 위치에서 속성 seekForwardIncrement 만큼 후로 이동하기 위한 메서드입니다.

참고: PlayerseekForward()

seekForward

fun seekForward(increment: Duration)
파라미터타입설명
incrementjava.time.Duration새로운 위치 현재 위치에서 입력된 파라미터를 더한 결과입니다.
즉, 음수 입력 시, 입력된 파라미터의 절대값만큼 되돌아갑니다.

현재 위치에서 입력된 시간 후로 이동하기 위한 메서드입니다.

seekTo

fun seekTo(position: Duration, force: Boolean = false)
파라미터타입설명
positionjava.time.Duration입력된 파라미터로 재생 위치를 이동합니다.
forceBoolean강제로 위치를 바꿔야할 때, true로 설정. 기본값은 false입니다.

입력된 시간 위치로 이동하기 위한 메서드입니다.

selectTrack

fun selectTrack(track: Track)
파라미터타입설명
trackTrack활성화 할 (오디오,비디오,자막)트랙

트랙을 선택하여 활성화하는 메서드입니다.

startScrubbing

fun startScrubbing(position: Duration)

stopScrubbing

fun stopScrubbing(position: Duration)

updateScrubbing

fun updateScrubbing(position: Duration)

addEventHandler

fun addEventHandler(handler: EventHandler): EventHandler
파라미터타입반환 타입설명
handlerEventHandlerEventHandler추가할 이벤트 핸들러

이벤트 핸들러를 추가하기 위한 메서드입니다. 반환된 이벤트 핸들러는 이벤트 핸들러를 제거할 목적으로 removeEventHandler()에서 사용할 수 있습니다. 이벤트 핸들러를 추가한 후, 해당 이벤트 핸들러가 더 이상 필요 없을 때는 반드시 removeEventHandler() 메서드를 사용해서 제거하세요.

removeEventHandler

fun removeEventHandler(handler: EventHandler)
파라미터타입설명
handlerEventHandler제거할 이벤트 핸들러

addEventHandler()로 추가된 이벤트 핸들러를 제거하기 위한 메서드입니다.

addListener

fun addListener(listener: MediaPlayer.Listener)
파라미터타입설명
listenerMediaPlayer.Listener추가할 이벤트 리스너

이벤트 리스너를 추가하기 위한 메서드입니다. 이벤트 리스너를 추가한 후, 해당 이벤트 리스너가 더 이상 필요 없을 때는 반드시 removeListener() 메서드를 사용해서 제거하세요.

removeListener

fun removeListener(listener: MediaPlayer.Listener)
파라미터타입설명
listenerMediaPlayer.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)
파라미터 이름타입설명
durationjava.time.Duration미디어 길이

미디어의 길이(duration)가 변경될 때 실행합니다.

이벤트 핸들러: DurationChange
참고: java.time.Duration

onEnded

fun onEnded()

재생 목록의 마지막 미디어의 재생이 완료 된 시점에 실행합니다.

이벤트 핸들러: Ended

onError

fun onError(error: PlaybackException)
파라미터 이름타입설명
errorPlaybackException재생 오류가 발생했을 때 예외

에러가 발생하여 리소스를 로드할 수 없을 때 실행합니다.

onLoadedData

fun onLoadedData()

미디어 트랙이 로드되었을 때 실행합니다.

이벤트 핸들러: LoadedData

onLoadedMetadata

fun onLoadedMetadata()

메타데이터가 로드되었을 때 실행합니다.

이벤트 핸들러: LoadedMetadata

onLoadStart

fun onLoadStart()

미디어 리소스를 로딩하기 시작할 때 실행합니다.

이벤트 핸들러: LoadStart

onPause

fun onPause()

미디어 일시 정지를 요청한 후, 일시 정지 상태로 진입하는 시점에 실행합니다.

이벤트 핸들러: Pause

onPlay

fun onPlay()

미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 실행합니다. 단, 재생 위치가 변경될 때는 포함하지 않습니다. 자세한 설명은 EventHandler.Play를 참고하세요.

이벤트 핸들러: Play

onPlaybackFinish

fun onPlaybackFinish(mediaItem: MediaItem, position: Duration, duration: Duration?, reason: PlaybackFinishReason)
파라미터 이름타입설명
mediaItemMediaItem?종료된 미디어 아이템
positionjava.time.Duration마지막 재생 위치
durationjava.time.Duration?미디어 길이
reasonPlaybackFinishReason미디어 종료 원인

미디어가 종료될 때 실행합니다. 이 때 마지막 재생 위치(position)와 미디어의 길이(duration) 값을 사용할 수 있습니다. 주의할 점은, 미디어가 로드된 후에 종료할 때만 실행된다는 것입니다. 만약 미디어가 로드되기 전에 종료되는 상황에도 사용하려면, onUnload()를 참고하세요.

onPlaying

fun onPlaying()

재생 위치가 변경되어 재생 되는 것을 포함하여, 미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 실행합니다. 자세한 설명은 EventHandler.Playing를 참고하세요.

이벤트 핸들러: Playing

onPositionDiscontinuity

fun onPositionDiscontinuity(
    player: MediaPlayer,
    oldPosition: Duration,
    newPosition: Duration
)
파라미터 이름타입설명
playerMediaPlayer미디어 플레이어
oldPositionjava.time.Duration이전 재생 위치
newPositionjava.time.Duration바뀐 재생 위치

재생 위치가 변경되는 시점에 실행합니다. 이전 위치와 이동한 위치 모두 접근이 가능합니다.

주의: Player.Listener의 onPositionDiscontinuity()는 이름만 같고, 사용 방법이 다릅니다.

onProgress

fun onProgress()

플레이어가 소스를 읽어오기 시작할 때에 실행합니다.

이벤트 핸들러: Progress

onRateChange

fun onRateChange(playbackRate: Float)
파라미터 이름타입설명
playbackRateFloat재생 속도

재생 속도가 변경되는 시점에 실행합니다.

주의: 재생 속도는 그대로이지만, preservesPitch의 값이 변경될 때도 실행 됨

이벤트 핸들러: RateChange
참고: playbackRate

onRepeatRangeChange

fun onRepeatRangeChange(repeatRange: MediaPlayer.RepeatRange?)
파라미터 이름타입설명
repeatRangeMediaPlayer.RepeatRange?구간 반복에서의 구간

구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때 실행합니다.

이벤트 핸들러: RepeatRangeChange
참고: MediaPlayer.RepeatRange

onSeeked

fun onSeeked()

seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 실행합니다.

이벤트 핸들러: Seeked

onSeeking

fun onSeeking()

seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 실행합니다.

이벤트 핸들러: Seeking

onSuspend

fun onSuspend()

미디어 로딩이 중지된 시점에 실행합니다.

이벤트 핸들러: Suspend

onTimeUpdate

fun onTimeUpdate(position: Duration)
파라미터 이름타입설명
positionjava.time.Duration현재 재생 위치

currentTime이 변경되는 시점에 실행합니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.

이벤트 핸들러: TimeUpdate
참고: java.time.Duration

onUnload

fun onUnload(mediaItem: MediaItem)
파라미터 이름타입설명
mediaItemMediaItem종료된 미디어 아이템

미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때 실행합니다.

이벤트 핸들러: Unload
참고: androidx.media3.common.MediaItem

onVolumeChange

fun onVolumeChange(volume: Float, muted: Boolean)
파라미터 이름타입설명
volumeFloat디바이스 음량
mutedBoolean음소거 여부

볼륨이 변경되는 시점에 실행합니다. 무음(muted) 상태가 변경될 때도 실행합니다.

주의: Player.Listener의 onVolumeChanged() 메서드는 이 이벤트 리스너와 완전히 다른 동작을 합니다. 메서드 이름과 사용하는 파라미터도 다르니 주의하시기 바랍니다.

이벤트 핸들러: VolumeChange
참고: deviceVolume

onWaiting

fun onWaiting()

일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 실행합니다.

이벤트 핸들러: Waiting

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 클래스를 확장한 클래스로, 오디오 트랙에 사용되는 클래스입니다.

참고: Track
audioTracks

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 클랙스를 확장하여, 미디어 플레이어를 설정하고 사용하는 메서드를 제공합니다.

참고: Context

메서드

getMediaPlayer

fun Context.getMediaPlayer(block: (MediaPlayer) -> Unit)
파라미터타입설명
block(MediaPlayer) -> Unit미디어 플레이어 제어 내용

현재 화면에 있는 플레이어를 제어하고 싶을 때 사용하는 메서드입니다. 미디어 플레이어를 비동기 방식으로 가지고 오기 때문에, 주의해서 사용해 주세요. 미디어 플레이어 사용 후에는 반드시 release()를 호출해주세요.

참고: release()

presentMediaPlayer

미디어를 여는 메서드입니다. 여러 타입을 파라미터로 받을 수 있습니다. 미디어 플레이어를 사용한 후에는 반드시 release()를 호출해주세요.

참고: release()
fun Context.presentMediaPlayer(mediaItem: MediaItem)
파라미터타입설명
mediaItemMediaItem재생하려는 미디어 아이템
fun Context.presentMediaPlayer(
    mediaItem: MediaItem,
    configuration: MediaPlayerActivityConfiguration
)
파라미터타입설명
mediaItemMediaItem재생하려는 미디어 아이템
configurationMediaPlayerActivityConfiguration설정 값
fun Context.presentMediaPlayer(mediaItems: Collection<MediaItem>)
파라미터타입설명
mediaItemCollection<MediaItem>재생하려는 미디어 아이템 목록
fun Context.presentMediaPlayer(
    mediaItems: Collection<MediaItem>,
    configuration: MediaPlayerActivityConfiguration
)
파라미터타입설명
mediaItemCollection<MediaItem>재생하려는 미디어 아이템 목록
configurationMediaPlayerActivityConfiguration설정 값
fun Context.presentMediaPlayer(
	mediaItems: Collection<MediaItem>,
	startMediaItem: MediaItem
)
파라미터타입설명
mediaItemsCollection<MediaItem>재생하려는 미디어 아이템 목록
startMediaItemMediaItem목록 중에서 처음 재생할 미디어 아이템.
mediaItems에 포함되어 있어야 합니다.
fun Context.presentMediaPlayer(
    mediaItems: Collection<MediaItem>,
    startMediaItem: MediaItem,
    configuration: MediaPlayerActivityConfiguration
)
파라미터타입설명
mediaItemsCollection<MediaItem>재생하려는 미디어 아이템 목록
startMediaItemMediaItem목록 중에서 처음 재생할 미디어 아이템.
mediaItems에 포함되어 있어야 합니다.
configurationMediaPlayerActivityConfiguration설정 값
fun Context.presentMediaPlayer(
	mediaItems: Collection<MediaItem>,
	startIndex: Int
)
파라미터타입설명
mediaItemsCollection<MediaItem>재생하려는 미디어 아이템 목록
startIndexInt목록 중에서 처음 재생할 미디어 아이템의 index.
0 이상 mediaItems 개수 - 1 이하의 값이어야 합니다.
fun Context.presentMediaPlayer(
    mediaItems: Collection<MediaItem>,
    startIndex: Int,
    configuration: MediaPlayerActivityConfiguration
)
파라미터타입설명
mediaItemsCollection<MediaItem>재생하려는 미디어 아이템 목록
startIndexInt목록 중에서 처음 재생할 미디어 아이템의 index.
0 이상 mediaItems 개수 - 1 이하의 값이어야 합니다.
configurationMediaPlayerActivityConfiguration설정 값
fun Context.presentMediaPlayer(uri: String)
파라미터타입설명
uriString재생하려는 문자열 형태의 미디어 주소
fun Context.presentMediaPlayer(
    uri: String,
    configuration: MediaPlayerActivityConfiguration
)
파라미터타입설명
uriString재생하려는 문자열 형태의 미디어 주소
configurationMediaPlayerActivityConfiguration설정 값
fun Context.presentMediaPlayer(uri: Uri)
파라미터타입설명
uriandroid.net.Uri재생하려는 미디어 주소
fun Context.presentMediaPlayer(
    uri: Uri,
    configuration: MediaPlayerActivityConfiguration
)
파라미터타입설명
uriandroid.net.Uri재생하려는 미디어 주소
configurationMediaPlayerActivityConfiguration설정 값

startMediaPlayerService

fun Context.startMediaPlayerService(appId: String)
파라미터타입설명
appIdStringApp 아이디

DownloadItem

import com.newin.nplayer.sdk.DownloadItem
data class DownloadItem

다운로드 아이템을 나타내는 데이터 클래스입니다. 다운로드에 대한 정보, 진행 상태 등의 정보를 가지고 있습니다.

속성

id

val id: DownloadItemId
타입설명
Id다운로드 아이템의 고유 아이디

다운로드 아이템의 고유의 아이디입니다. 다운로드를 일시정지하거나, 다시 시작할 때, 삭제할 때 등에 사용됩니다. 이때, Id는 value class로 아래와 같습니다.

typealias DownloadItemId = UUID
참고: UUID

displayPath

val displayPath: String
타입설명
String다운로드된 아이템이 저장되는 상대 경로. 이때 상대 경로는 downloadsUri를 기준으로 함
비교: toUrl
참고: downloadsUri

fromUri

val fromUri: Uri
타입설명
android.net.Uri아이템을 가져올 주소

다운로드할 아이템의 주소입니다.

toUri

val toUri: Uri
타입설명
android.net.Uri다운로드된 아이템이 저장되는 절대 경로

다운로드된 아이템이 저장되는 절대 경로입니다.

비교: displayPath
참고: downloadsUri

status

val status: Status
타입설명
Status다운로드 아이템의 현재 상태

progress

val progress: Progress?
타입설명
Progress?다운로드 아이템의 다운로드 진행을 나타냅니다.
참고: Progress

failedReason

val failedReason: FailedReason?
타입설명
FailedReason?다운로드가 실패한 이유

클래스

Status

enum class Status(val value: String)

다운로드 아이템의 상태를 나타내는 열거형 클래스입니다.

참고: Status

Progerss

data class Progress(val downloadedSize: Long, val fileSize: Long)

다운로드 진행 정도를 나타내는 데이터 클래스입니다.

참고: Progress

FailedReason

enum class FailedReason(val value: Int)

다운로드가 실패한 이유를 나타내는 열거형 클래스입니다.

참고: FailedReason

Progress

import com.newin.nplayer.sdk.DownloadItem.Progress
data class Progress

다운로드 진행 정도를 나타내는 데이터 클래스입니다. 현재 다운로드된 파일 크기와 전체 파일 크기를 가지고 있습니다.

참고: DownloadItem

속성

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다운로드된 아이템이 저장되는 최상위 디렉토리불가능

다운로드된 아이템이 저장되는 디렉토리 중 최상위 디렉토리를 나타내는 속성입니다.

참고: displayPath
toUri

items

val items: List<DownloadItem>
타입설명설정
List<DownloadItem>현재 다운로드 목록에 있는 아이템들불가능

현재 다운로드 목록에 있는 아이템들을 반환하는 속성입니다.

maxParallelDownloads

var maxParallelDownloads: Int
타입설명설정기본값
Int동시에 다운받을 수 있는 아이템 최대 개수가능3

동시에 받을 수 있는 아이템의 최대 개수를 반환하거나 설정합니다.


메서드

add

fun add(mediaItem: MediaItem, allowsCellularAccess: Boolean = true): DownloadItemId
파라미터타입설명필수기본값
mediaItemMediaItem추가하고자 하는 미디어 아이템O없음
allowsCellularAccessBoolean다운로드 시 셀룰러 데이터 사용 여부Xtrue

다운로드를 할 미디어 아이템을 추가합니다. 현재 다운로드가 진행되고 있는 아이템의 수가 maxParallelDownloads 보다 적으면 바로 다운로드를 시작합니다. 셀룰러 데이터 사용을 허용하지 않으려면, allowsCellularAccess를 false로 설정하여 호출하십시오.

참고: DownloadItemId

getItemsByStatus

fun getItemsByStatus(status: DownloadItem.Status): List<DownloadItem>
파라미터타입설명
statusDownloadItem.Status가져오고자 하는 아이템의 다운로드 상태

특정 다운로드 상태의 아이템 목록을 가져오기 위해서 사용하는 메서드입니다.

pause

fun pause(id: DownloadItemId)
파라미터타입설명
idId일서 정지할 다운로드 아이템의 아이디

다운로드를 일시 정지할 때 사용하는 메서드입니다.

pauseAll

fun pauseAll()

다운로드 목록에 있는 모든 아이템의 다운로드를 일시 정지하게 하는 메서드입니다.

remove

fun remove(id: DownloadItemId)
파라미터타입설명
idId제거할 다운로드 아이템의 아이디

다운로드 목록에서 아이템을 지울 때 사용하는 메서드입니다.

removeAll

fun removeAll()

다운로드 아이템 목록을 모두 지우는 메서드입니다.

removeCompleted

fun removeCompleted()

다운로드가 완료된 아이템을 목록에서 모두 지우는 메서드입니다.

resume

fun resume(id: DownloadItemId)
파라미터타입설명
idId다운로드 재개할 아이템의 아이디

다운로드를 일시 정지한 아이템의 다운로드를 재개하는 메서드입니다.

resumeAll

fun resumeAll()

일시 정지한 모든 아이템의 다운로드를 재개하는 메서드입니다.

addListener

fun addListener(listener: Listener)
파라미터타입설명
listenerDownloadManager.Listener추가할 다운로드 매니저 리스너

다운로드 매니저 리스너를 추가하기 위한 메서드입니다. 리스너를 추가한 후, 해당 리스너가 더 이상 필요 없을 때는 반드시 removeListener() 메서드를 사용해서 제거하세요.

removeListener

fun removeListener(listener: Listener)
파라미터타입설명
listenerDownloadManager.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)가 변경되었을 때를 처리하기 위한 핸들러입니다.

이벤트 리스너: onDurationChange()
참고: java.time.Duration

Ended

data class Ended(val listener: () -> Unit) : EventHandler()

재생 목록의 마지막 미디어의 재생이 완료 된 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onEnded()

Error

data class Error(val listener: (PlaybackException) -> Unit) : EventHandler()
파라미터 타입설명
PlaybackException재생 오류가 발생했을 때 예외

에러가 발생하여 리소스를 로드할 수 없을 때 사용하기 위한 핸들러입니다.

LoadedData

data class LoadedData(val listener: () -> Unit) : EventHandler()

미디어 트랙이 로드되었을 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onLoadedData()

LoadedMetadata

data class LoadedMetadata(val listener: () -> Unit) : EventHandler()

메타데이터가 로드되었을 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onLoadedMetadata()

LoadStart

data class LoadStart(val listener: () -> Unit) : EventHandler()

미디어 리소스를 로딩하기 시작할 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onLoadStart()

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()

미디어 일시 정지를 요청한 후, 일시 정지 상태로 진입하는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onPause()
비교: Play

Play

data class Play(val listener: () -> Unit) : EventHandler()

미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 사용하기 위한 핸들러입니다. 단, 재생 위치가 변경될 때는 포함하지 않습니다.

사용자가 재생 버튼을 클릭하거나 mediaPlayer.play()를 호출하는 등 플레이어에 재생 명령을 내렸을 때 처럼 직접 명령을 했을 때 상황에서 이벤트 처리를 여기서 할 수 있음 EventHandler.Playing과 다른 점은 seekTo() 등을 통해 재생 위치가 변경될 때의 이벤트는 여기서 처리할 수 없다는 것입니다. 중요한 점이 하나 더 있는데, Play와 관련된 이벤트 핸들러가 호출되면, Playing 이벤트는 Play 이벤트 이 후에 언제나 호출됩니다.

이벤트 리스너: onPlay()
비교: Pause
참고: Playing

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에서 제공하는 것을 사용하시면 됩니다.

참고: Player.State

Playing

data class Playing(val listener: () -> Unit) : EventHandler()

재생 위치가 변경되어 재생 되는 것을 포함하여, 미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 사용하기 위한 핸들러입니다.

즉, seekBack(), seekForward(), seekTo() 등의 호출로 재생 위치가 변경되기 위해, 미디어가 잠시 멈추었다가 다시 재생되는 이벤트를 처리할 수 있다는 것이 EventHandler.Play와 다른 점입니다. Playing과 관련된 이벤트 핸들러는 Play 이벤트 이후에 호출됩니다.

이벤트 리스너: onPlaying()
참고: 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()

플레이어가 소스를 읽어오기 시작할 때에 사용하기 위한 핸들러입니다.

이벤트 리스너: onProgress()
비교: Suspend

RateChange

data class RateChange(val listener: (Float) -> Unit) : EventHandler()
파라미터 타입설명
Float재생 속도

재생 속도가 변경되는 시점에 사용하기 위한 핸들러입니다. 주의: 재생 속도는 그대로이지만, preservesPitch의 값이 변경될 때도 호출 됨

이벤트 리스너: onRateChange()
참고: playbackRate

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?구간 반복에서의 구간

구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때를 처리하기 위한 핸들러입니다.

이벤트 리스너: onRepeatRangeChange()
참고: MediaPlayer.RepeatRange

Seeked

data class Seeked(val listener: () -> Unit) : EventHandler()

seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onSeeked()
비교: Seeking

Seeking

data class Seeking(val listener: () -> Unit) : EventHandler()

seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onSeeking()
비교: Seeked

Suspend

data class Suspend(val listener: () -> Unit) : EventHandler()

미디어 로딩이 중지된 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onSuspend()
비교: Progress

TimeUpdate

data class TimeUpdate(val listener: (Duration) -> Unit) : EventHandler()
파라미터 타입설명
java.time.Duration현재 재생 위치

currentTime이 변경되는 시점에 사용하기 위한 핸들러입니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.

이벤트 리스너: onTimeUpdate()
참고: java.time.Duration

Unload

data class Unload(val listener: (MediaItem) -> Unit) : EventHandler()
파라미터 타입설명
MediaItem종료된 미디어 아이템

미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때를 처리하기 위한 핸들러입니다.

이벤트 리스너: onUnload()
참고: androidx.media3.common.MediaItem

VideoSizeChange

data class VideoSizeChange(val listener: (VideoSize) -> Unit) : EventHandler()
파라미터 타입설명
VideoSize영상 사이즈

영상 크기가 바뀌는 시점에 사용하기 위한 핸들러입니다. 다음 영상으로 이동할 때, 영상 크기가 0x0으로 바뀌었다가 다음 영상의 크기로 바뀌게 되는데, 0x0으로 바뀔 때도 해당 이벤트는 호출됩니다. 즉, 다음 영상으로 이동할 경우, 이 핸들러는 두 번 호출 됩니다.
참고: 이벤트 리스너는 Player.Listener에서 제공하는 것을 사용하시면 됩니다.

참고: VideoSize

VolumeChange

data class VolumeChange(val listener: (Float, Boolean) -> Unit) : EventHandler()
파라미터 타입설명
Float디바이스 음량
Boolean음소거 여부

볼륨이 변경되는 시점에 사용하기 위한 핸들러입니다. 무음(muted) 상태가 변경될 때도 호출됩니다.

주의: Player.Listener의 onVolumeChanged() 메서드는 이 핸들러와 전혀 다릅니다. 메서드 이름과 사용하는 파라미터도 다르니 주의하시기 바랍니다.

이벤트 리스너: onVolumeChange()
참고: deviceVolume

Waiting

data class Waiting(val listener: () -> Unit) : EventHandler()

일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onWaiting()

FragmentManager

import androidx.fragment.app.FragmentManager

androidx.fragment.app.FragmentManager 클래스를 확장하여, MediaPlayerBaseFragment의 미디어를 로드할 수 있는 기능을 제공합니다.

메소드

load

fun FragmentManager.load(parameters: MediaPlayerBaseFragment.Parameters) 
파라미터타입설명
parametersMediaPlayerBaseFragment설정 값

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입니다.

참고: MediaItem내의 returnUrl

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
이름타입설명필수기본값
appIdStringApp 아이디O없음
userIdString사용자 아이디O없음
userDataMap<String, Any>사용자 데이터XemptyMap()
offlineAccessPeriodjava.time.Duration?오프라인 재생 기한Xnull

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
파라미터타입설명필수
disablePlaybackRateBoolean배속 기능을 허용할 지에 대한 여부O

미디어 아이템의 배속 기능을 허용할 지에 대한 여부를 설정하는 메서드입니다.

setSeekable

fun MediaItem.Builder.setSeekable(seekable: Boolean): MediaItem.Builder
파라미터타입설명필수
seekableBooleanSeek 기능을 허용할 지에 대한 여부O

미디어 아이템의 Seek 기능을 허용할 지에 대한 여부를 설정하는 메서드입니다.

setUseBookmarkCallback

fun MediaItem.Builder.setUseBookmarkCallback(useBookmarkCallback: Boolean): MediaItem.Builder
파라미터타입설명필수
useBookmarkCallbackBoolean북마크 콜백 사용 여부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미디어 아이템의 아트워크 경로

미디어 아이템의 아트워크 경로를 나타내는 속성입니다.

참고: artworkUri

title

@Nullable CharSequence title
타입설명
CharSequence미디어 아이템의 제목

미디어 아이템의 제목을 나타내는 속성입니다.

참고: title

메서드

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)

구간 반복에 사용되는 데이터 클래스입니다.


생성자 파라미터

이름타입설명필수
startjava.time.Duration구간 반복 시작 위치 값O
endjava.time.Duration구간 반복 종료 위치 값O

속성

start

val start: Duration
타입설명
java.time.Duration구간 반복 시작 위치를 반환

end

val end: Duration
타입설명
java.time.Duration구간 반복 종료 위치를 반환

메서드

withStart

fun withStart(start: Duration): RepeatRange
파라미터타입반환 타입설명
startjava.time.DurationRepeatRange구간 반복 시작 위치를 업데이트한 오브젝트를 반환

withEnd

fun withEnd(end: Duration): RepeatRange
파라미터타입반환 타입설명
endjava.time.DurationRepeatRange구간 반복 종료 위치를 업데이트한 오브젝트를 반환

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()를 호출할 때 사용하여 미디어 플레이어를 설정합니다.


생성자 파라미터

이름타입설명필수기본값
allowsBackgroundPlaybackBoolean백그라운드 재생을 허용할 지 여부Xfalse
allowsCellularAccessBoolean셀룰러 데이터 사용을 허용할 지 여부Xtrue
allowsPictureInPicturePlaybackBoolean화면 속 화면 모드를 허용할 지 여부Xtrue
controllerShowTimeoutjava.time.Duration컨트롤러를 보여줄 최대 시간X5초
defaultPlaybackRateFloat미디어의 재생 속도X1.0
seekBackwardIncrementjava.time.Duration현재 위치에서 전으로 이동하는 시간의 크기X10초
seekForwardIncrementjava.time.Duration현재 위치에서 후로 이동하는 시간의 크기X10초
screenOrientationLockScreenOrientationLock화면 고정 방향XOff
subtitleDisplayPositionSubtitleDisplayPosition자막 출력 위치XOnVideo
subtitleTextPositionFloat자막 위치X1.0
subtitleTextSizeSubtitleTextSize자막 크기XPixel(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.01.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~1f1f

자막 위치를 나타내는 속성입니다. 이 속성은 화면에서 자막이 배치될 위치를 비율로 표현하며, 값의 범위는 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,
)

미디어 플레이어 설정을 담고 있는 구성 객체입니다.

참고: FragmentManager.load

속성

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의 미디어 아이템 정보를 가져올 수 있습니다.

참고: PlaybackInfo

정적 속성

shared

companion object {
    val shared: PlaybackInfoRepository
}
타입설명설정
PlaybackInfoRepository현재 재생 정보 저장소에 접근하기 위한 속성불가능

재생 정보 저장소에 접근하기 위한 정적 속성입니다. 아래에 언급되는 메서드를 호출할 때, PlaybackInfoRepository.shared를 사용하여 접근할 수 있습니다.


메서드

findBy

fun findBy(uri: Uri): PlaybackInfo?
파라미터타입반환 타입설명
uriandroid.net.UriPlaybackInfo?미디어 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"
참고: sampleMimeType

TimeRange

import com.newin.nplayer.sdk.utils.TimeRange
data class TimeRange(val start: Duration, val duration: Duration)

buffered 속성에서 사용되는 데이터 클래스입니다.


생성자 파라미터

이름타입설명필수
startjava.time.Duration구간 시작 위치 값O
durationjava.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
파라미터타입반환 타입설명
indexIntjava.time.Durationindex 번째 데이터의 구간 시작 위치를 반환

end

fun end(index: Int): Duration
파라미터타입반환 타입설명
indexIntjava.time.Durationindex 번째 데이터의 구간 종료 위치를 반환

Track

import com.newin.nplayer.sdk.extensions.Track
sealed class Track

AudioTrack, SubtitleTrack, VideoTrack에 사용하기 위한 클래스입니다.

참고: C.TrackType

속성

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) 인지 알려주는 속성입니다.

참고: C.TrackType

format

val format: Format
타입설명
Format트랙의 포맷

현재 트랙의 format을 나타내는 속성입니다.

참고: Format

isSelected

val isSelected: Boolean
타입설명
Boolean트랙의 선택 여부

현재 트랙이 선택되었는지 여부를 나타내는 속성입니다.

Uri

import android.net.Uri

android.net.Uri 클래스를 확장하여, Uri를 미디어 아이템으로 만드는 메서드를 제공합니다.

참고: android.net.Uri

메서드

toMediaItem

fun Uri.toMediaItem(): MediaItem

uri를 미디어 아이템으로 만드는 메서드입니다.

VideoTrack

import com.newin.nplayer.sdk.extensions.VideoTrack
class VideoTrack : Track

Track 클래스를 확장한 클래스로, 비디오 트랙에 사용되는 클래스입니다.

참고: Track
videoTracks

WatermarkSettings

import com.newin.nplayer.sdk.WatermarkSettings
data class WatermarkSettings

워터마크 설정을 나타내는 데이터 클래스입니다.


속성

이름타입설명비고
durationjava.time.Duration유지 시간
intervaljava.time.Duration출력 주기
positionWatermarkSettings.Position워터마크의 위치
textString워터마크 출력 내용
textColorString글자 색상예: #ff00ff
textOpacityDouble글자의 불투명도범위: 0.0~1.0
textSizeDouble글자 크기범위: 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

다운로드가 실패한 이유를 나타내는 열거형입니다.

참고: DownloadItem

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

아이템의 현재 다운로드 상태를 나타냅니다.

참고: DownloadItem

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. 화면 중앙의 왼쪽에는 화면 회전 잠금, 구간 반복, 트랙 설정 버튼이 있습니다.
  3. 화면 중앙의 오른쪽에는 재생 속도와 관련된 버튼들이 있습니다.
  4. 화면 하단에는 화면 잠금 버튼과 미디어 네비게이션 버튼, 화면 크기 조절 버튼이 있습니다.

화면 구성에 대한 더 자세한 설명은 아래를 참고하십시오.

상단 인터페이스

1. 종료 버튼

미디어 플레이어를 종료합니다.

2. 타임바

사용자가 현재 재생 위치를 확인 하거나, 드래그나 클릭 등을 통해서 재생 위치를 변경할 수 있습니다.

왼쪽에는 현재 재생되는 위치가 시:분:초로 표시되며, 오른쪽에는 남은 시간이 표시됩니다.

위의 예제 그림을 보면, 미디어는 지금 10분 1초 부분을 재생하고 있고, 앞으로 4분 47초 남아있음을 나타냅니다.

재생 속도가 1이 아닐 경우에는 재생 속도를 고려하여 계산된 현재 재생 위치와 남은 시간을 아래 부분에 추가적으로 표시합니다.

아래의 그림은 재생 속도가 1.8배속일 때의 타임바를 보여줍니다.

3. 메뉴 버튼

메뉴를 엽니다.

4. 화면 속 화면 버튼

화면 속 화면 모드로 전환합니다. 안드로이드 8.0(API 수준 26)부터 사용 가능합니다. 보다 자세한 설명은 메뉴 내의 화면 속 화면을 참고하세요.






메뉴

재생 목록

현재 플레이어에 있는 재생 목록을 보여줍니다.

재생 목록에 있는 미디어 아이템을 선택하면, 재생 목록 화면은 닫지 않고, 해당 미디어 아이템을 재생합니다. 현재 재생되고 있는 아이템은 오른쪽 아이콘(✓)을 통해 확인할 수 있습니다. 완료 버튼을 클릭하면 재생 목록을 닫을 수 있습니다.

북마크

저장된 북마크 리스트를 보여줍니다.

우측 상단의 완료 버튼을 클릭하면 북마크 창을 닫을 수 있습니다.

좌측 상단의 플러스(+) 버튼을 클릭하여 현재 재생되고 있는 위치를 저장할 수 있습니다. 해당 버튼을 클릭하면, 북마크 제목을 넣을 수 있는 팝업창이 뜹니다. 확인을 클릭하여 현재 재생되는 위치를 북마크로 저장할 수 있습니다. 제목을 넣지 않아도, Untitled라는 이름의 북마크가 생성됩니다.

북마크 이름을 변경하려면 해당 아이템 행의 오른쪽에 있는 연필 버튼을 클릭하면 됩니다.

북마크를 삭제 하려면 해당 아이템 행의 맨 오른쪽의 휴지통 버튼을 클릭하면 됩니다.

화면 속 화면

화면 속 화면 모드를 활성화 하는 기능입니다. 상단 인터페이스의 화면 속 화면 버튼과 같은 기능입니다. 화면 속 화면 모드로 진입하면 아래와 같이 미디어가 표시됩니다.

화면 속 화면에 싱글 클릭하면, 다음과 같은 컨트롤러 화면이 나타납니다. 해당 화면은 안드로이드 8.0이상에서 기본적으로 제공되는 화면입니다.

  1. 설정 버튼 화면 속 화면 모드에 대한 설정을 수정합니다.

  2. X 버튼 재생중인 미디어 플레이어를 종료합니다.

  3. 화면 속 화면 모드 종료 버튼 화면 속 화면 모드를 종료합니다.

  4. 이전 버튼 현재 위치가 미디어의 처음 부분과 매우 가까울 경우에는 이전 미디어를 재생하고, 그렇지 않거나 이전 미디어가 없을 경우에는 현재 재생되는 미디어의 맨 앞으로 이동합니다.

  5. 재생 / 일시 정지 토글 버튼 미디어가 재생 중이면 일시 정지를 하고, 일시 정지 중이면 재생합니다.

  6. 다음 버튼 다음 미디어로 이동합니다. 만약 현재 미디어가 목록의 마지막이면 비활성화 됩니다.






중앙 인터페이스

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.
  • DownloadManager 개선
  • 제스쳐 동작 개선
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.
  • App Player 차단 로직 개선
2025.01.09.
  • CDNetworks DRM 재생 문제 수정
2025.01.07.
  • CDNetworks DRM 재생 문제 수정
  • MediaPlayer#release 문제 수정
2024.12.31.
  • CDNetworks DRM 재생 문제 수정
2024.12.06.
2024.11.11.
  • 자막 확대/축소 기능 추가
2024.10.30.
  • 자막 이동 기능 추가
  • 안정성 개선
2024.10.10.
2024.09.24.
  • 화면 속 화면에 진행바 및 10초 이동 버튼 추가
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.
  • 다른 앱 또는 백그라운드 전환 후 재생 창 닫히는 문제 수정
  • 녹화 / 캡쳐 차단 추가
  • 다운로드 저장소 선택 기능 추가
  • 만료된 컨텐츠 다운로드 시 실패 사유를 ‘Failed (Unauthorized)’로 표시되도록 변경
2024.04.03.
  • 안정성 개선
2024.04.01.
2024.03.21.
  • 자바 호환성 업데이트
2024.03.14.
2024.02.21.
  • 안정화
2024.02.15.
  • SDK 보안 기능 추가
    앱의 Package name을 콘솔에 등록한 후 콘솔의 App ID를 설정
    참고: 사용 방법
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 다운로드

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()
참고: seekable(_)

클래스

AudioTrack

class AudioTrack : MediaTrack  

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]현재 다운로드 목록에 있는 아이템들불가능

현재 다운로드 목록에 있는 아이템들을 반환하는 속성입니다.

참고: DownloadItem

maxParallelDownloads

var maxParallelDownloads: Int { get set }
타입설명설정기본값
Int동시에 다운받을 수 있는 아이템 최대 개수가능3

동시에 받을 수 있는 아이템의 최대 개수를 반환하거나 설정합니다.


메서드

add(mediaItem:allowsCellularAccess:)

@discardableResult func add(
    mediaItem: MediaItem,
    allowsCellularAccess: Bool = true
) -> DownloadItem.Id
파라미터타입설명필수기본값
mediaItemMediaItem추가하고자 하는 미디어 아이템O없음
allowsCellularAccessBool다운로드 시 셀룰러 데이터 사용 여부Xtrue

다운로드를 할 미디어 아이템을 추가합니다. 현재 다운로드가 진행되고 있는 아이템의 수가 maxParallelDownloads 보다 적으면 바로 다운로드를 시작합니다. 셀룰러 데이터 사용을 허용하지 않으려면, allowsCellularAccess를 false로 설정하여 호출하십시오.

addListener(_)

func addListener(_ listener: DownloadManager.Listener)
파라미터타입설명
listenerDownloadManager.Listener추가할 다운로드 매니저 리스너

다운로드 매니저 리스너를 추가하기 위한 메서드입니다. 리스너를 추가한 후, 해당 리스너가 더 이상 필요 없을 떄는 반드시 removeListener(_) 메서드를 사용해서 제거하세요.

itemsByStatus(_)

func itemsByStatus(_ status: DownloadItem.Status) -> [DownloadItem]
파라미터타입설명
statusDownloadItem.Status가져오고자 하는 아이템의 다운로드 상태

특정 다운로드 상태의 아이템 목록을 가져오기 위해서 사용하는 메서드입니다.

pause(id:)

func pause(id: DownloadItem.Id)
파라미터타입설명
idDownloadItem.Id일서 정지할 다운로드 아이템의 아이디

다운로드를 일시 정지할 때 사용하는 메서드입니다.

참고: DownloadItem.id

pauseAll()

func pauseAll()

다운로드 목록에 있는 모든 아이템의 다운로드를 일시 정지하게 하는 메서드입니다.

remove(id:)

func remove(id: DownloadItem.Id)
파라미터타입설명
idDownloadItem.Id제거할 다운로드 아이템의 아이디

다운로드 목록에서 아이템을 지울 때 사용하는 메서드입니다.

참고: DownloadItem.id

removeAll()

func removeAll()

다운로드 아이템 목록을 모두 지우는 메서드입니다.

removeCompleted()

func removeCompleted()

다운로드가 완료된 아이템을 목록에서 모두 지우는 메서드입니다.

removeListener(_)

func removeListener(_ listener: DownloadManager.Listener)
파라미터타입설명
listenerDownloadManager.Listener제거할 다운로드 매니저 리스너

다운로드 매니저 리스너를 제거하기 위한 메서드입니다.

resume(id:)

func resume(id: DownloadItem.Id)
파라미터타입설명
idDownloadItem.Id계속 진행할 다운로드 아이템의 아이디

다운로드를 일시 정지한 아이템의 다운로드를 재개하는 메서드입니다.

참고: DownloadItem.id

resumeAll()

func resumeAll()

일시 정지한 모든 아이템의 다운로드를 재개하는 메서드입니다.

DrmConfiguration.Builder

class Builder

DRM 구성을 위해 초기 설정을 합니다. 제공받은 App 아이디와 사용자 아이디(User ID)를 입력하면 됩니다. .build()를 호출하여 구성을 완료합니다.


생성자

init(appId: String, userId: String)
파라미터타입설명필수
appIdStringApp 아이디O
userIdString사용자 아이디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)
이름타입설명필수
urlURL미디어 주소O

미디어 주소를 통해 미디어 아이템을 만들 수 있습니다.

참고: URL

메서드

build()

func build() -> MediaItem

Builder를 이용하여 설정한 정보에 기반하여 미디어 아이템을 만듭니다.

참고: MediaItem

clippingConfiguration(_)

func clippingConfiguration(_ clippingConfiguration: ClippingConfiguration?) -> MediaItem.Builder
파라미터타입설명필수
clippingConfigurationClippingConfiguration?클리핑 설정O

클리핑 설정을 넘겨줍니다.

disablePlaybackRate(_)

func disablePlaybackRate(_ disablePlaybackRate: Bool) -> MediaItem.Builder
파라미터타입설명필수
disablePlaybackRateBool배속 기능을 허용할 지에 대한 여부O

배속 기능 허용 여부를 설정합니다. disablePlaybackRate(true)일 경우, 배속 기능이 제한됩니다.

drmConfiguration(_)

func drmConfiguration(_ drmConfiguration: DrmConfiguration?) -> MediaItem.Builder
파라미터타입설명필수
drmConfigurationDrmConfiguration?App 아이디와 사용자 아이디로 만든 DRM 설정O

DRM 설정을 넘겨줍니다.

mediaMetadata(_)

func mediaMetadata(_ mediaMetadata: MediaMetadata?) -> MediaItem.Builder
파라미터타입설명필수
mediaMetadataMediaMetadata?메타데이터 설정O

메타데이터 설정을 넘겨줍니다.

참고: MediaMetadata

returnUrl(_)

func returnUrl(_ returnUrl: URL?) -> MediaItem.Builder
파라미터타입설명필수
returnUrlURL?리턴 UrlO

리턴 Url을 설정합니다.

참고: URL

seekable(_)

func seekable(_ seekable: Bool) -> MediaItem.Builder
파라미터타입설명필수
seekableBoolSeek 기능을 허용할 지에 대한 여부O

Seek 기능 허용 여부를 설정합니다. seekable(false)일 경우, Seek 기능이 제한됩니다.

subtitleConfigurations(_)

func subtitleConfigurations(_ subtitleConfigurations: [SubtitleConfiguration]) -> MediaItem.Builder
파라미터타입설명필수
subtitleConfigurations[SubtitleConfiguration]자막 설정O

자막 설정을 넘겨줍니다.

url(_)

func url(_ url: URL) -> MediaItem.Builder

미디어 주소를 변경합니다.

참고: URL

useBookmarkCallback(_)

func useBookmarkCallback(_ useBookmarkCallback: Bool)
파라미터타입설명필수
useBookmarkCallbackBool북마크 콜백 사용 여부O

MediaMetadata.Builder

class Builder

제목, 아트워크, 다운로드 경로를 추가할 때 사용합니다. .build()를 호출하여 구성을 완료합니다.


생성자

init()

파라미터 없이 미디어 메타데이터를 초기화합니다.


메서드

artworkUrl(_)

func artworkUrl(_ artworkUrl: URL?) -> MediaMetadata.Builder

아트워크를 추가합니다.

참고: URL

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]오디오 트랙 리스트불가능[]

오디오 트랙 리스트를 반환하는 속성입니다.

참고: AudioTrack

autoplay

var autoplay: Bool { get set }
타입설명설정기본값
Bool미디어가 로드되었을 때, 즉 미디어가 준비가 된 즉시 재생할 것인지 결정하는 값가능true

미디어가 로드되었을 때, 즉시 재생이 시작되어야 하는지를 나타내는 속성입니다. true면 자동 재생합니다.

buffered

var buffered: [TimeRange] { get }
타입설명설정
[TimeRange]현재 버퍼에 담고 있는 미디어 리소스의 범위 데이터불가능

버퍼에 있는 미디어 리소스의 범위를 반환합니다.

참고: TimeRange

canStartPictureInPictureAutomatically

var canStartPictureInPictureAutomatically: Bool { get set }
타입설명설정기본값
Bool백그라운드에서 화면 속 화면 모드를 자동으로 시작할 지 여부가능true

앱이 백그라운드에 있을 때, 화면 속 화면 모드를 자동으로 시작할 수 있는지 여부를 의미하는 속성입니다.

currentMediaItem

var currentMediaItem: MediaItem? { get }
타입설명설정
MediaItem?현재 재생 중인 미디어 아이템불가능

현재 재생 중인 미디어 아이템을 반환하는 속성입니다.

참고: MediaItem

currentMediaItemIndex

var currentMediaItemIndex: Int { get }
타입설명설정
Int현재 재생 중인 미디어 아이템의 index불가능

현재 재생 중인 미디어 아이템의 index를 반환하는 속성입니다.

currentSrc

var currentSrc: URL? { get }
타입설명설정
URL?현재 선택된 미디어 아이템의 URL불가능

미디어 리소스의 uri를 반환하는 속성입니다.

currentTime

var currentTime: Duration { get set }
타입설명설정
Duration설정 시, 재생하고 싶은 특정 위치 (seekTo와 같은 동작)
반환 시, 현재 재생 시점
가능

현재 재생 위치를 Duration 단위로 나타내는 속성입니다.

defaultMuted

var defaultMuted: Bool { get set }
타입설명설정기본값
Bool음소거 기본 설정 상태가능false

오디오의 음소거 기본 설정을 나타내는 속성입니다.

defaultPlaybackRate

var defaultPlaybackRate: Float { get set }
타입설명설정범위기본값
Float미디어의 기본 재생 속도가능0.1~4.01.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

현재 재생 중인 미디어 화면이 상하 반전 상태인지 여부를 반환하는 속성입니다.

참고: flipVertical()

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]현재 재생 목록에 있는 미디어 아이템들가능[]

미디어 아이템들의 목록을 나타내는 속성입니다.

참고: 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.01.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화면 스케일링 상태가능

현대 미디어 화면의 스케일링 상태를 나타내는 속성입니다.

참고: ScalingMode

seekable

var seekable: [TimeRange] { get }
타입설명설정
[TimeRange]미디어 내 탐색 가능한 구간 범위불가능

미디어 내에서 탐색(seek)이 가능한 구간 범위를 반환하는 속성입니다.

참고: TimeRange

seekBackIncrement

var seekBackIncrement: Duration { get set }
타입설명설정기본값
Duration현재 위치에서 전으로 이동하는 시간의 크기가능10초

seekBack()을 호출하여 이동할 때, 현재 위치에서 전으로 이동하는 시간 정도를 나타내는 속성입니다. 왼쪽 방향키를 입력 받거나 하단 인터페이스의 되감기 버튼을 클릭했을 때 이 속성을 사용합니다.

참고: seekBack()

seekForwardIncrement

var seekForwardIncrement: Duration { get set }
타입설명설정기본값
Duration현재 위치에서 후로 이동하는 시간의 크기가능10초

seekForward()을 호출하여 이동할 때, 현재 위치에서 후로 이동하는 시간 정도를 나타내는 속성입니다. 오른쪽 방향키를 입력 받거나 하단 인터페이스의 빨리 감기 버튼을 클릭했을 때 이 속성을 사용합니다.

참고: 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]자막 리스트불가능[]

자막 리스트를 반환하는 속성입니다.

참고: TextTrack

videoPan

var videoPan: CGPoint { get }
타입설명설정
CGPoint미디어 화면의 이동 정도불가능

현재 미디어 화면이 이동된 정도를 나타내는 속성입니다.

videoSize

var videoSize: CGSize { get }
타입설명설정
CGSizewidth와 height를 속성으로 가지는 구조체불가능

현재 재생 중인 미디어의 원래 크기를 반환하는 속성입니다.

참고: CGSize

videoTracks

var videoTracks: [VideoTrack] { get }
타입설명설정기본값
[VideoTrack]비디오 트랙 리스트불가능[]

비디오 트랙 리스트를 반환하는 속성입니다.

참고: 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
파라미터타입반환 타입설명
handlerMediaPlayer.EventHandlerMediaPlayer.EventTarget이벤트 핸들러, 이벤트 타겟 참고

이벤트 핸들러를 추가하기 위한 메서드입니다. 반환된 이벤트 타겟은 이벤트 핸들러를 제거할 목적으로 removeEventHandler(_)에서 사용할 수 있습니다. 이벤트 핸들러를 추가한 후, 해당 이벤트 핸들러가 더 이상 필요 없을 때는 반드시 removeEventHandler(_) 메서드를 사용해서 제거하세요.

addEventListener(_)

func addEventListener(_ listener: MediaPlayer.EventListener)
파라미터타입설명
listenerMediaPlayer.EventListener이벤트 리스너 참고

이벤트 리스너를 추가하기 위한 메서드입니다. 이밴트 리스너를 추가한 후, 해당 이벤트 리스너가 더 이상 필요 없을 때는 반드시 removeEventListener(_) 메서드를 사용해서 제거하세요.

containsPointInSubtitleTextBounds(_)

func containsPointInSubtitleTextBounds(_ point: CGPoint) -> Bool
파라미터타입설명
pointCGPoint미디어 화면 내 확인할 위치

현재 미디어 화면에서 지정된 위치가 자막 영역에 포함되는지 여부를 반환하는 메서드입니다.

fastSeekTo(position:)

func fastSeekTo(position: Duration)
파라미터타입설명
positionDuration재생하고자 하는 위치 값

입력된 시간으로 빠르게 이동하기 위한 메서드입니다. 언제나 딱 정확한 위치로 가지는 않습니다.

flipHorizontal()

func flipHorizontal()

현재 미디어 화면을 좌우 반전시키는 메서드입니다.

flipVertical()

func flipVertical()

현재 미디어 화면을 상하 반전시키는 메서드입니다.

hasNextMediaItem()

func hasNextMediaItem() -> Bool

다음에 재생할 미디어가 있는지를 반환하는 메서드입니다. 목록의 마지막이 아니거나, 전체 반복 모드일 경우 true를 반환합니다.

hasPreviousMediaItem()

func hasNextMediaItem() -> Bool

바로 앞에 재생할 미디어가 있는지를 반환하는 메서드입니다. 목록의 처음이 아니거나, 전체 반복 모드일 경우 true를 반환합니다.

load(mediaItem:)

func load(mediaItem: MediaItem)
파라미터타입설명
mediaItemMediaItem로드하려는 미디어 아이템

하나의 미디어를 로드하기 위한 메서드입니다.

참고: MediaItem

load(mediaItems:startMediaItemIndex:)

func load(
    mediaItems: [MediaItem],
    startMediaItemIndex: Int = 0
)
파라미터타입설명
mediaItems[MediaItem]로드하려는 미디어 아이템 목록
startMediaItemIndexInt목록 중에서 처음 재생할 미디어 아이템의 index

여러 개의 미디어를 로드하기 위한 메서드입니다. 처음으로 재생할 미디어를 정할 수 있습니다.

참고: MediaItem

load(src:)

func load(src: URL)
파라미터타입설명
srcURL로드하려는 미디어의 주소

URL을 사용하여 미디어를 로드하기 위한 메서드입니다.

pause()

func pause()

미디어를 일시 정지하기 위한 메서드입니다.

play()

func play()

미디어를 재생하기 위한 메서드입니다.

prepare()

func prepare()

미디어 관련 기본 설정을 하기 위한 메서드입니다. 이 메서드를 실행하면, autoplay, defaultPlaybackRate, defaultMuted 설정을 미디어 플레이어에 적용하고, 미디어를 로딩하는 과정까지 진행합니다.

removeEventHandler(_)

func removeEventHandler(target: MediaPlayer.EventTarget)
파라미터타입설명
targetMediaPlayer.EventTarget이벤트 핸들러, 이벤트 타겟 참고

addEventHandler(_)로 추가된 이벤트 핸들러를 제거하기 위한 메서드입니다.

removeEventListener(_)

func removeEventListener(_ listener: MediaPlayer.EventListener)
파라미터타입설명
listenerMediaPlayer.EventListener이벤트 리스너 참고

addEventListener(_)로 추가된 이벤트 리스너를 제거하기 위한 메서드입니다.

resumePlayback()

func resumePlayback()

suspendPlayback 호출로 인한 일시 정지된 재생을 재기합니다.

seekBack()

func seekBack()

현재 위치에서 속성 seekBackIncrement 만큼 전으로 이동하기 위한 메서드입니다.

seekBack(increment:)

func seekBack(increment: Duration)
파라미터타입설명
incrementDuration새로운 위치는 현재 위치에서 입력된 파라미터를 뺀 결과입니다.
즉, 음수 입력 시, 입력된 파라미터의 절대값만큼 후로 이동합니다.

현재 위치에서 입력된 시간 전으로 이동하기 위한 메서드입니다.

seekForward()

func seekForward()

현재 위치에서 속성 seekForwardIncrement 만큼 후로 이동하기 위한 메서드입니다.

seekForward(increment:)

func seekForward(increment: Duration)
파라미터타입설명
incrementDuration새로운 위치는 현재 위치에서 입력된 파라미터를 더한 결과입니다.
즉, 음수 입력 시, 입력된 파라미터의 절대값만큼 되돌아갑니다.

현재 위치에서 입력된 시간 후로 이동하기 위한 메서드입니다.

seekTo(position:)

func seekTo(position: Duration)
파라미터타입설명
positionDuration입력된 값으로 재생 위치를 이동합니다.

입력된 시간 위치로 정확하게 이동하기 위한 메서드입니다.

seekTo(mediaItemIndex:position:)

func seekTo(mediaItemIndex: Int, position: Duration = .indefinite)
파라미터타입설명필수
mediaItemIndexInt재생 목록에서 미디어 아이템의 indexO
positionDuration해당 미디어에서 재생하고하 하는 위치
입력하지 않으면, 마지막에 재생했던 위치에서 시작합니다.
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)
파라미터타입설명필수
positionDuration시작 위치O
fastBooltrue이면 빠른 이동, false이면 정확한 이동을 합니다.O

스크러빙을 시작합니다.

stop()

func stop()

미디어를 완전 종료할 때 부르는 메서드입니다. MediaPlayer가 종료되면 자동으로 호출됩니다.

stopPictureInPicture()

func stopPictureInPicture()

화면 속 화면 모드를 종료하는 메서드입니다.

stopScrubbing(position:)

func stopScrubbing(position: Duration)
파라미터타입설명필수
positionDuration시작 위치O

스크러빙을 종료합니다.

suspendPlayback()

func suspendPlayback()

재생을 일시 정지합니다. 다시 재생을 재기하려면 resumePlayback을 호출합니다.

updateScrubbing(position:)

func updateScrubbing(position: Duration)
파라미터타입설명필수
positionDuration시작 위치O

스크러빙 위치를 갱신합니다.

zoomVideo(_)

func zoomVideo(_ zoom: Double)
파라미터타입설명
zoomDouble비디오 확대/축소 비율

비디오 확대/축소할 때 사용하는 메서드입니다.

zoomVideo(_:pivot:)

func zoomVideo(_ zoom: Double, pivot: CGPoint)
파라미터타입설명필수
zoomDouble비디오 확대/축소 비율O
pivotCGPoint중심 좌표O

비디오 확대/축소가 적용될 중심이 되는 좌표를 지정하여 확대/축소할 때 사용하는 메서드입니다.

참고: zoomVideo(_)

열거형

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
)
파라미터타입설명
mediaItems[MediaItem]로드하려는 미디어 아이템 목록
startMediaItemIndexInt목록 중에서 처음 재생할 미디어 아이템의 index

여러 개의 미디어를 로드하기 위한 메서드입니다. 처음으로 재생할 미디어를 정할 수 있습니다.

참고: MediaItem

close()

func close()

뷰 컨트롤러를 닫습니다. UIViewControllerdismiss를 호출한 것과 동일합니다.

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?
파라미터타입반환 타입설명
urlURLPlaybackInfo?미디어 uri를 입력하여 재생 정보를 반환
참고: PlaybackInfo

SubtitleConfiguration.Builder

class Builder

자막을 추가할 때 사용합니다. URL을 파라미터로 넣어서 설정을 시작하고 필요한 요소를 추가합니다. .build()를 호출하여 구성을 완료합니다.


생성자

init(url: URL)
파라미터타입설명
urlURL자막 주소

URL을 입력받아서 초기 설정을 합니다.

참고: URL

메서드

build()

func build() -> SubtitleConfiguration

입력된 구성 요소를 바탕으로 자막을 구성합니다.

label(_)

func label(_ label: String?) -> SubtitleConfiguration.Builder
파라미터타입설명
labelString?설정하고자 하는 라벨

라벨을 설정합니다.

language(_)

func language(_ language: String?) -> SubtitleConfiguration.Builder
파라미터타입설명
languageString?설정하고자 하는 언어

언어를 설정합니다.

mode(_)

func mode(_ mode: SubtitleConfiguration.Mode) -> SubtitleConfiguration.Builder
파라미터타입설명
modeSubtitleConfiguration.Mode설정하고자 하는 자막 모드

모드를 설정합니다.

TextTrack

class TextTrack : MediaTrack

MediaTrack을 확장한 클래스로, 자막에 사용되는 클래스입니다.

부모 클래스: MediaTrack

클래스 메서드

load(url:)

class func load(url: URL) async throws -> [TextTrack] 
파라미터타입설명
urlURL자막을 가져올 url

url을 통해서, 자막을 가져오는 메서드입니다.


클래스

TextTrack.Cue

class Cue : Equatable

텍스트 큐를 나타내는 클래스입니다. 아래의 속성을 가지고 있습니다.

이름파라미터설명
idString?자막 아이디
startTimeDuration시작 위치
endTimeDuration종료 위치
textString?자막

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]미디어 아이템 목록없음
startIndexInt재생할 미디어의 인덱스0
configurationMediaPlayerViewController
.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를 확장한 클래스로, 비디오 트랙에 사용되는 클래스입니다.

부모 클래스: 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?)
이름타입설명필수
startTimeDuration시작 시간 (초)O
endTimeDuration?끝 시간 (초) (지정하지 않으면 미디어의 끝 시간으로 설정)X

미디어 항목을 사용자 지정 시작 및 끝 위치로 잘라냅니다.


속성

startTime

let startTime: Duration
타입설명
Duration시작 시간 (초)

endTime

var endTime: Duration? = nil
타입설명
Duration?끝 시간 (초)

DownloadItem

struct DownloadItem

다운로드 아이템을 나타내는 구조체입니다. 다운로드에 대한 정보, 진행 상태 등의 정보를 가지고 있습니다.


속성

displayPath

let displayPath: String
타입설명
String다운로드된 아이템이 저장되는 상대 경로. 이때 상대 경로는 downloadsUrl를 기준으로 함
비교: toUrl
참고: downloadsUrl

failedReason

let failedReason: String?
타입설명
String?다운로드가 실패한 이유

fromUrl

let fromUrl: URL
타입설명
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다운로드된 아이템이 저장되는 절대 경로

다운로드된 아이템이 저장되는 절대 경로입니다.

비교: displayPath 참고: URL

열거형

Status

enum Status : String

아이템의 현재 다운로드 상태를 나타냅니다.

DrmConfiguration

struct DrmConfiguration

DRM 설정을 위한 구조체입니다.


생성자

init(appId: String, userId: String, userData: [String: Any])
이름타입설명필수
appIdStringApp 아이디O
userIdString사용자 아이디O
userData[String : Any]사용자 데이터O

App 아이디, 사용자 아이디, 사용자 데이터를 입력하여 Drm 설정을 할 수 있습니다.


속성

appId

let appId: String
타입설명
StringApp 아이디

offlineAccessPeriod

var offlineAccessPeriod: Duration? = nil
타입설명
Duration?다운로드 컨텐츠의 오프라인 재생 기간

userData

var userData: [String : Any]
타입설명
[String : Any]사용자 데이터
userId
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 }

밀리초, 마이크로초, 나노초를 나타내는 속성입니다. 초에 해당하는 secondsCMTime에 포함되어 있습니다.


정적 메서드

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?메타데이터 설정 정보
참고: MediaMetadata

returnUrl

let returnUrl: URL?
타입설명
URL?Agent에서 설정한 미디어 아이템의 리턴 Url
참고: MediaItem내의 returnUrl
URL

seekable

let seekable: Bool
타입설명
Bool미디어 Seek 기능 허용 여부

subtitleConfigurations

let subtitleConfigurations: [SubtitleConfiguration]
타입설명
[SubtitleConfiguration]미디어 자막 정보

title

var title: String { get }
타입설명
String미디어 제목

url

let url: URL
타입설명
URL미디어 주소
참고: URL

useBookmarkCallback

var useBookmarkCallback: Bool
타입설명
Bool북마크 콜백 사용 여부

메서드

buildUpon()

func buildUpon() -> MediaItem.Builder

Builder를 사용하여 미디어 아이템에 대한 초기 설정을 합니다. 미디어 아이템의 기존 메타데이터나 DRM 구성을 바꿀 때 사용시면 됩니다. 미디어 아이템으로 사용하기 위해서는 반드시 .build()를 해야합니다.


정적 메서드

from(url:)

static func from(url: URL) -> MediaItem
타입설명
URLURL 참고

미디어 주소를 파라미터로 입력하여 미디어 아이템을 구성하는 정적 함수입니다.


클래스

MediaItem.Builder

class Builder

미디어 아이템을 구성하기 위한 클래스입니다. 자세한 내용은 MediaItem.Builder를 참고하세요.

MediaMetadata

struct MediaMetadata

미디어 메타데이터를 나타내는 구조체입니다. 아래와 같은 속성 및 메서드를 제공합니다.


속성

artworkUrl

let artworkUrl: URL?
타입설명
URL?미디어 아이템의 아트워크 경로
참고: URL

expiresOn

let expiresOn: Date?
타입설명
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)
이름타입설명필수
startDuration반복 구간의 시작 위치O
endDuration반복 구간의 종료 위치O

속성

end

var end: Duration
타입설명
Duration반복 구간의 종료 위치

start

var start: Duration
타입설명
Duration반복 구간의 시작 위치

메서드

with(end:) -> RepeatRange

func with(end: Duration) -> MediaPlayer.RepeatRange
파라미터타입반환 타입설명
endDurationMediaPlayer.RepeatRange반복 구간 종료 위치를 변경한 뒤 구간 범위를 반환

with(start:) -> RepeatRange

func with(start: Duration) -> MediaPlayer.RepeatRange
파라미터타입반환 타입설명
startDurationMediaPlayer.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.01.0

미디어 재생 속도를 나타내는 속성입니다.

seekBackwardIncrement

var seekBackwardIncrement: Duration = .seconds(10)
타입설명설정기본값
Duration현재 위치에서 전으로 이동하는 시간의 크기가능10초

현재 위치에서 전으로 탐색하는 시간을 나타내는 속성입니다.

참고: Duration

seekForwardIncrement

var seekForwardIncrement: Duration = .seconds(10)
타입설명설정기본값
Duration현재 위치에서 후로 이동하는 시간의 크기가능10초

현재 위치에서 후로 탐색하는 시간을 나타내는 속성입니다.

참고: Duration

screenOrientationLock

var screenOrientationLock: ScreenOrientationLock = .off
타입설명설정기본값
ScreenOrientationLock화면 방향 고정 상태가능.off

화면 방향 고정 상태를 나타내는 속성입니다.

subtitleDisplayPosition

var subtitleDisplayPosition: SubtitleDisplayPosition = .onVideo
타입설명설정기본값
SubtitleDisplayPosition자막 출력 위치가능.onVideo

자막 출력 위치를 나타내는 속성입니다.

subtitleTextPosition

var subtitleTextPosition: CGFloat = 1
타입설명설정범위기본값
CGFloat자막 위치가능0.0~1.01.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)
이름타입설명필수기본값
urlURL자막 주소O없음
languageString?자막 언어Xnil
labelString?자막 라벨Xnil
modeSubtitleConfiguration.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를 참고하시기 바랍니다. 이 구조체는 bufferedseekable 속성에서 사용됩니다.

프로토콜

DownloadManager.Listener (DownloadManagerListener)

extension DownloadManager { 
    public typealias Listener = DownloadManagerListener
}
protocol DownloadManagerListener: AnyObject

DownloadManager.Listener(DownloadManagerListener)는 다운로드와 관련된 이벤트 처리를 위한 프로토콜로, 위와 같은 메서드를 제공합니다. 각각 메서드에 대한 설명은 아래 메서드를, 리스너를 추가하는 방법은 addListener(_)를 참고하시면 됩니다.


메서드

onItemAdded(_)

func onItemAdded(_ item: DownloadItem)
파라미터타입설명
itemDownloadItem처리하고자 하는 다운로드 아이템

다운로드할 아이템이 목록에 추가될 때 처리를 위한 메서드입니다. 아이템을 추가할 때 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.

참고: DownloadItem

onItemRemoved(_)

func onItemRemoved(_ item: DownloadItem)
파라미터타입설명
itemDownloadItem처리하고자 하는 다운로드 아이템

다운로드 목록에서 아이템을 제거할 때 처리를 위한 메서드입니다. 아이템이 제거될 때 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.

참고: DownloadItem

onProgressUpdated(_)

func onProgressUpdated(_ item: DownloadItem)
파라미터타입설명
itemDownloadItem처리하고자 하는 다운로드 아이템

다운로드가 진행되는 매순간을 처리하기 위한 메서드입니다. 아이템 다운로드가 진행됨에 따라 추가적인 처리가 필요할 경우에 이 메서드를 사용합니다.

참고: DownloadItem

onStatusChanged(_)

func onStatusChanged(_ item: DownloadItem)
파라미터타입설명
itemDownloadItem처리하고자 하는 다운로드 아이템

다운로드 아이템의 상태가 변경될 때 처리를 위한 메서드입니다. 즉, 다운로드를 완료하였거나, 실패하였을 때 등의 상황에 추가적인 처리가 필요할 경우에 이 메서드를 사용할 수 있습니다.

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)
파라미터 이름타입설명
durationDuration미디어 길이

미디어의 길이(duration)가 변경되는 시점에 실행합니다.

이벤트 핸들러: MediaPlayer.EventHandler.durationChange
참고: Duration

onEnded()

func onEnded()

재생 목록의 마지막 미디어의 재생이 완료된 시점에 실행합니다.

이벤트 핸들러: MediaPlayer.EventHandler.ended

onError(error:)

func onError(error: Error)
파라미터 이름타입설명
errorError에러

에러가 발생할 때 실행합니다.

onLoadedData()

func onLoadedData()

미디어 아이템이 로드되었을 때 실행합니다.

onLoadStart()

func onLoadStart()

미디어 리소스를 로딩하기 시작할 때 실행합니다.

이벤트 핸들러: MediaPlayer.EventHandler.loadStart

onMediaItemTransition(item:)

func onMediaItemTransition(item: MediaItem?)
파라미터 이름타입설명
itemMediaItem교체된 미디어 아이템

미디어 아이템이 교체 되는 시점에 실행합니다.

onPause()

func onPause()

미디어가 일시 정지 상태로 진입하는 시점에 실행합니다.

이벤트 핸들러: MediaPlayer.EventHandler.pause
비교: onPlay

onPictureInPictureActiveChange(active:)

func onPictureInPictureActiveChange(active: Bool)
파라미터 이름타입설명
activeBool현재 화면 속 화면 모드인 지 여부

화면 속 화면 모드가 켜지거나 꺼지는 시점에 실행합니다.

onPictureInPicturePossibleChange(possible:)

func onPictureInPicturePossibleChange(possible: Bool)
파라미터 이름타입설명
possibleBool화면 속 화면 모드 사용 가능 여부

화면 속 화면 모드를 사용할 수 있을 때, (혹은 반대의 경우에) 실행합니다. 예를 들면, 화면 속 화면 모드 버튼을 활성화 및 비활성화 하기 위해서 필요합니다.

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 순서로 호출됩니다.

이벤트 핸들러: MediaPlayer.EventHandler.play
비교: onPause
참고: onPlaying

onPlaybackFinish(mediaItem:position:duration:reason:)

public func onPlaybackFinish(
    mediaItem: MediaItem,
    position: Duration,
    duration: Duration?,
    reason: PlaybackFinishReason
)
파라미터 이름타입설명
mediaItemMediaItem종료된 미디어 아이템
positionDuration마지막 재생 위치
durationDuration미디어 길이
reasonPlaybackFinishReason미디어 종료 원인

미디어가 종료될 때 실행합니다. 이 때 마지막 재생 위치(position)와 미디어의 길이(duration) 값을 사용할 수 있습니다. 주의할 점은, 미디어가 로드된 후에 종료할 때만 실행된다는 것입니다. 만약 미디어가 로드되기 전에 종료되는 상황에도 사용하려면, onUnload(mediaItem:)를 참고하세요.

onPlaybackStateChange(state:)

func onPlaybackStateChange(state: MediaPlayer.PlaybackState)
파라미터 이름타입설명
stateMediaPlayer.PlaybackState재생 상태

미디어 로딩 상태에 따라서, 즉, 버퍼링인지 준비가 된 상태인지, 끝이 났는지, 플레이어를 종료하였는지 등의 상황이 발생하면 실행합니다. 상황에 따른 설명은 playbackState를 참고하세요.

onPlaying()

func onPlaying()

미디어가 재생 상태로 변한 직후에 실행합니다. playing과 관련된 이벤트 핸들러는 play 이벤트 이후에 항상 호출됩니다.

이벤트 핸들러: MediaPlayer.EventHandler.playing
참고: onPlay

onPositionDiscontinuity(oldPosition:newPosition:)

func onPositionDiscontinuity(oldPosition: Duration, newPosition: Duration)
파라미터 이름타입설명
oldPositionDuration이전 재생 위치
newPositionDuration바뀐 재생 위치

재생 위치가 변경되는 시점에 실행합니다. 이전 위치와 이동한 위치 모두 접근이 가능합니다.

onProgress()

func onProgress()

플레이어가 리소스를 읽을 때 실행합니다.

이벤트 핸들러: MediaPlayer.EventHandler.progress

onRateChange(rate:)

func onRateChange(rate: Float)
파라미터 이름타입설명
rateFloat재생 속도

재생 속도가 변경되는 시점에 실행합니다.

onRepeatModeChange(mode:)

func onRepeatModeChange(mode: MediaPlayer.RepeatMode)
파라미터 이름타입설명
modeMediaPlayer.RepeatMode반복 모드 종류

반복 모드가 설정되었을 때 실행합니다.

onRepeatRangeChange(range:)

func onRepeatRangeChange(range: MediaPlayer.RepeatRange?)
파라미터 이름타입설명
rangeMediaPlayer.RepeatRange?구간 반복에서의 구간

구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때 실행합니다.

onScalingModeChange(mode:)

func onScalingModeChange(mode: MediaPlayer.ScalingMode)
파라미터 이름타입설명
modeMediaPlayer.ScalingMode화면 스케일링 상태

미디어 화면의 스케일링 상태가 변하는 시점에 실행합니다.

onSeeked()

func onSeeked()

seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 실행합니다.

이벤트 핸들러: MediaPlayer.EventHandler.seeked

onSeeking()

func onSeeking()

seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 실행합니다.

이벤트 핸들러: MediaPlayer.EventHandler.seeking

onScrubMove(position: Duration)

func onScrubMove(position: Duration)
파라미터 이름타입설명
positionDuration스크러빙 위치

스크러빙 위치가 갱신되는 시점에 실행합니다.

onScrubStart(position: Duration)

func onScrubStart(position: Duration)
파라미터 이름타입설명
positionDuration스크러빙 위치

스크러빙이 시작되는 시점에 실행합니다.

onScrubStop(position: Duration)

func onScrubStop(position: Duration)
파라미터 이름타입설명
positionDuration스크러빙 위치

스크러빙이 종료되는 시점에 실행합니다.

onTimeUpdate(position:)

func onTimeUpdate(position: Duration)
파라미터 이름타입설명
positionDuration현재 재생 위치

currentTime이 변경되는 시점에 실행합니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.

이벤트 핸들러: MediaPlayer.EventHandler.timeUpdate
참고: Duration

onUnload(mediaItem:)

func onUnload(mediaItem: MediaItem)
파라미터 이름타입설명
mediaItemMediaItem종료된 미디어 아이템

미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때를 실행합니다.

이벤트 핸들러: MediaPlayer.EventHandler.unload
참고: MediaItem

onVideoSizeChange(size:)

func onVideoSizeChange(size: CGSize)
파라미터 이름타입설명
sizeCGSize영상 사이즈

미디어 아이템의 비디오 크기가 달라지는 시점에 실행합니다. 아이템을 교체하는 순간에는 (0.0, 0.0)의 값으로 바뀌는 것도 체크를 하니 참고하시기 바랍니다.

이벤트 핸들러: MediaPlayer.EventHandler.videoSizeChange
참고: CGSize

onVolumeChange(volume:muted:)

func onVolumeChange(volume: Float, muted: Bool)
파라미터 이름타입설명
volumeFloat디바이스 음량
mutedBool음소거 여부

볼륨이 변경되는 시점에 실행합니다. 무음(muted) 상태가 변경될 때도 실행합니다.

onWaiting()

func onWaiting()

일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 실행됩니다. playbackState가 .buffering이 될 때 호출됩니다.

이벤트 핸들러: MediaPlayer.EventHandler.waiting

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)
파라미터 이름타입설명
durationDuration미디어 길이

미디어의 길이(duration)가 변경되었을 때를 처리하기 위한 핸들러입니다.

이벤트 리스너: onDurationChange(duration:)
참고: Duration

ended

case ended(() -> Void)

재생 목록의 마지막 미디어의 재생이 완료된 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onEnded()

error

case error((_ error: Error) -> Void)
파라미터 이름타입설명
errorError에러

에러가 발생할 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onError(error:)
참고: Error
MediaPlayerError

loadedData

case loadedData(() -> Void)

미디어 아이템이 로드되었을 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onLoadedData()

loadStart

case loadStart(() -> Void)

미디어 리소스를 로딩하기 시작할 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onLoadStart()

mediaItemTransition

case mediaItemTransition((_ item: MediaItem?) -> Void)
파라미터 이름타입설명
itemMediaItem교체된 미디어 아이템

미디어 아이템이 교체 되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onMediaItemTransition(item:) 참고: MediaItem

pause

case pause(() -> Void)

미디어가 일시 정지 상태로 진입하는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onPause()
비교: play

pictureInPictureActiveChange

case pictureInPictureActiveChange((_ active: Bool) -> Void)
파라미터 이름타입설명
activeBool현재 화면 속 화면 모드인 지 여부

화면 속 화면 모드가 켜지거나 꺼지는 시점에 사용하기 위한 핸들러입니다.

pictureInPicturePossibleChange

case pictureInPicturePossibleChange((_ possible: Bool) -> Void)
파라미터 이름타입설명
possibleBool화면 속 화면 모드 사용 가능 여부

화면 속 화면 모드를 사용할 수 있을 때, (혹은 반대의 경우에) 사용하기 위한 핸들러입니다. 예를 들면, 화면 속 화면 모드 버튼을 활성화 및 비활성화 하기 위해서는 이 핸들러가 필요합니다.

pictureInPictureDidStart

case pictureInPictureDidStart(() -> Void)

화면 속 화면 모드가 시작한 후 사용하기 위한 핸들러입니다.
화면 속 화면 모드로 들어가면, pictureInPictureWillStartpictureInPictureActiveChange(true) → pictureInPictureDidStart의 순서대로 호출됩니다.

이벤트 리스너: onPictureInPictureDidStart()

pictureInPictureDidStop

case pictureInPictureDidStop(() -> Void)

화면 속 화면 모드가 끝나고 난 후 사용하기 위한 핸들러입니다.
화면 속 화면 모드가 종료되면, pictureInPictureWillStoppictureInPictureActiveChange(false) → pictureInPictureDidStop의 순서대로 호출됩니다.

이벤트 리스너: onPictureInPictureDidStop()

pictureInPictureWillStart

case pictureInPictureWillStart(() -> Void)

화면 속 화면 모드가 시작하기 직전에 사용하기 위한 핸들러입니다.
화면 속 화면 모드로 들어가면, pictureInPictureWillStartpictureInPictureActiveChange(true) → pictureInPictureDidStart의 순서대로 호출됩니다.

이벤트 리스너: onPictureInPictureWillStart()

pictureInPictureWillStop

case pictureInPictureWillStop(() -> Void)

화면 속 화면 모드가 끝나기 직전애 사용하기 위한 핸들러입니다.
화면 속 화면 모드가 종료되면, pictureInPictureWillStoppictureInPictureActiveChange(false) → pictureInPictureDidStop의 순서대로 호출됩니다.

이벤트 리스너: onPictureInPictureWillStop()

play

case play(() -> Void)

미디어가 일시 정지 상태에서 재생 상태로 변경되는 시점에 사용하기 위한 핸들러입니다. 사용자가 재생 버튼을 클릭하거나 mediaPlayer.play()를 호출하는 등 플레이어에 재생 명령을 내렸을 때 등과 같이 명령을 했을 때 상황에서 이벤트 처리를 여기서 할 수 있습니다. play와 관련된 이벤트 핸들러가 호출된 이후에 playing 이벤트 핸들러는 언제나 호출됩니다. 재생 중에 미디어를 이동하든지 재생 위치를 이동하면, 언제나 pause -> play -> playing 순서로 호출됩니다.

이벤트 리스너: onPlay()
비교: pause
참고: playing

playbackFinish

case playbackFinish(
    (_ mediaItem: MediaItem, _ position: Duration, _ duration: Duration?, _ reason: PlaybackFinishReason) -> Void
)
파라미터 이름타입설명
mediaItemMediaItem종료된 미디어 아이템
positionDuration마지막 재생 위치
durationDuration미디어 길이
reasonPlaybackFinishReason미디어 종료 원인

미디어가 종료될 때 사용하기 위한 핸들러입니다. 이 때 마지막 재생 위치(position)와 미디어의 길이(duration) 값을 사용할 수 있습니다. 주의할 점은, 미디어가 로드된 후에 종료될 때만 사용할 수 있다는 것입니다. 만약 미디어가 로드되기 전에 종료되는 상황에도 사용하려면, Unload를 참고하세요.

playbackStateChange

case playbackStateChange((_ state: MediaPlayer.PlaybackState) -> Void)
파라미터 이름타입설명
stateMediaPlayer.PlaybackState재생 상태

미디어 로딩 상태에 따른 처리, 즉, 버퍼링인지 준비가 된 상태인지, 끝이 났는지, 플레이어를 종료하였는지 등의 상황에 따라 처리하기 위한 핸들러입니다. 상황에 따른 설명은 playbackState를 참고하세요.

playing

case playing(() -> Void)

미디어가 재생 상태로 변한 직후에 사용하기 위한 핸들러입니다. playing과 관련된 이벤트 핸들러는 play 이벤트 이후에 항상 호출됩니다.

이벤트 리스너: onPlaying()
참고: play

positionDiscontinuity

case positionDiscontinuity(
    (_ oldPosition: Duration, _ newPosition: Duration) -> Void
)
파라미터 이름타입설명
oldPositionDuration이전 재생 위치
newPositionDuration바뀐 재생 위치

재생 위치가 변경되는 시점에 사용하기 위한 핸들러입니다. 이전 위치와 이동한 위치 모두 접근이 가능합니다.

progress

case progress(() -> Void)

플레이어가 리소스를 읽을 때 사용하기 위한 핸들러입니다.

이벤트 리스너: onProgress()

rateChange

case rateChange((_ rate: Float) -> Void)
파라미터 이름타입설명
rateFloat재생 속도

재생 속도가 변경되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onRateChange(rate:)

repeatModeChange

case repeatModeChange((_ mode: MediaPlayer.RepeatMode) -> Void)
파라미터 이름타입설명
modeMediaPlayer.RepeatMode반복 모드 종류

반복 모드가 설정되었을 때 처리하기 위한 핸들러입니다.

이벤트 리스너: onRepeatModeChange(mode:)
참고: MediaPlayer.RepeatMode

repeatRangeChange

case repeatRangeChange((_ range: MediaPlayer.RepeatRange?) -> Void)
파라미터 이름타입설명
rangeMediaPlayer.RepeatRange?구간 반복에서의 구간

구간 반복 모드가 시작되거나 종료되었을 때, 그리고 구간 반복의 시작 위치 또는 종료 위치가 바뀌었을 때를 처리하기 위한 핸들러입니다.

scalingModeChange

case scalingModeChange((_ mode: MediaPlayer.ScalingMode) -> Void)
파라미터 이름타입설명
modeMediaPlayer.ScalingMode화면 스케일링 상태

미디어 화면의 스케일링 상태가 변하는 시점에 사용하기 위한 핸들러입니다.

seeked

case seeked(() -> Void)

seek 작업이 완료된 시점, 또는 재생 위치가 변경되는 시점, 또는 seeking 값이 false로 변경되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onSeeked()
비교: seeking

seeking

case seeking(() -> Void)

seek 작업이 시작되는 시점, 또는 seeking 값이 false에서 true로 변경되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onSeeking()
비교: seeked

textCueChange

case textCueChange((_ textCues: [TextTrack.Cue]) -> Void)
파라미터 이름타입설명
textCues[TextTrack.Cue]자막 큐들

자막 큐가 변경되는 시점에 사용하기 위한 핸들러입니다.

이벤트 리스너: onCueChange(textCues:)
참고: TextTrack.Cue

timeUpdate

case timeUpdate((_ position: Duration) -> Void)
파라미터 이름타입설명
positionDuration현재 재생 위치

currentTime이 변경되는 시점에 사용하기 위한 핸들러입니다. 즉, 미디어가 재생이 되는 동안 수행하려는 작업을 이곳에 구현하시면 됩니다.

이벤트 리스너: onTimeUpdate(position:)
참고: Duration

unload

case unload((_ mediaItem: MediaItem) -> Void)
)
파라미터 이름타입설명
mediaItemMediaItem종료된 미디어 아이템

미디어가 제거된 시점, 즉, 미디어 주소가 변경되기 직전, 기존에 존재하던 미디어를 비울 때를 처리하기 위한 핸들러입니다.

이벤트 리스너: onUnload(mediaItem:)
참고: MediaItem

videoSizeChange

case videoSizeChange((_ size: CGSize) -> Void)
파라미터 이름타입설명
sizeCGSize영상 사이즈

미디어 아이템의 비디오 크기가 달라지는 시점에 사용하기 위한 핸들러입니다. 아이템을 교체하는 순간에는 (0.0, 0.0)의 값으로 바뀌는 것도 체크를 하니 참고하시기 바랍니다.

이벤트 리스너: onVideoSizeChange(size:)
참고: CGSize

volumeChange

case volumeChange((_ volume: Float, _ muted: Bool) -> Void)
파라미터 이름타입설명
volumeFloat디바이스 음량
mutedBool음소거 여부

볼륨이 변경되는 시점에 사용하기 위한 핸들러입니다. 무음(muted) 상태가 변경될 때도 호출됩니다.

이벤트 리스너: onVolumeChange(volume:muted:)

waiting

case waiting(() -> Void)

일시적인 버퍼 부족, 즉 데이터가 충분히 로딩되지 못하거나 데이터가 없어서 재생이 정지된 시점에 사용하기 위한 핸들러입니다. playbackState가 .buffering이 될 때 호출됩니다.

이벤트 리스너: onWaiting()

MediaPlayer.PlaybackState

enum PlaybackState

현재 미디어 상태를 나타냅니다.

참고: playbackState

케이스

buffering

case buffering

미디어를 읽어오는 상태

ended

case ended

미디어가 목록의 마지막이며, 마지막 재생 위치에 도달한 상태

idle

case idle

미디어를 완전히 중지한 상태

ready

case ready

미디어가 준비된 상태 또는 로딩이 완료된 상태

MediaPlayer.RepeatMode

enum RepeatMode

현재 미디어의 반복 모드 상태를 나타냅니다.

참고: repeatMode

케이스

all

case all

전체 반복 모드 상태. 마지막 미디어가 종료되면 맨 처음 미디어로 이동합니다.

none

case none

반복 모드 꺼진 상태

one

case one

하나의 미디어만 반복하는 상태

MediaPlayer.ScalingMode

enum ScalingMode

현재 미디어 화면의 스케일링 상태를 나타냅니다.

참고: 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를 확장한 열거형으로, 에러 상태를 나타내는 열거형입니다. 에러 발생 시에, 이 열거형을 토대로 상황에 맞는 처리를 할 수 있습니다.

참고: LocalizedError

케이스

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. 화면 중앙의 왼쪽에는 화면 회전 잠금, 구간 반복, 트랙 설정 버튼이 있습니다.
  3. 화면 중앙의 오른쪽에는 재생 속도와 관련된 버튼들이 있습니다.
  4. 화면 하단에는 화면 잠금 버튼과 미디어 네비게이션 버튼, 화면 크기 조절 버튼이 있습니다.

화면 구성에 대한 더 자세한 설명은 아래를 참고하십시오.

상단 인터페이스

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.
  • CDNetworks DRM 재생 문제 수정
2025.01.07.
  • CDNetworks DRM 재생 문제 수정
2024.12.31.
  • CDNetworks DRM 재생 문제 수정
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
  • Status bar 제거
2024.04.03.
  • 안정성 개선
2024.04.01.
2024.03.13.
2024.02.21.
  • 안정화
2024.02.15.
  • SDK 보안 기능 추가
    앱의 Bundle ID를 콘솔에 등록한 후 콘솔의 App ID를 설정
    참고: 사용 방법
2024.01.17.
  • 첫 번째 버전

Callback URL

Callback URL 등록

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

Authorization 등록

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

Interval 설정

콘솔 사이트에 세팅된 interval에 맞춰 주기적으로 Callback URL에 미디어 재생 진행 상태를 전달합니다. 이를 통해 진도율 계산 등 필요한 데이터 활용이 가능합니다.

Callback URL에 전달하는 정보

접근 권한 검사 (CheckAccessRights)

라이선스 발급 시 권한 검사를 위해 호출됩니다.

호출

Callback URL콜백 URL (콘솔에서 설정)
AuthorizationAPI 접근 권한 목적으로 사용 (콘솔에서 설정)
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>

{
    "type": "CheckAccessRights",
    "appId": string,
    "mediaUrl": string,
    "deviceId": string,
    "userId": string,
    "userData": object,
    "offline": boolean,
}
이름타입설명
appIdstringApp 아이디
mediaUrlstring미디어 URL
deviceIdstring디바이스 아이디
userIdstring사용자 아이디
userDataobjectlaunchAgent 호출 시 입력한 정보
(사용자 및 컨텐츠 식별 등의 용도)
offlineboolean
설명
true다운로드 컨텐츠
false그 외

반환

{
    "result": "Ok" | "Expired" | "NoRights" | "DeviceLimitExceeded",
    "expiresOn": number
}

result

설명
Ok접근 권한 있음
Expired접근 권한 만료됨
NoRights접근 권한 없음
DeviceLimitExceeded디바이스 제한 초과

expiresOn (옵션)

result가 "Ok"일 때, 접근 만료 일시 값이 필요합니다. 이때, Unix epoch time으로 표시합니다.

재생 진행 상태 보고 (NotifyPlaybackProgress)

재생 중 콘솔에 설정된 Interval에 따라 주기적으로 재생 진행 상태를 보고합니다.

호출

Callback URL콜백 URL (콘솔에서 설정)
AuthorizationAPI 접근 권한 목적으로 사용 (콘솔에서 설정)
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,
    }
}
이름타입설명
appIdstringApp 아이디
sessionIdstring세션 아이디
userIdstring사용자 아이디
userDataobjectlaunchAgent 호출 시 입력한 정보
(사용자 및 컨텐츠 식별 등의 용도)
mediaUrlstring미디어 URL
positionnumber현재 재생 위치 (단위: 밀리초)
durationnumber전체 재생 길이 (단위: 밀리초)
progressobject현재 세션의 진행 상태

이름타입설명
playTimenumber재생 시간 (배속 X)
watchTimenumber시청 시간 (배속 O)

반환

{
    "result": "Ok" | "PlaybackLimitExceeded"
}

result

설명
Ok성공
PlaybackLimitExceeded재생 제한 초과 (배수 제한, 재생 횟수 등)

재생 상태 보고 (NotifyPlaybackStatus)

미디어 파일 재생 시작 및 종료 시 호출됩니다.

호출

Callback URL콜백 URL (콘솔에서 설정)
AuthorizationAPI 접근 권한 목적으로 사용 (콘솔에서 설정)
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
}
이름타입설명
appIdstringApp 아이디
sessionIdstring세션 아이디
userIdstring사용자 아이디
userDataobjectlaunchAgent 호출 시 입력한 정보
(사용자 및 컨텐츠 식별 등의 용도)
mediaUrlstring미디어 URL
statusstring재생 상태

설명
"Started"미디어 재생 시작
"Stopped"미디어 종료
createdAtnumber해당 JSON 생성 일시
(단위: Unix epoch time)

반환

{
    "result": "Ok"
}

result

설명
Ok성공

재생 종료 보고 (NotifyPlaybackFinish)

미디어 파일 재생 종료 시 호출됩니다.

호출

Callback URL콜백 URL (콘솔에서 설정)
AuthorizationAPI 접근 권한 목적으로 사용 (콘솔에서 설정)
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"
}
이름타입설명
appIdstringApp 아이디
sessionIdstring세션 아이디
userIdstring사용자 아이디
userDataobjectlaunchAgent 호출 시 입력한 정보
(사용자 및 컨텐츠 식별 등의 용도)
mediaUrlstring미디어 URL
positionnumber현재 재생 위치 (단위: 밀리초)
durationnumber전체 재생 길이 (단위: 밀리초)
progressobject현재 세션의 진행 상태

이름타입설명
playTimenumber재생 시간 (배속 X)
watchTimenumber시청 시간 (배속 O)
reasonstring미디어 종료 원인

설명
Ended미디어가 끝까지 재생된 후 종료
Error오류로 인하여 재생 종료
UserExited사용자가 미디어를 제어하여 종료

반환

{
    "result": "Ok"
}

result

설명
Ok성공

오프라인 재생 정보 보고 (NotifyOfflinePlaybackLog)

재생 관련 보고가 오프라인 상태로 인해 전송되지 않았을 경우, 온라인 연결 시 로컬에 저장된 데이터를 전송합니다.

재생 시작재생 종료적용
오프라인오프라인O
오프라인온라인O
온라인오프라인O
온라인온라인X

호출

Callback URL콜백 URL (콘솔에서 설정)
AuthorizationAPI 접근 권한 목적으로 사용 (콘솔에서 설정)
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"
        }
    ]
}
이름타입설명
appIdstringApp 아이디
userIdstring사용자 아이디
userDataobjectlaunchAgent 호출 시 입력한 정보
(사용자 및 컨텐츠 식별 등의 용도)
mediaUrlstring미디어 URL
items[Log]로그

Log

이름타입설명
sessionIdstring세션 아이디
startedAtnumber시작 시간
stoppedAtnumber종료 시간
positionnumber현재 재생 위치 (단위: 밀리초)
durationnumber전체 재생 길이 (단위: 밀리초)
progressobject현재 세션의 진행 상태

이름타입설명
playTimenumber재생 시간 (배속 X)
watchTimenumber시청 시간 (배속 O)
finishReasonstring미디어 종료 원인

설명
Ended미디어가 끝까지 재생된 후 종료
Error오류로 인하여 재생 종료
UserExited사용자가 미디어를 제어하여 종료

반환

{
    "result": "Ok"
}

result

설명
Ok성공

다운로드 상태 보고 (NotifyDownloadStatus)

미디어 파일 다운로드 시작, 완료, 중단, 실패 시 호출됩니다.

호출

Callback URL콜백 URL (콘솔에서 설정)
AuthorizationAPI 접근 권한 목적으로 사용 (콘솔에서 설정)
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
}
이름타입설명
appIdstringApp 아이디
sessionIdstring세션 아이디
userIdstring사용자 아이디
userDataobjectlaunchAgent 호출 시 입력한 정보
(사용자 및 컨텐츠 식별 등의 용도)
mediaUrlstring미디어 URL
statusstring다운로드 상태

설명
Started다운로드 시작
Completed다운로드 완료
Canceled다운로드 취소
Failed다운로드 실패
createdAtnumber해당 JSON 생성 일시
(단위: Unix epoch time)

반환

{
    "result": "Ok"
}

result

설명
Ok성공

북마크 데이터 제공 (GetBookmarks)

플레이어에서 북마크 데이터가 필요할 때 호출됩니다.

참고: launchAgent호출 시 MediaItemuseBookmarkCallback을 true로 설정했을 때 호출됩니다.

호출

Callback URL콜백 URL (콘솔에서 설정)
AuthorizationAPI 접근 권한 목적으로 사용 (콘솔에서 설정)
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>

{
    "type": "GetBookmarks",
    "appId": string,
    "sessionId": string,
    "userId": string,
    "userData": object,
    "mediaUrl": string
}
이름타입설명
appIdstringApp 아이디
sessionIdstring세션 아이디
userIdstring사용자 아이디
userDataobjectlaunchAgent 호출 시 입력한 정보
(사용자 및 컨텐츠 식별 등의 용도)
mediaUrlstring미디어 URL

반환

{
    "result": "Ok",
    "bookmarks": [{"title": "제목", "pos": 60}]
}

result

설명
Ok성공

bookmarks

설명
[Bookmark]북마크 값 (배열)

북마크 데이터 업데이트 (UpdateBookmarks)

북마크 데이터 변경 시 호출됩니다.

참고: launchAgent호출 시 MediaItem의 bookmarks에 북마크 데이터를 전달했을 경우에만 호출됩니다.

호출

Callback URL콜백 URL (콘솔에서 설정)
AuthorizationAPI 접근 권한 목적으로 사용 (콘솔에서 설정)
POST <Callback URL>
content-type: application/json
Authorization: Bearer <Authorization>

{
    "type": "UpdateBookmarks",
    "appId": string,
    "sessionId": string,
    "userId": string,
    "userData": object,
    "mediaUrl": string,
    "bookmarks": [Bookmark]
}
이름타입설명
appIdstringApp 아이디
sessionIdstring세션 아이디
userIdstring사용자 아이디
userDataobjectlaunchAgent 호출 시 입력한 정보
(사용자 및 컨텐츠 식별 등의 용도)
mediaUrlstring미디어 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?