PlaynPlay
PlaynPlay

재생 정책

건너뛰기·배속·시작 위치를
영상마다 따로 정합니다

이수 판정이 걸린 영상은 묶어 두고 자율 강의는 풀어 두려면 규칙이 콘텐츠 단위로 움직여야 합니다. 규칙을 넣는 플랫폼별 위치, 배속 범위와 화면 표시, 이어보기 시작 위치, 서버가 재생을 멈추는 재생 제한 응답을 운영자 관점에서 정리했습니다.

최종 수정

재생 정책을 표현한 PlaynPlay 일러스트
Policy Fields

영상 한 편에 거는 규칙

규칙은 재생 한 건의 설정 묶음인 MediaItem에 들어갑니다. 값을 넣지 않은 항목은 기본값으로 동작합니다.

규칙 설정 값 기본값 운영 메모
탐색(Seek) seekable true / false true, 위치 이동 허용 이수 판정이 걸린 영상에 false를 넣습니다.
배속 disablePlaybackRate true / false false, 배속 허용 인정 시간을 실제 경과 시간으로 묶어야 할 때 true로 둡니다.
시작 위치 startTime 숫자(초) 또는 value·syncedAt 묶음 선택 항목 이어보기용 값입니다. 아래 이어보기 항목에서 다룹니다.
구간 재생 clipping 시작·끝 시간 선택 항목 맛보기 구간용입니다. 미리보기·클리핑에서 자세히 봅니다.
오프라인 기한 DRM 설정의 offlineAccessPeriod 비우면 기한 없음 내려받은 파일의 시청 기간입니다. 다운로드·오프라인에서 다룹니다.

웹 페이지가 Agent를 불러 플레이어를 여는 방식은 네 OS(Windows, macOS, iOS, Android)에 공통입니다. 고객사 앱에 SDK를 넣었다면 같은 규칙을 앱 코드의 미디어 아이템 빌더로 지정합니다.

By Platform

플랫폼별 설정 위치

PC는 웹 페이지의 실행 코드에, 모바일 앱은 SDK의 빌더 메서드에 값을 넣습니다. 이름은 비슷해도 들어가는 자리가 다릅니다.

항목 PC (Agent) Android SDK iOS SDK
탐색 제한 MediaItem의 seekable: false setSeekable(false) seekable(false)
배속 제한 MediaItem의 disablePlaybackRate: true setDisablePlaybackRate(true) disablePlaybackRate(true)
시작 위치 startTime에 초 또는 value·syncedAt PlaybackInfoRepository에서 마지막 재생 위치 조회 같은 저장소의 find(by:)로 조회. 재생 목록 이동 때 위치를 생략하면 그 영상의 마지막 재생 위치에서 시작
종료 위치 받기 Callback URL 재생 종료 보고의 position(밀리초) onPlaybackFinish의 position onPlaybackFinish의 position. 2026년 8월부터 onEnded에서도 확인

iOS SDK에는 2024년 3월 13일 Seek 기능 제한이, Android·iOS SDK에는 2025년 3월 20일 MediaItem의 disablePlaybackRate가 추가됐습니다. 의무 과정을 앱으로 운영한다면 학습자 앱이 이 날짜 이후 SDK로 빌드됐는지 먼저 확인하세요.

Playback Rate

배속 범위와 화면 표시

