소스라이브 플레이어
라이브 URL로 접근했을 때 보여지는 페이지이며, 라이브를 시청할 수 있습니다.
라이브 전에는 편성표로 이동하고, 라이브가 시작되었다면 바로 플레이어로 이동합니다.
WebView에서 플레이어 연동 시 참고 사항
- iOS X 이상의 기기에서 플레이어 화면 잘 현상을 방지하기 위해 SafeArea 영역 설정을 필히 진행해주시기 바랍니다.
- Android Webview에서 재생 아이콘 표시 없이 영상이 재생되는 것을 원하실 경우에는 아래 코드를 활용해주시기 바랍니다. (해당 가이드는 파트너사 AOS앱 개발팀에서 진행)
override fun getDefaultVideoPoster(): Bitmap? \{ return Bitmap.createBitmap(10,10, Bitmap.Config.ARGB_8888) }
자사몰 페이지에 연동 방법 (기본 제공 방식)
- 로그인 페이지 URL과 소스라이브 페이지로 복귀하는 방식을 제공합니다.
자사몰 로그인 페이지 URL
https://player.sauceflex.com/broadcast/{방송주소}?accessToken={생성된accessToken}&returnUrl={로그인페이지등}
- 로그인 페이지 URL과 소스라이브 페이지로 복귀 (returnUrl 등의 query string을 이용한 방법)
- 로그인 이후, 서버와의 연동을 통하여 생성한 accessToken를 다음과 같이 returnUrl 등을 통해 전달 받은 주소에 query string 으로 붙여서 페이지 이동을 시킬 수 있습니다.
자사몰 페이지에 직접 페이지를 설치하기(라이브러리 방식)
비회원, 간편 인증, JWT 인증 방식을 지원합니다.
간편 인증과 JWT 인증으로 사용자 정보를 연동할 수 있습니다. 간편 인증은 빠르고 간편하게 인증 사용을 할 수 있지만, 보안 강화와 임의의 사용자 ID가 어뷰징 되는 것을 방지하기 위해 JWT 인증을 할 수 있습니다. JWT Token 생성
게스트(비로그인) 사용자로 사용하기
<div id='sauce_live'></div>
<script type="text/javascript" src="https://player.sauceflex.com/static/js/SauceLiveLib.js"></script>
<script>
window.SauceLiveLib.setInit({ broadcastId: '방송ID 를 입력해주세요' });
// 다른 내용은 동일합니다만 방송이 stage 방송일 경우 아래의 코드로 테스트때 사용해주세요
// window.SauceLiveLib.setInit({ broadcastId: 'stage 방송ID 를 입력해주세요',env:'stage' });
window.SauceLiveLib.load('sauce_live')
</script>
or
<div id='sauce_live'></div>
<script type="text/javascript" src="https://player.sauceflex.com/static/js/SauceLiveLib.js"></script>
<script>
window.SauceLiveLib.setInit({ broadcastId: '방송ID 를 입력해주세요' });
window.SauceLiveLib.load() //default 'sauce_live'
</script>
간편 인증 사용하기 (일반 텍스트 형식의 nickName 및 memberId)
<div id='sauce_live'></div>
<script type="text/javascript" src="https://player.sauceflex.com/static/js/SauceLiveLib.js"></script>
<script>
window.SauceLiveLib.setInit({ broadcastId: '방송ID 를 입력해주세요' });
window.SauceLiveLib.setMemberObject({
memberId: string,
nickName: string,
age?: string, //옵션 ex) 10, 20, 30 - 나이대
gender?: string, //옵션 ex) m, w - 성별 남자(m), 여자(w)
});
window.SauceLiveLib.load() //default 'sauce_live'
</script>
JWT 인증 사용하기
<div id='sauce_live'></div>
<script type="text/javascript" src="https://player.sauceflex.com/static/js/SauceLiveLib.js"></script>
window.SauceLiveLib.setInit({ broadcastId: '방송ID 를 입력해주세요' });
window.SauceLiveLib.setMemberToken(JWT:string)
window.SauceLiveLib.load() //default 'sauce_live'
</script>
플로팅 구현
플로팅(Floating) 기능 사용하기
<div id='sauce_live'></div>
<script type="text/javascript" src="https://player.sauceflex.com/static/js/SauceLiveLib.js"></script>
<script>
window.SauceLiveLib.setInit({ broadcastId: '방송ID 를 입력해주세요' });
window.SauceLiveLib.setFloatingType({type: 'basic' | 'scroll',size?:{ width:'200px' } });
// size 값은 기본적으로 옵션값입니다. width 에 맞춰서 자동으로 높이는 9/16으로 설정됩니다.
window.SauceLiveLib.load() //default 'sauce_live'
</script>
basic 플로팅
처음 로드 할때 부터 Floating 형태로 플레이어가 로드 됩니다.
basic 플로팅시 bridge 이용
<div id='sauce_live'></div>
<script type="text/javascript" src="https://player.sauceflex.com/static/js/SauceLiveLib.js"></script>
<script>
/** 아래 함수 선언시 풀스크린 버튼 클릭시 동작하는 기본 링크 이동 기능이 삭제되고 선언된 로직이 실행됩니다.
* 함수 세팅하여 X 버튼 클릭시 지정한 링크로의 이동 등을 제어할수 있습니다.
*/
function sauceflexFloatingModeFullscreen() {
console.log('sauceflexFloatingModeFullscreen')
}
/** 아래 함수 선언시 닫기 버튼 클릭시 동작하는 사라지는 기능이 삭제되고 선언된 로직이 실행됩니다. */
function sauceflexFloatingModeExit() {
console.log('sauceflexFloatingModeExit')
}
window.SauceLiveLib.setInit({ broadcastId: '방송ID 를 입력해주세요' });
window.SauceLiveLib.setFloatingType({type: 'basic' });
window.SauceLiveLib.load() //default 'sauce_live'
</script>
scroll 플로팅
플레이어가 scroll 이벤트로 화면에서 보이지 않을때 Floating 형태로 플레이어가 전환 됩니다.
샘플 페이지
<html>
<head>
<title>sauce live example</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, viewport-fit=cover, shrink-to-fit=no" />
<script type="text/javascript" src="https://player.sauceflex.com/static/js/SauceLiveLib.js"></script>
<style>
html,
body {
margin: 0;
padding: 0;
background-color: #333;
}
// 필요한 css 는 추가적으로 세팅해도 무관합니다.
</style>
</head>
<body>
<div id='sauce_live'></div>
</body>
<script>
window.SauceLiveLib.setInit({ broadcastId: '방송ID 를 입력해주세요' });
// 다른 내용은 동일합니다만 방송이 stage 방송일 경우 아래의 코드로 테스트때 사용해주세요
// window.SauceLiveLib.setInit({ broadcastId: 'stage 방송ID 를 입력해주세요',env:'stage' });
window.SauceLiveLib.setMemberObject({
memberId: 'saucelive',
nickName: '소스라이브***',
age: '10',
gender: 'm'
});
//window.SauceLiveLib.setFloatingType({type: 'basic'});
//window.SauceLiveLib.setFloatingType({type: 'scroll'});
window.SauceLiveLib.load()
</script>
</html>
직접 세팅한 페이지의 라이브러리 이벤트 세팅
아래의 message 이벤트를 위의 샘플 페이지에서 세팅하려 하는 위치 아래에 추가해주세요
window.addEventListener(
"message",
function (e) {
// 이곳에 처리
if (typeof e.data !== "string") return
const jsonData = JSON.parse(e.data);
switch (jsonData.key) {
// 방송 입장 - 페이지 진입 시 자동으로 호출
case "sauceflexEnter":
console.log("방송 입장", jsonData.params);
break;
// 방송 상태 변경 - 방송 상태 변경 발생 시 자동으로 호출
case "sauceflexBroadcastStatus":
console.log("방송 상태 변경", jsonData.params);
break;
// 나가기 버튼 클릭
case "sauceflexMoveExit":
console.log("나가기 버튼 클릭", jsonData.params);
break;
// 로그인 버튼 클릭
case "sauceflexMoveLogin":
console.log("로그인 버튼 클릭", jsonData.params);
break;
// 상품 클릭
case "sauceflexMoveProduct":
console.log("상품 클릭", jsonData.params);
break;
// 배너 클릭
case "sauceflexMoveBanner":
console.log("배너 클릭", jsonData.params);
break;
// 쿠폰 클릭
case "sauceflexMoveCoupon":
console.log("쿠폰 클릭", jsonData.params);
break;
// 리워드 달성 클릭
case "sauceflexMoveReward":
console.log("리워드 달성 클릭", jsonData.params);
break;
// 공유하기 클릭
case "sauceflexOnShare":
console.log("공유하기 클릭", jsonData.params);
break;
default:
break;
}
},
false
);
브릿지
- 웹뷰 관련 세팅에 대한 자세한 내용은 해당 링크를 참고해주세요.
- 브릿지의 페이로드는 JSON형식의 객체가 문자열로 변환되어 제공됩니다.
- sauceflexEnter(Void) - 방송 입장 (페이지 진입 시 자동으로 호출)
// 파라미터 없음
- sauceflexBroadcastStatus(message: String) - 방송 상태 변경 (방송 상태 변경 발생 시 자동으로 호출)
// Stringified JSON
// 방송 상태 값에 대한 문서는 https://docs.sauce.im/reference/broadcast-state-code 참고
{
broadcastStateCode: String, // 방송상태
}
- sauceflexMoveExit(Void) - 나가기 버튼 클릭
// 파라미터 없음
- sauceflexMoveLogin(Void) - 로그인 버튼 클릭
// 파라미터 없음
- sauceflexMoveProduct(message: String) - 상품 클릭
// Stringified JSON
{
broadcastIdx: String, // 방송ID
externalProductId: String || null, // 상품 코드
isSoldout: Boolean, // 상품 품절 여부
linkUrl: String, // 상품에 연결된 링크
price: String, // 상품 가격
}
- sauceflexMoveBanner(message: String) - 배너 클릭
// Stringified JSON
{
broadcastIdx: String, // 방송ID
bannerId: String, // 배너ID
linkUrl: String, // 배너에 연결된 링크
}
- sauceflexMoveCoupon(message: String) - 쿠폰 클릭
// Stringified JSON
{
broadcastIdx: String, // 방송ID
couponCode: String || null, // 쿠폰 클릭 시 동작 유형이 '쿠폰 다운로드'인 경우 필요한 쿠폰 코드
couponId: String, // 쿠폰ID
couponName: String, // 쿠폰명
couponType: String, // 쿠폰 클릭 시 동작 유형 ('link' || 'newWindow' || 'download' || 'custom')
linkUrl: String || null, // 쿠폰 클릭 시 동작 유형이 '링크 이동'과 '링크 이동 (새창)'인 경우 필요한 쿠폰에 연결된 링크
metadata: String || null, // 쿠폰 클릭 시 동작 유형이 '사용자 정의'인 경우 필요한 전달 데이터
}
- sauceflexMoveReward(message: String) - 리워드 달성 클릭
// Stringified JSON
{
broadcastIdx: String, // 방송ID
linkUrl: String, // 리워드 달성 시 이동 링크
}
- sauceflexOnShare(message: String) - 공유 버튼 클릭
// Stringified JSON
{
linkUrl: String, // 공유 링크
shortUrl: String // 숏링크
}
- sauceflexPictureInPicture(Void) - PIP 전환 버튼 클릭 (PIP 전환 시에 플레이어 위 요소들은 자동으로 미표시됩니다.)
// 파라미터 없음
Updated about 1 hour ago