Audio Call

audiocall์€ 1:1 ์ „ํ™” ๊ธฐ๋Šฅ์„ ์ธํ„ฐ๋„ท์„ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ†ตํ™” ๋ฐœ์‹ ์ž๋Š” caller, ์ฐฉ์‹ ์ž๋ฅผ callee๋ผ๋Š” ํ†ต์‹  ์šฉ์–ด๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Omnitalk SDK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ offerCall(), answerCall()์„ ๊ฐ๊ฐ ํ˜ธ์ถœํ•˜๊ณ  ํ•ด๋‹น ์ด๋ฒคํŠธ ๋ฉ”์‹œ์ง€์— ๋Œ€์‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ „ํ™” ๊ธฐ๋Šฅ์„ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Call Flow ์—์„œ๋Š” audiocall์˜ ํ๋ฆ„์„ sequence diagram์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Step 1. ์„ธ์…˜ ์ƒ์„ฑ

Omnitalk SDK์˜ ์ดˆ๊ธฐํ™”๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„ ์ ์œผ๋กœ createSession()์„ ํ˜ธ์ถœํ•˜์—ฌ ์„ธ์…˜์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. createSession()์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ userId๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ ํ•œ id์ด๋ฉฐ audiocall ๋ฐœ์‹ ์„ ์œ„ํ•œ offerCall() ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. userId๋Š” Optional ์ด๋ฉฐ, null๋กœ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ Omnitalk ์„œ๋ฒ„์—์„œ ์ž„์˜์˜ id๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

sdk.createSession(userId = "USER_ID")

Step 2. ๋ฐœ์‹ 

๋™์ผํ•œ Service Id๋กœ ์„ธ์…˜์„ ์ƒ์„ฑํ•œ ์‚ฌ์šฉ์ž ์ค‘ idle state์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „ํ™” ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

offerCall() API๋กœ ์ „ํ™” ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ callType, callee์˜ userId, ๋…น์Œ ์—ฌ๋ถ€๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • callType: ์ „ํ™” ํƒ€์ž…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. CALL_TYPE์€ Omnitalk SDK์—์„œ enum type์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Œ์„ฑ ํ†ตํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š” audiocall ์„ ์ „๋‹ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • callee: callee์˜ userId๋ฅผ ์ „๋‹ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • record: Optional ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ, ๋…น์Œ ์—ฌ๋ถ€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. defalut = false

  • localView, remoteView: ์˜์ƒ ํ†ตํ™”์— ์‚ฌ์šฉ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค. 1:1 ์ „ํ™” ๊ธฐ๋Šฅ์—์„œ๋Š” null๋กœ ์ ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

import io.omnitalk.sdk.types.PublicTypes

sdk.offerCall(
    callType = PublicTypes.CALL_TYPE.audiocall,
    callee = calleeId,
    record = true,
    localView = null,
    remoteView = null
)

offerCall ํ˜ธ์ถœ ์„ฑ๊ณต์‹œ caller๋Š” RINGBACK_EVEVT, callee๋Š” RINGING_EVENT๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

Step 3. ์ˆ˜์‹ 

Android SDK ์—์„œ๋Š” ์•„๋ž˜ ๋‘ ์ƒํ™ฉ์— ๋Œ€ํ•ด์„œ answerCall() API๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉํ•˜์—ฌ ๊ฐ๊ฐ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

callee๊ฐ€ RINGING_EVENT๋ฅผ ๋ฐ›์€ ๊ฒฝ์šฐ

callee๊ฐ€ ์„ธ์…˜์„ ์ƒ์„ฑํ•œ ์ƒํƒœ์—์„œ caller๊ฐ€ offerCall(์ „ํ™” ์š”์ฒญ)์„ ํ•˜์—ฌRINGING_EVENT๋ฅผ ๋ฐ›์€ ๊ฒฝ์šฐ, callee๋Š” ๋ณ„๋„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  answerCall()์„ ํ˜ธ์ถœํ•˜์—ฌ ์ „ํ™”๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹  ๊ฑฐ์ ˆ์„ ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ leave()๋ฅผ ํ˜ธ์ถœํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • localView, remoteView: ์˜์ƒ ํ†ตํ™”์— ์‚ฌ์šฉ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค. 1:1 ์ „ํ™” ๊ธฐ๋Šฅ์—์„œ๋Š” null๋กœ ์ ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

callee๊ฐ€ ์ „ํ™” ์š”์ฒญ(offerCall) ์ดํ›„์— session์„ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ

callee๊ฐ€ ์„ธ์…˜์„ ์ƒ์„ฑํ•˜๊ธฐ ์ „ caller๊ฐ€ offerCall(์ „ํ™” ์š”์ฒญ)์„ ํ•˜์—ฌ RINGING_EVENT๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ, callee๋Š” answerCall()์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— callType๊ณผ caller๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ „ํ™”๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ callee ์—๊ฒŒ callType๊ณผ caller๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • callType: ์ „ํ™” ํƒ€์ž…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. caller๊ฐ€ offerCall()์„ ํ˜ธ์ถœํ•  ๋•Œ์™€ ๋™์ผํ•˜๊ฒŒ audiocall ์„ ์ „๋‹ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • caller: caller(์ „ํ™” ๋ฐœ์‹ ์ž)์˜ userId๋ฅผ ์ „๋‹ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • localView, remoteView: ์˜์ƒ ํ†ตํ™”์— ์‚ฌ์šฉ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค. 1:1 ์ „ํ™” ๊ธฐ๋Šฅ์—์„œ๋Š” null๋กœ ์ ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Step 4. ์—ฐ๊ฒฐ ์„ฑ๊ณต

์Œ์„ฑ ํ†ตํ™” ์—ฐ๊ฒฐ์ด ์„ฑ๊ณตํ•˜๋ฉด caller, callee ์–‘์ธก ๋ชจ๋‘ CONNECTED_EVENT ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

Step 5. ์ „ํ™” ๋Š๊ธฐ

leave() API๋ฅผ ํ†ตํ•ด์„œ ์ „ํ™” ์—ฐ๊ฒฐ์„ ๋Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋””์˜ค ์žฅ์น˜ ์ œ์–ด

mute/unmute

์ „ํ™” ํ†ตํ™”์ค‘์— ์Œ์†Œ๊ฑฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•๊ณผ ์ž์„ธํ•œ ๋‚ด์šฉ์€ API Reference์˜ mute/unmute ๋ถ€๋ถ„์„ ์ฐธ์กฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. mute/unmute API์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ TRACK_TYPE ์€ Omnitalk SDK์—์„œ enum type์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ ์žฅ์น˜ ๋ณ€๊ฒฝ

์ „ํ™” ํ†ตํ™”์ค‘์— ์ž…๋ ฅ(๋งˆ์ดํฌ) ์žฅ์น˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก setAudioDevice() API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์ธ MIC_TYPE์€ Omnitalk SDK์—์„œ enum type์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ท€์— ๋Œ€์–ด ์ „ํ™”๋ฐ›๋Š” defaultInEar ํƒ€์ž…๊ณผ ์Šคํ”ผ์ปคํฐ ๋ชจ๋“œ์ธ speaker ๋‘ ๊ฐ€์ง€๋กœ ์ œ๊ณต ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Last updated