GuidesAPI GuideChangelog
Log In
Guides

E. PIP로 바로 시작하기

시청자가 방송을 보기 전에 앱이 PIP 로 바로 시작합니다. showFloatingPlayer() 는 지정한 라이브 ID 를, setOnAirInit() 은 진행 중인 방송 중 SDK 가 고른 하나를 띄웁니다.

E. PIP로 바로 시작하기 — 소스라이브 플레이어 Android SDK
⏱ 예상 소요 시간: 10분
📋 사전 조건: 2. 플레이어 실행하기
앱 홈 화면 위에 떠 있는 작은 플레이어
▲ 앱 홈 화면 위에 떠 있는 작은 플레이어
PIP로 전환하기와의 차이

둘 다 작은 창으로 보이지만 시작하는 시점이 다릅니다.
D. PIP로 전환하기 는 보던 플레이어가 다른 화면으로 넘어갈 때 작아지는 것이고, 이 페이지는 보기 전에 앱이 원하는 화면에서 PIP 로 바로 시작하는 것입니다.
전체화면을 거치지 않고 처음부터 작은 창으로 보입니다.

D. PIP로 전환하기E. PIP로 바로 시작하기
시작 시점시청자가 방송을 보던 중시청자가 방송을 보기 전
시작하는 쪽시청자 — 홈 버튼·다른 앱으로 전환앱 코드
목적보던 방송 이어 보기진행 중인 방송으로 시청자 유입

작은 창은 한 번에 하나만 뜹니다. PIP 창이 떠 있을 때 이 페이지의 방식으로 띄우면 기존 PIP 창이 닫히고 새 창만 남습니다.

작은 창으로 띄우기

인자는 2. 플레이어 실행하기 와 같습니다.
token 을 넘기지 않으면 게스트로, 넘기면 회원으로 시청합니다.

Kotlin
// 게스트로 띄우기
SauceClient.showFloatingPlayer(
    context     = this,
    broadcastId = "라이브 ID",
    token       = null
)

// 회원으로 띄우기 — 사용자 토큰을 함께 전달
SauceClient.showFloatingPlayer(
    context     = this,
    broadcastId = "라이브 ID",
    token       = "발급받은 사용자 토큰"
)
파라미터필수설명
context필수호출하는 화면의 컨텍스트
broadcastId필수띄울 라이브 ID → 라이브 ID 확인하기
token선택사용자 토큰. null 이면 게스트로 시청합니다
📘 showFloatingPlayer() 로 띄운 창은 시청자가 닫습니다. 작은 창의 닫기 버튼으로 끕니다. 앱 코드에서 끄거나 이미 떠 있는지 확인해야 한다면 담당자에게 문의해 주세요.
❗ 다른 앱 위에 표시하는 것은 아닙니다 — 앱 안에서만 떠 있습니다. 다른 앱 위에 띄우려면 시스템 오버레이 권한이 필요하고 정책 검토가 따릅니다. 필요하다면 담당자에게 문의해 주세요.
진행 중인 방송으로 띄우기

setOnAirInit() 은 파트너의 LIVE 방송 중 가장 최근에 시작한 방송 하나를 SDK 가 골라, LIVE 뱃지가 붙은 작은 창으로 띄웁니다.
라이브 ID 를 앱이 정하면 위의 showFloatingPlayer(), 방송 선택까지 SDK 에 맡기면 setOnAirInit() 을 씁니다.

Kotlin
import com.mobidoo.saucelive.player.SauceLivePlayerClient

// 가능하면 현재 화면 Activity 를 넘깁니다
SauceLivePlayerClient.setOnAirInit(
    context   = this,
    partnerId = "파트너 ID",
)

위치·크기·뱃지 이미지를 정하고, 선택 결과와 상태를 받으려면 옵션과 리스너를 함께 넘깁니다.

Kotlin
import com.mobidoo.saucelive.player.SauceLivePlayerClient

SauceLivePlayerClient.setOnAirFloatingListener(object : OnAirFloatingListener {
    override fun onStateChanged(state: OnAirFloatingState, broadcastId: String?) {
        // FULL / MINI / OS_PIP / CLOSED
    }
    override fun onFloatingClosed(broadcastId: String?, reason: OnAirCloseReason) {
        // USER / HOST / BROADCAST_ENDED
    }
})

