Quick Start

Omnitalk SDK를 어떻게 활용할 수 있는지에 대한 간단한 예시입니다. 기본적으로 모든 API는 async, await로 작성 되었으며, 요청이 실패한 경우 에러를 throw 합니다. API들의 자세한 사용법은 iOS API Reference를 참조 바랍니다.

데모 앱 소스코드: https://github.com/omnistory-labs/omnitalk.ios.sdk/tree/demo

1:1 영상 통화

1. 옴니톡 객체 생성

콘솔에서 발급받은 Service ID와 Service KEY로 Omnitalk 객체를 생성합니다.

import OmnitalkSdk

try OmniTalk.sdkInit(serviceId: "YOUR_SERVICE_ID", serviceKey: "YOUR_SERVICE_KEY")
let sdk = OmniTalk.getInstance()

2. 세션 생성

인수로 전달한 userId로 세션을 생성하게 됩니다. userId는 Optional이며, nil일 경우 서버에서 임의의 userId를 생성합니다.

let createSessionResult = try await sdk.createSession(userId: "alice")

3. 발신

1:1 영상 통화를 구현하기 위한 발신 기능은 offerCall() API를 이용합니다. 자신과 상대방의 영상을 화면에 재생하기 위해서 파라미터에 영상을 출력할 RTCMTLVideoView 객체를 전달합니다. 해당 객체를 생성하기 위해서 WebRTC 모듈을 import 해야 합니다. ( Omnitalk SDK 패키지에 포함된 모듈 )

offerCall 호출이 성공하면 caller에게는 RINGBACK_EVENT가, callee에게는 RINGING_EVENT가 전달됩니다.

import WebRTC

let callee = "test@omnistory.net"
let localView = await RTCMTLVideoView()
let remoteView = await RTCMTLVideoView()
try await sdk.offerCall(callType: .VIDEO_CALL, callee: callee, record: true, localView: localView, remoteView: remoteView)

4. 수신

callee측에서는 RINGING_EVENT를 받고 통화를 수락하거나 거절할 수 있습니다. 통화 수락은 answerCall() API를 이용합니다. 자신과 상대방의 영상을 화면에 재생하기 위해서 파라미터에 영상을 출력할 RTCMTLVideoView 객체를 전달합니다. 해당 객체를 생성하기 위해서 WebRTC 모듈을 import 해야 합니다. ( Omnitalk SDK 패키지에 포함된 모듈 )

answerCall이 정상적으로 수행되면 caller, callee 양측은 CONNECTED_EVENT를 받습니다. 수신 거절은 leave() API를 이용하시면 됩니다.

func onEvent(eventName: OmniEvent, message: Any) {
    switch eventName {
        case .RINGING_EVENT:
            try await sdk.answerCall(localView: localView, remoteView: remoteView)
        case .CONNECTED_EVENT:
            ...
    }
}

영상 회의

1. 옴니톡 객체 생성

콘솔에서 발급받은 Service ID로 Omnitalk 객체를 생성합니다.

import OmnitalkSdk

try OmniTalk.sdkInit(serviceId: "YOUR_SERVICE_ID", serviceKey: "YOUR_SERVICE_KEY")
let sdk = OmniTalk.getInstance()

2. 세션 생성

인수로 전달한 user_id로 세션을 생성하게 됩니다. userId는 Optional이며, nil일 경우 서버에서 임의의 userId를 생성합니다.

let createSessionResult = try await sdk.createSession(userId: "alice")

3. 룸 생성

영상 회의를 위한 룸을 생성합니다. roomType을 제외한 나머지 파라미터는 Optional 입니다.

let createRoomResult = try await sdk?.createRoom(roomType: .VIDEO_ROOM, subject: "subject", secret: "secret", startDate: nil, endDate: nil)

4. 룸 참여

룸에 참여하게 되면 음성과 채팅 메시지를 주고 받을 수 있는 상태가 됩니다. roomId을 제외한 나머지 파라미터는 Optional 입니다.

let roomId = createRoomResult.roomId
try await sdk.joinRoom(roomId: roomId, secret: "secret", userName: "userName")

5. 방송 시작

로컬의 영상을 송출합니다. publish API는 roomType VIDEO_ROOM 또는 WEBINAR 에서만 필요한 기능입니다.

파라미터에 로컬의 영상을 출력할 RTCMTLVideoView 객체를 전달합니다. 해당 객체를 생성하기 위해서 WebRTC 모듈을 import 해야 합니다. ( Omnitalk SDK 패키지에 포함된 모듈 )

let localView = await RTCMTLVideoView()
try await sdk.publish(view: localView)

6. 방송 구독

구독하고자는 방송의 session을 인수로 전달하면 해당 방송을 구독할 수 있습니다. 상대방 영상을 화면에 재생하기 위해서 파라미터에 영상을 출력할 RTCMTLVideoView 객체를 전달합니다. 해당 객체를 생성하기 위해서 WebRTC 모듈을 import 해야 합니다. ( Omnitalk SDK 패키지에 포함된 모듈 )

let remoteView = await RTCMTLVideoView()
await sdk.subscribe(publisherSession: "PUBLISHER_SESSION", view: remoteView)

Last updated