Android·iOS SDK 문서 기준입니다. 배속을 허용한 영상에서 학습자가 겪는 동작과 운영자가 고르는 기본값을 모았습니다.

  • Range

    0.1배에서 4.0배

    재생 속도 값은 0.1~4.0 범위이고 정상 속도는 1.0입니다. 화면 가운데 오른쪽의 증가·감소 버튼은 한 번에 0.1배씩 움직이고, 바뀐 속도를 화면 중앙에 보여 줍니다.

  • Reset

    한 번에 1배속 복귀

    배속 버튼 묶음의 복구 버튼은 현재 속도를 보여 주고, 누르면 정상 속도로 돌아갑니다. 빠르게 듣다가 어려운 대목에서 속도를 되돌릴 때 쓰입니다.

  • Time Bar

    배속을 반영한 남은 시간

    속도가 1이 아니면 타임바 아래에 재생 속도를 고려해 다시 계산한 현재 위치와 남은 시간이 추가됩니다. 2배속일 때 실제로 몇 분이 남았는지 학습자가 바로 압니다.

  • Pitch

    음정 유지

    preservesPitch 기본값은 true라서 속도를 바꿔도 목소리 높낮이가 그대로입니다. false로 바꾸면 속도에 따라 음정도 함께 변합니다.

  • Default

    처음 여는 속도

    재생 화면 설정의 defaultPlaybackRate로 시작 속도를 정합니다. 기본값 1.0, 범위 0.1~4.0입니다. Android는 MediaPlayerActivityConfiguration과 Fragment용 Parameters, iOS는 MediaPlayerViewController.Configuration에 있습니다.

  • Event

    속도 변경 기록

    속도가 바뀌면 앱에서 onRateChange가 실행됩니다. Android 문서는 속도는 그대로인데 preservesPitch만 바뀌어도 이 이벤트가 실행된다고 적고 있으니, 같은 속도가 연달아 오면 걸러서 집계하세요.

서버에서 배속 시청 여부를 가려내는 계산은 진도 데이터 설계에 있습니다.

Resume

시작 위치와 이어보기

이어보기는 서버가 기억하는 위치와 학습자 기기가 기억하는 위치를 맞추는 일입니다. PC와 앱이 쓰는 값이 다르니 흐름을 나눠 설계합니다.

  1. 종료 위치 저장

    재생 종료 보고의 position은 밀리초 단위입니다. 사용자 ID와 차시 식별값을 키로 저장하고, 다음 실행 때 초 단위로 바꿔 씁니다.

  2. PC: startTime과 syncedAt

    startTime에 숫자만 넣으면 그 시각(초)이 재생 시작 위치가 됩니다. value와 syncedAt 묶음으로 넣으면 플레이어가 이 값과 기기가 오프라인 상태에서 기록해 둔 재생 시간을 견주어 가장 최근 것을 고릅니다. syncedAt에는 서버가 위치를 갱신한 시각을 넣습니다.

  3. 앱: 기기에 남은 위치 조회

    Android·iOS SDK는 미디어 주소로 PlaybackInfoRepository를 조회해 마지막 재생 위치(lastPlayedTime), 전체 길이, 만료 일시를 얻습니다. 앱 강의 목록에 이어서 보기 위치와 남은 기간을 함께 보여 줄 수 있습니다.

  4. iOS 재생 목록 이동

    iOS의 seekTo(mediaItemIndex:position:)는 위치를 생략하면 그 영상의 마지막 재생 위치에서 시작합니다. 여러 차시를 목록으로 열었을 때 차시를 오가도 각자 보던 곳으로 돌아갑니다.

  5. 탐색 금지 영상에서 시험

    탐색 금지와 시작 위치를 함께 쓸 때의 동작은 문서에 따로 적혀 있지 않습니다. 의무 과정을 열기 전에 이 조합을 시험 항목에 넣으세요. Android의 seekTo에는 강제로 위치를 바꿀 때 쓰는 force 파라미터가 있습니다.

Android SDK는 2026년 6월 9일 배포본에서 이어보기 오류를 고쳤습니다. 앱의 이어보기를 시험할 때는 이 날짜 이후 SDK를 기준으로 삼으세요.

Limit Response

재생 제한 초과 응답

재생 도중 서버가 재생을 멈추게 하는 방법입니다. 플레이어가 콘솔의 Interval마다 보내는 진행 보고에 고객사 서버가 Ok 대신 PlaybackLimitExceeded로 답하면 재생 제한 초과 오류로 처리됩니다. 문서는 배수 제한과 재생 횟수를 예로 듭니다.

플랫폼 앱·페이지가 받는 오류 준비할 일 (권장)
PC 커스텀 페이지 onSessionError의 type PlaybackLimitExceeded 한도 내용과 문의 경로를 페이지에 띄웁니다.
Android SDK PlaybackLimitExceededException 오류 처리에서 한도 안내 화면으로 연결합니다.
iOS SDK MediaPlayerError의 playbackLimitExceeded Android와 같은 안내 문구를 씁니다.