SauceLivePlayerClient.setOnAirInit(
    context   = this,
    partnerId = "파트너 ID",
    options   = OnAirFloatingOptions(
        widthDp        = 120,
        position       = OnAirFloatingPosition.BOTTOM_RIGHT,
        offsetYDp      = 56,                          // 하단 탭바만큼 띄우기
        badgeImageUrl  = "https://example.com/live-badge.svg",
        activityFilter = { activity -> activity !is CheckoutActivity },
    ),
    token     = "발급받은 사용자 토큰",
) { result ->
    when (result) {
        is OnAirResult.Selected -> { /* result.broadcastId, result.broadcastStateCode */ }
        OnAirResult.None        -> { /* LIVE 방송 없음 또는 조회 실패 */ }
    }
}
⚠️ env 는 초기화의 환경과 별개입니다. setOnAirInit() 의 env 는 LIVE 방송 목록을 조회할 환경만 정합니다.
생략하면 초기화(environment)와 관계없이 운영("production") 목록을 조회합니다. 스테이지로 테스트할 때는 초기화와 별도로 env 도 "stage" 로 지정합니다.

작은 창은 영상만 재생합니다. 채팅·상품 등 상호작용은 없습니다.
탭하면 전체 플레이어로 전환되고, 같은 영상이 끊김 없이 이어집니다.
드래그로 옮길 수 있고, 놓으면 가장 가까운 모서리에 붙습니다.
옵션·결과·호스트 제어 메서드 전체 → API · 리스너 → Event handler

항목동작
OS 버전Android 13(API 33) 이상은 앱 화면 위 작은 창으로 띄웁니다.
API 32 이하는 작은 창 없이 바로 OS PIP 로 엽니다. SDK 최소 버전은 API 26 입니다.
방송 선택상태가 onair·warning 인 방송 중 시작 시각이 가장 최근인 하나를 고릅니다. 시작 시각이 없는 방송은 뒤로 갑니다.
목록은 호출 1회당 1회 조회합니다.
방송 교체띄운 뒤 다른 방송이 시작돼도 바뀌지 않습니다. 다시 고르려면 setOnAirInit() 을 다시 호출합니다.
다시 호출기존 창을 통지 없이 닫고 새로 조회합니다. 한 번에 하나만 뜹니다.
방송 종료작은 창과 OS PIP 동안 30초마다 방송 상태를 확인합니다.
LIVE 가 아니게 되면 뱃지를 숨기고 닫습니다(BROADCAST_ENDED). 조회에 실패하면 유지합니다.
뱃지 이미지PNG·SVG 만 씁니다. JPG 이거나 3초 안에 불러오지 못하면 기본 LIVE 뱃지를 표시합니다.
뱃지 높이 24dp, 최대 너비 80dp.
백그라운드작은 창 상태로 백그라운드로 가면 재생을 멈추고, 돌아오면 이어서 재생합니다.
권한매니페스트 선언이 필요 없습니다. SDK 매니페스트에 포함돼 있습니다.
스크롤에 따라 띄우기

스크롤 위치에 따라 띄우는 옵션은 없습니다.
앱이 스크롤을 감지해 원하는 시점에 호출합니다.

  • 1
    스크롤 위치를 감지합니다. 화면의 스크롤 리스너에서 현재 위치를 읽습니다.
  • 2
    기준을 넘으면 호출합니다. showFloatingPlayer() 또는 setOnAirInit() 을 부릅니다.


Did this page help you?
🏠 소스라이브 🎬 소스클립 🔗 소스링크 📢 소스애드
🧩 API 가이드
🆕 최근 업데이트
💬 도움이 더 필요하신가요?
메일로 문의 카카오톡 채널로 문의
담당자에게 문의하기

궁금한 점이나 불편했던 점을 남겨주시면 담당자가 확인 후 답변드릴게요.

가이드 챗봇
* AI를 활용해 답변해서 사실과 다를 수도 있어요. 더 궁금한 사항은 '담당자에게 문의하기'를 이용해주세요.
💡 궁금한 솔루션(예: 라이브, 링크 등)을 함께 적어주시면 더 정확한 답변을 받을 수 있어요.