약 한달 전, Android Zoom Meeting SDK 를 적용해본 경험을 글로 게시한 적이 있다. 그 때는 Zoom Meeting SDK 를 사용한 것이었고, Meeting SDK 에서 UI 커스텀까지 해보려 했으나, 좀 더 커스텀이 자유로운 SDK 가 있어서 Meeting SDK 는 중도 하차했다. 커스텀이 더 자유로운 SDK 는 바로 Zoom Video SDK 이다.
본 글에서는 Zoom 에서 제공하는 또다른 SDK 인 Zoom Video SDK 에 대한 전반적인 내용을 정리한다. 글의 내용은 Zoom 공식 문서를 기반으로 작성한다.
1. Video SDK
Video SDK 는 Zoom 의 코어와 같은 느낌이다. 이전에 Zoom Meeting SDK 는 정해진 UI, 정해진 기능 등등 기존의 Zoom 앱을 내가 만든 앱 위에 키는 느낌이었다. 커스텀이 가능하긴 하나, 제한적인 부분이 많았고 기존의 Zoom 앱을 킨다는 느낌은 피할 수 없었다. 반면, Zoom Video SDK 는 핵심적인 Zoom 회의 기능을 제공하며, 자신만의 화상 회의 앱을 개발 할 수 있다.
다만, Zoom Video SDK 는 독립적인 비디오 세션으로 연결되기 때문에, Zoom Meeting SDK 를 사용한 다른 앱과 호환되지 않는다. 그리고 Zoom Meeting SDK 에서는 회의실 ID 와 비밀번호로 회의 참가가 가능했으나, Zoom Video SDK 를 사용한 앱은 "세션 이름" 으로 회의를 참가할 수 있다. 마지막으로, Zoom Video SDK 는 Meeting SDK 처럼 기본적으로 제공하는 Meeting UI 가 없으므로, 자신만의 독창적인 회의실 UI 를 구현할 수 있다.
그 외에 공식 문서에서 기술한 Zoom Video SDK 의 특징은 다음과 같다.
1-1) Streamlined design (간소화 디자인)
- Easy to use : 라이브러리 임포트, 필요한 함수 호출 등등 모든 영상 회의 관련 요소들을 제어할 수 있다.
- Lightweight : Video SDK 는 Meeting SDK 에 비해 용량이 엄청 감소되어있다.
- Highly customizable : 원본 비디오 및 오디오 데이터를 사용할 수 있기 때문에, 나만의 렌더링 방식을 도입할 수 있다.
1-2) Video Sessions
Video Session 은 Video SDK 가 실행되는 즉시 생성된다. 고품질 비디오 및 오디오로 사용자에게 즐거운 비디오 커뮤니케이션 경험을 제공할 수 있다.
1-3) Access to Raw Data
Video 및 Audio 의 Raw Data 에 접근이 가능하여, 사용자와 앱의 영상 스트리밍 간에 상호작용을 발전시킬 수 있다.
1-4) Minimum SDK version
2022년 11월에 Video SDK 의 필수 최소 버전을 시행할 계획이다. 2022년 11월 이후에는 최소 버전 미만의 SDK 는 더이상 동작하지 않을 것이다. 각 SDK 의 최소 버전은 다음과 같다.
1-5) Additional Features
- 즉석으로 영상 커뮤니케이션 세션 실행
- 기기의 화면으로 바로 공유 가능
- 세션 중에 즉석 채팅 메시지 전송
- 로컬에서 Raw data 를 관찰 및 리뷰 가능
- 다른 렌더링 스키마를 테스트 할 수 있고, 더 좋은 퀄리티의 비디오와 오디오 스트리밍 가능
- 라이브 스트리밍을 제공하는 써드파티에 비디오 세션을 방송
1-6) 지원 OS
- iOS Video SDK
- Android Video SDK
- React Native Video SDK
- Web Video SDK
- macOS Video SDK
- Windows Video SDK
2. Setting up Developer Accounts
이전에 Zoom Meeting SDK 는 완전 무료 SDK 였다. 그래서 Zoom Developer 아이디만 있다면, SDK 를 다운 받아서 사용이 가능하다. 하지만, Zoom Video SDK 는 유료 SDK 이기 때문에, Meeting SDK 와 달리 구매 절차가 중간에 추가된다.
우선, Video SDK 를 사용하기 전에 세팅해야할 부분이 있다. 바로 계정 세팅이다. 만약, Video SDK 를 사용하려는 계정이 이전에 이미 무료 버전이나 프로 이상의 상품을 사용했던 적이 있다면, Video SDK 에 접근할 수 없을 것이다. 이럴 때는, Video SDK 를 사용하기 위한 새로운 개발 계정을 생성해야한다. Video SDK 의 App Credentials 는 계정 당 한개만 세팅할 수 있다.
Zoom Video SDK 사용 계정을 세팅하는 방법은 다음과 같다.
2-1) 계정 로그아웃
만약, Zoom Developer 계정을 이미 가지고 있다면, 확실하게 로그아웃을 해준다. Zoom Marketplace 사이트에 들어갔을 때, 로그인이 안되어있다면 성공이다.
2-2) Video SDK 페이지로 이동하여 SDK 구매
Zoom Video SDK 페이지로 이동하여, [Buy Now] 를 클릭한다.
용량제는 달마다 10,000분까지는 무료이며, 그 이후에 분당 0.0035 달러를 지불하는 요금제이다. 선택지가 하나밖에 없으니 그대로 두고, 아래에 [여기] 버튼을 클릭하여, 비즈니스가 아닌 개인 용도로 업데이트한다. 그 후, 하단에 [계속] 버튼을 클릭한다.
중간에 생년월일을 물어보는 단계를 거치면, 위 단계로 진입한다. 위에서 언급했듯이, 개발자 계정이 무료 기간 상품을 사용 중이거나, Pro 이상의 상품을 사용 중이면, Video SDK 를 사용할 수 없다고 하였다. 하지만, 현재 필자의 계정이 두 가지의 경우 중 하나를 포함하는 지 모르기 때문에 일단 로그인을 해본다.
우선, 로그인이 되었으니 아래에 정보를 입력하도록 한다. 첫 단계에서 "개인" 용도로 업데이트 하고 왔는데, 아래에 청구 연락처를 입력하는 정보들은 회사 정보를 묻는 것이 있다. 마침, 회사 계정으로 진행 중이기도 하여, 다른 개인 구글 계정으로 로그인해서 위 단계까지 가보니 똑같은 정보를 입력해야 했다. 아래의 청구 연락처 정보를 입력해주도록 한다.
카드 정보까지 입력하면, 위 단계로 진입하게 된다. 주문 검토 내용에 이상이 없다면, [주문하기] 버튼을 클릭한다. 필자 같은 경우에는 "사람인지 확인" 하는 그림 맞추기 단계까지 진입하여, 사람인 것을 인증하였다.
위 페이지가 나타난다면, 정상적으로 Video SDK 구매를 마친 것이다.
3. SDK Authentication
Zoom Meeting SDK 처럼 Video SDK 를 사용하기 위해서는 사용 인증을 해줘야한다. SDK 사용 인증은 Video SDK JWT 가 필요하며, JWT 를 발급 받기 위해서는 SDK Key 와 SDK Secret 값이 필요하다. 발급 받은 Video SDK JWT 는 회의 시작과 참여에 필요하다.
3-1) Get Video SDK Key and Secret
먼저, SDK Key 와 SDK Secret 값을 확인하기 위해 Zoom App Marketplace 에 접속하여 로그인을 해준다.
사용자 메뉴가 조금 달라진 것 같은 느낌이 든다. [Build App] 메뉴가 [Build Video SDK] 으로 이름이 바뀌었다. 해당 메뉴를 클릭하여 SDK 정보 페이지로 이동한다.
SDK 의 정보 페이지가 많이 달라졌다. 위에 "Basic information", "Developer Contact Information" 정보를 입력한다. 그리고, 하단에 "SDK credentials" 섹션에서 SDK Key 와 SDK Secret 값을 얻을 수 있다.
3-2) Generate the Video SDK JWT(JSON Web Token)
Video SDK 세션을 생성하거나 참여하는 모든 요청은 암호화된 Video SDK JWT 를 사용하여 인증되어야 한다. Video SDK JWT 는 세션을 생성하거나 참여할 때마다 생성되어야 한다. 따라서, Video SDK credentials 값을 안전하게 저장할 수 있는 서버를 통해 JWT 를 발급 받는 것이 좋다. 예시 코드는 링크(Signature Sample App)를 첨부한다.
JWT 는 크게 3가지 파트로 나뉜다. Header, Payload, Signature 가 있으며, 각 파트를 조합하면 하나의 JWT 가 된다.
ex) 111111.222222.333333
Header
Header 는 서명 알고리즘(Signing Algorithm) 과 토큰의 타입 (Type of Token) 을 포함하고 있다.
Key | Value |
alg | HS256 |
typ | JWT |
{
"alg": "HS256",
"typ": "JWT"
}
Payload
JWT 의 Payload 는 토큰의 정보(Claims of Token) 또는 필요한 사용자, 메타데이터의 정보를 담고 있다.
Key | Value Description |
app_key | (필수) Video SDK Key 값 |
tpc | (필수) Video SDK 세션명. 200자 가능. 영문자, 공백, 특수기호 포함 가능 |
version | (필수) 1 로 세팅 |
role_type | (필수) 사용자 유형. 참가자는 0, 호스트는 1 |
user_identity | (선택) 사용자를 판별할 수 있는 판별자. 해당 값은 Video SDK API 와 Dashboard 에서 "user_key" 의 값으로 볼 수 있다. 최대 15자 가능. |
session_key | (필수 or 선택) 세션을 판별하는 값. 해당 값은 Video SDK API 와 Dashboard 에서 볼 수 있다. 호스트와 함께 설정되지 않았다면, 필수 요소가 아니다. 하지만, 만약 호스트와 함께 설정되었다면, 참가자들은 같은 "session_key" 값을 가지고 있어야한다. 그렇지 않으면 세션에 참가할 수 없다. |
iat | (필수) 현재 Timestamp 값 |
exp | (필수) JWT 만료 시각. "iat" 값보다 커야하며, 1800 초 ~ 48 시간 사이의 값이어야 한다. |
pwd | (선택) 사용자가 생성하거나 참가하고자 하는 회의의 비밀번호. 최대 10자 가능. |
{
"app_key": VIDEO_SDK_KEY,
"tpc": SESSION_NAME,
"version": 1,
"role_type": ROLE,
"user_identity": USER_IDENTITY,
"session_key": SESSION_KEY,
"iat": 1646937553,
"exp": 1646944753,
"pwd": 12345
}
Signature
JWT 의 signature 를 생성하기 위해, Header 와 Payload 는 HMAC SHA256 알고리즘을 통해 Video SDK Secret 을 인코딩해야한다.
Value | Value Description |
VIDEO_SDK_SECRET | (필수) Video SDK Secret 값 |
HMACSHA256(
base64UrlEncode(header) + '.' + base64UrlEncode(payload),
VIDEO_SDK_SECRET
);
위의 Header, Payload, Signature 를 설정하면, 다음과 같은 JWT(JSON Web Token) 를 얻을 수 있다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfa2V5IjoiVklERU9fU0RLX0tFWSIsImlhdCI6MTY0NjI0ODc5NiwiZXhwIjoxNjQ2MjU1OTk2LCJ0cGMiOiJDb29sIENhcnMiLCJ1c2VyX2lkZW50aXR5IjoidXNlcjEyMyIsInNlc3Npb25fa2V5Ijoic2Vzc2lvbjEyMyIsInJvbGVfdHlwZSI6MH0.Y6C65mZUxTZFeGiOI6oW5q2UkIXe3nLTK0MVNkfiJ9c
3-3) Node.js generate Video SDK JWT function
위에서 잠깐 언급했던 Sample App 을 보면, Node.js 로 JWT 를 생성하는 함수를 볼 수 있다. 아래 예시 코드는 jsrsasign 이라는 오픈소스 암호화 JavaScript 라이브러리를 사용한다.
const KJUR = require('jsrsasign')
// https://www.npmjs.com/package/jsrsasign
function generateSignature(sdkKey, sdkSecret, sessionName, role, sessionKey, userIdentity) {
const iat = Math.round((new Date().getTime() - 30000) / 1000)
const exp = iat + 60 * 60 * 2
const oHeader = { alg: 'HS256', typ: 'JWT' }
const oPayload = {
app_key: sdkKey,
tpc: sessionName,
role_type: role,
session_key: sessionKey,
user_identity: userIdentity,
iat: iat,
exp: exp
}
const sHeader = JSON.stringify(oHeader)
const sPayload = JSON.stringify(oPayload)
const sdkJWT = KJUR.jws.JWS.sign('HS256', sHeader, sPayload, sdkSecret)
return sdkJWT
}
console.log(generateSignature(process.env.ZOOM_VIDEO_SDK_KEY, process.env.ZOOM_VIDEO_SDK_SECRET, 'Cool Cars', 1, 'session123', 'user123'))
다양한 언어의 JWT 관련 라이브러리나 예시를 보고 싶다면, JWT.io 사이트를 참고하면 된다.
Zoom Video SDK 에 대한 전반적인 내용을 배워보았다. "Video SDK Dashboard" 에 대한 내용도 정리하려 했으나, 아직 직접 해볼 수 없을 것 같아서 생략하였다. 다음 글에서는 Zoom Video SDK 를 Android 코드에서 사용하는 방법에 대해 기술할 예정이다. 그리고, 세션을 맺는 것까지 배운 후에 Video SDK Dashboard 에 대한 내용을 정리할 것 같다.
'Android Developer' 카테고리의 다른 글
Android Zoom Video SDK : 3. Essential Guides (2) (0) | 2022.08.10 |
---|---|
Android Zoom Video SDK : 2. Essential Guides (1) (0) | 2022.08.05 |
Android Zoom Meeting SDK : 2. Integrate SDK (0) | 2022.06.30 |
Android Zoom Meeting SDK : 1. 데모앱 살펴보기 (0) | 2022.06.24 |
Androidx ViewPager2 정리 (0) | 2022.06.21 |