한도를 넘은 뒤 멈추기까지의 간격은 진행 보고 주기에 달려 있으니 Interval을 정할 때 함께 고려하세요. 2026년 8월 25일 이후 Android·iOS SDK는 진행 상태가 그대로인 구간의 보고를 생략하므로, 그동안은 응답으로 재생을 멈출 수 없습니다. 수강 만료나 기기 초과처럼 시작 전에 막을 조건은 접근 권한 검사에서 판단하며 접근 제어 가이드에 정리했습니다. 오류별 안내 문구는 오류 처리 가이드를 참고하세요.

Policy Design

과정 유형별 권장 조합

도입 상담에서 자주 쓰는 출발점입니다. 기준 숫자와 예외는 고객사 학사 규정에 맞춰 조정합니다.

과정 탐색 배속 시작 위치 서버 응답과 기타
의무 교육 (법정·이수) 금지 금지 서버에 저장한 마지막 위치 재수강 횟수 한도가 있다면 진행 보고 응답으로 판정
일반 강의 (자율 수강) 허용 허용, 시작 속도 1.0 syncedAt을 붙여 오프라인 위치와 비교 배수 제한 상품이라면 PlaybackLimitExceeded로 응답
미리보기 (맛보기) 허용 허용 지정하지 않음 구간 재생(PC·iOS 문서), 오프라인 기한 0
어학·실기 반복 허용 허용, 0.1배 단위 감속 활용 마지막 위치 학습자가 구간 반복을 쓰도록 화면 조작 안내

과정 유형을 LMS의 강좌 속성으로 두고 재생 버튼이 그 속성을 읽어 MediaItem을 채우게 하면, 운영자는 강좌 설정만 바꿔 규칙을 적용합니다. 역할 분담은 교육 운영 담당자 안내를 참고하세요.

재생 정책 FAQ

  • 과정 규칙을 바꾸려면 앱을 다시 배포해야 하나요?

    규칙은 재생할 때마다 넘기는 값입니다. 앱의 재생 코드가 서버에서 받은 강좌 정보로 seekable과 disablePlaybackRate를 채우도록 만들어 두면, 이후 규칙 변경은 서버 데이터 수정으로 끝납니다.

  • 4배속보다 빠르게 볼 수 있나요?

    Android·iOS SDK의 재생 속도 범위는 0.1~4.0입니다. 화면의 증가 버튼도 4.0배에서, 감소 버튼은 0.1배에서 멈춥니다.

  • 재생 횟수 제한은 누가 세나요?

    고객사 서버가 셉니다. 재생 상태 보고의 Started나 세션 ID를 기준으로 횟수를 쌓고, 한도에 닿은 학습자의 다음 진행 보고에 PlaybackLimitExceeded를 돌려줍니다. 재생 시작 자체를 막고 싶다면 접근 권한 검사에서 NoRights로 답하는 방식도 함께 검토하세요.

  • 오프라인에서 본 위치도 이어보기에 반영되나요?

    PC에서는 startTime을 value와 syncedAt 묶음으로 넘기면 서버 값과 기기에 남은 오프라인 재생 시간 가운데 나중 것이 시작 위치가 됩니다. 서버 기록은 온라인 연결 뒤 도착하는 오프라인 재생 정보 보고로 갱신합니다.

Get Started

PlaynPlay 도입을 위한
기술적 지원과 서비스를 제공합니다.

제품 문의부터 데모 시연까지, 모든 지원을 위해 세일즈 및 기술 지원 팀이 준비되어 있습니다.

  • 제품 및 도입 문의

    도입 범위, 일정, 견적을 상담합니다. 서비스 형태와 사용자 규모를 알려주시면 맞는 연동 방식과 보안 설정을 제안합니다.

  • Trial 신청

    PlaynPlay의 기능을 먼저 테스트해 보세요. 트라이얼 기간 동안 귀사의 제품과 PlaynPlay를 연동하고 성능과 기능을 직접 검증할 수 있습니다.

  • PlaynPlay 기술 문의

    SDK 연동, Callback URL 설계, DRM 패키징 중에 생기는 질문에 기술팀이 답합니다. 공개된 개발 문서와 샘플 프로젝트도 함께 확인하세요.