SIP Call
sipcall์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ผ๋ฐ ์ ํ ๊ฐ ์ ํ๋ฅผ ์ฐ๊ฒฐ ํ ์ ์๋๋ก ๊ตฌํํ ๊ฒ์ ๋๋ค. ํตํ ๋ฐ์ ์๋ caller, ์ฐฉ์ ์๋ฅผ callee๋ผ๋ ํต์ ์ฉ์ด๋ก ๊ตฌ๋ถํฉ๋๋ค. Omnitalk SDK๋ฅผ ์ฌ์ฉํ์ฌ offerCall(), answerCall()์ ํธ์ถํ๊ณ ํด๋น ์ด๋ฒคํธ ๋ฉ์์ง์ ๋์ํ๋ ๊ฒ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ผ๋ฐ ์ ํ ๊ฐ ์ ํ ์ฐ๊ฒฐ์ ๊ฐ๋จํ ๊ตฌํํ ์ ์์ต๋๋ค.
Step 1. ์ธ์
์์ฑ
Omnitalk SDK์ ์ด๊ธฐํ๋ฅผ ์ ์ธํ ๋ชจ๋ API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฐ์ ์ ์ผ๋ก createSession()์ ํธ์ถํ์ฌ ์ธ์ ์ ์์ฑํด์ผ ํฉ๋๋ค. createSession()์ ํ๋ผ๋ฏธํฐ์ธ userId๋ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ณ ์ ํ id์ด๋ฉฐ audiocall ๋ฐ์ ์ ์ํ offerCall() ํธ์ถ์ ์ฌ์ฉ๋ฉ๋๋ค. userId๋ Optional ์ด๋ฉฐ, null๋ก ์ ๋ฌํ ๊ฒฝ์ฐ Omnitalk ์๋ฒ์์ ์์์ id๋ฅผ ๋ถ์ฌํฉ๋๋ค.
sdk.createSession(userId = "USER_ID")Step 2. ๋ฐ์
offerCall() API๋ก ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ผ๋ฐ ์ ํ๋ก ์ ํ ์์ฒญ์ ํ ์ ์์ต๋๋ค. ํ๋ผ๋ฏธํฐ๋ก callType, callee์ ์ ํ๋ฒํธ, ๋ น์ ์ฌ๋ถ๋ฅผ ์ ๋ฌํ๋ฉด ๋ฉ๋๋ค.
callType: ์ ํ ํ์ ์ ์๋ฏธํฉ๋๋ค. CALL_TYPE์ Omnitalk SDK์์ enum type์ผ๋ก ์ ๊ณตํฉ๋๋ค. ์ผ๋ฐ ์ ํ์ ์์ฑ ํตํ๋ฅผ ์ํด์๋
sipcall์ ์ ๋ฌํ์๋ฉด ๋ฉ๋๋ค.callee: ์ ํ๋ฅผ ๊ฑธ๊ณ ์ ํ๋ ์์ ์์ ์ ํ ๋ฒํธ๋ฅผ ์ ๋ฌํ์๋ฉด ๋ฉ๋๋ค.
record: Optional ํ๋ผ๋ฏธํฐ๋ก, ๋ น์ ์ฌ๋ถ๋ฅผ ์๋ฏธํฉ๋๋ค. defalut = false
localView, remoteView: ์์ ํตํ์ ์ฌ์ฉ๋๋ ํ๋ผ๋ฏธํฐ์ ๋๋ค. SIP ์ ํ ๊ธฐ๋ฅ์์๋ null๋ก ์ ์ฉํ์๋ฉด ๋ฉ๋๋ค.
import io.omnitalk.sdk.types.PublicTypes
val callee = "[email protected]"
sdk.offerCall(
callType = PublicTypes.CALL_TYPE.sipcall,
callee = "01012345678",
record = true,
localView = null,
remoteView = null
)offerCall ํธ์ถ ์ฑ๊ณต์ caller๋ RINGBACK_EVEVT, callee๋ ์ ํ ์์ฒญ์ด ์ธ๋ฆฌ๊ฒ ๋ฉ๋๋ค. ์ด ๋, callee์๊ฒ ๋ณด์ฌ์ง๋ ๋ฐ์ ์ ์ ๋ณด๋ ์ด๋ํก์์ ๋ฐ๊ธ๋ฐ์ ๋ฒํธ ์
๋๋ค.
Step 3. ์์
์ผ๋ฐ ์ ํ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ ํ ์์ฒญ์ ํ ๊ฒฝ์ฐ์๋ makeSipNumber() API๋ฅผ ํตํด์ 6์๋ฆฌ์ callNumber๋ฅผ ๋ฐ๊ธ ๋ฐ์์ผํฉ๋๋ค. ์ผ๋ฐ ์ ํ -> ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ Call Flow๋ ์๋์ ๊ฐ์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์ makeSipNumber() API ํตํด์ callNumber ๋ฐ๊ธ ( 4๋ฒ ๋ค์ ์์๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ )
์ผ๋ฐ ์ ํ๋ก ์ด๋ํก์์ ๋ฐ๊ธ๋ฐ์ ๋ฒํธ๋ก ์ ํ
์ ํ๋ฅผ ์์ฒญํ๊ณ ์ ํ๋ 6์๋ฆฌ callNumber(PIN Number) ์ ๋ ฅ
ํด๋น callNumber๋ก ๋ฐ์ ์์ฒญ
์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ ํ ์์ฒญ์ด ์์๋, ์์ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
Android SDK ์์๋ ์๋ ๋ ์ํฉ์ ๋ํด์ answerCall() API๋ฅผ ์ค๋ฒ๋ก๋ฉํ์ฌ ๊ฐ๊ฐ ์ ๊ณตํฉ๋๋ค.
callee๊ฐ callNumber๋ฅผ ์์ฑํ ์ํ์์ ์ ํ ์์ฒญ์ด ์์๋
callee(์ ํ๋ฆฌ์ผ์ด์
)๊ฐ callNumber๋ฅผ ์์ฑํ ์ํ์์ caller(์ผ๋ฐ ์ ํ)๊ฐ ์ ํ๋ฅผ ๊ฑธ์ดRINGING_EVENT๋ฅผ ๋ฐ์ ๊ฒฝ์ฐ, callee๋ ๋ณ๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ์ง ์๊ณ answerCall()์ ํธ์ถํ์ฌ ์ ํ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ์์ ๊ฑฐ์ ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ leave()๋ฅผ ํธ์ถํ์๋ฉด ๋ฉ๋๋ค.
localView, remoteView: ์์ ํตํ์ ์ฌ์ฉ๋๋ ํ๋ผ๋ฏธํฐ์ ๋๋ค. 1:1 ์ ํ ๊ธฐ๋ฅ์์๋ null๋ก ์ ์ฉํ์๋ฉด ๋ฉ๋๋ค.
sdk.answerCall(localView = null, remoteView = null)callee๊ฐ callNumber๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ ์์ฒญ์ด ์์๋
callee(์ ํ๋ฆฌ์ผ์ด์
)๊ฐ callNumber๋ฅผ ์์ฑํ๊ธฐ ์ ์ caller(์ผ๋ฐ ์ ํ)๊ฐ ์ ํ๋ฅผ ๊ฑธ์ดRINGING_EVENT๋ฅผ ๋ฐ์ง ๋ชปํ ๊ฒฝ์ฐ, callee๋ answerCall()์ ํ๋ผ๋ฏธํฐ์ callType๊ณผ caller์ ์ ํ๋ฒํธ๋ฅผ ์ ๋ฌํ์ฌ ์ ํ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ์ด๋ํก ์๋ฒ์์ ๋ณ๋์ ์ด๋ฒคํธ๋ก callType๊ณผ caller์ ์ ๋ณด๋ฅผ ์ ๊ณต๋๋ฆด ์์ ์
๋๋ค.
callType: ์ ํ ํ์ ์ ์๋ฏธํฉ๋๋ค. caller๊ฐ offerCall()์ ํธ์ถํ ๋์ ๋์ผํ๊ฒ
sipcall์ ์ ๋ฌํ์๋ฉด ๋ฉ๋๋ค.caller: caller(์ ํ ๋ฐ์ ์)์ ์ ํ๋ฒํธ๋ฅผ ์ ๋ฌํ์๋ฉด ๋ฉ๋๋ค.
localView, remoteView: ์์ ํตํ์ ์ฌ์ฉ๋๋ ํ๋ผ๋ฏธํฐ์ ๋๋ค. 1:1 ์ ํ ๊ธฐ๋ฅ์์๋ null๋ก ์ ์ฉํ์๋ฉด ๋ฉ๋๋ค.
import io.omnitalk.sdk.types.PublicTypes
sdk.offerCall(
callType = PublicTypes.CALL_TYPE.sipcall,
callee = "01012345678",
record = true,
localView = null,
remoteView = null
)Step 4. ์ฐ๊ฒฐ ์ฑ๊ณต
์์ฑ ํตํ ์ฐ๊ฒฐ์ด ์ฑ๊ณตํ๋ฉด callee(์ ํ๋ฆฌ์ผ์ด์
)๋ CONNECTED_EVENT ๋ฅผ ์์ ํฉ๋๋ค.
Step 5. ์ ํ ๋๊ธฐ
leave() API๋ฅผ ํตํด์ ์ ํ ์ฐ๊ฒฐ์ ๋์ ์ ์์ต๋๋ค.
sdk.leave(session = null) // default: ๋ณธ์ธ ์ฐ๊ฒฐ ๋๊ธฐ์ค๋์ค ์ฅ์น ์ ์ด
mute/unmute
์ ํ ํตํ์ค์ ์์๊ฑฐ๋ฅผ ํ ์ ์๋๋ก API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉ๋ฒ๊ณผ ์์ธํ ๋ด์ฉ์ API Reference์ mute/unmute ๋ถ๋ถ์ ์ฐธ์กฐ ๋ฐ๋๋๋ค. mute/unmute API์ ํ๋ผ๋ฏธํฐ์ธ TRACK_TYPE ์ Omnitalk SDK์์ enum type์ผ๋ก ์ ๊ณตํฉ๋๋ค. ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
import io.omnitalk.sdk.types.PublicTypes
sdk.setMute(track = PublicTypes.TRACK_TYPE.audio)์
๋ ฅ ์ฅ์น ๋ณ๊ฒฝ
์ ํ ํตํ์ค์ ์
๋ ฅ(๋ง์ดํฌ) ์ฅ์น๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก setAudioDevice() API๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ๋ผ๋ฏธํฐ์ธ MIC_TYPE์ Omnitalk SDK์์ enum type์ผ๋ก ์ ๊ณตํฉ๋๋ค. ๊ท์ ๋์ด ์ ํ๋ฐ๋ defaultInEar ํ์
๊ณผ ์คํผ์ปคํฐ ๋ชจ๋์ธ speaker ๋ ๊ฐ์ง๋ก ์ ๊ณต ๋ฉ๋๋ค. ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
import io.omnitalk.sdk.types.PublicTypes
sdk.setAudioDevice(type=PublicTypes.MIC_TYPE.speakr)Last updated