์๋ ๋ชจ๋
์ผ๋ง ์ ์ฐ๋ฆฌ
์ ํ์ ๊ฒฝ์ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. simple_pjsua PJSIP ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ๋ก. ์ด๊ฒ์ ์๋ฒ์ ๋ฑ๋กํ๊ณ ์ ํ๋ฅผ ๋ฐ๊ณ ์๋ตํ ์ ์๋ ์ต์ํ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์๋์์ STM32F7-Discovery์์ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ฆ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์คํ ๋ฐฉ๋ฒ
- ์ ๋ฐ์ค ๊ตฌ์ฑ
make confload-platform/pjsip/stm32f7cube
- conf/mods.config ํ์ผ์์ ํ์ํ SIP ๊ณ์ ์ ์ค์ ํฉ๋๋ค.
include platform.pjsip.cmd.simple_pjsua_imported( sip_domain="server", sip_user="username", sip_passwd="password")
์ด๋์์ ์ฌ๊ธฐ๋ ์ฌ๋ SIP ์๋ฒ(์: sip.linphone.org), ์ฌ์ฉ์ ์ด๋ฆ ะธ ์ํธ - ๊ณ์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ.
- Embox๋ฅผ ํ์ผ๋ก ๊ตฌ์ฑํ๊ธฐ ํ์ธ. ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ณด๋ ํ์จ์ด ์ ๋ณด
์ํค ๊ณผ๊ธฐ์ฌ . - Embox ์ฝ์์์ "simple_pjsua_imported" ๋ช
๋ น ์คํ
00:00:12.870 pjsua_acc.c ....SIP outbound status for acc 0 is not active 00:00:12.884 pjsua_acc.c ....sip:[email protected]: registration success, status=200 (Registration succes 00:00:12.911 pjsua_acc.c ....Keep-alive timer started for acc 0, destination:91.121.209.194:5060, interval:15s
- ๋ง์ง๋ง์ผ๋ก ์คํผ์ปค๋ ํค๋ํฐ์ ์ค๋์ค ์ถ๋ ฅ์ ์ฝ์ ํ๊ณ ๋์คํ๋ ์ด ์์ ์๋ ๋ ๊ฐ์ ์์ MEMS ๋ง์ดํฌ์ ๋งํด์ผ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ simple_pjsua, pjsua๋ฅผ ํตํด Linux์์ ํธ์ถํฉ๋๋ค. ๊ธ์, ์๋๋ฉด ๋ค๋ฅธ ์ ํ์ ์ ํ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ์ฐ๋ฆฌ์ ์ค๋ช
๋์ด ์์ต๋๋ค
์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ๊ฑฐ๊ธฐ์ ๋์ฐฉ ํ์ต๋๊น?
๋ฐ๋ผ์ ์ฒ์์๋ ํ๋์จ์ด ํ๋ซํผ ์ ํ์ ๋ํ ์ง๋ฌธ์ด ์๊ฒผ์ต๋๋ค. STM32F4-Discovery๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ํฉํ์ง ์๋ค๋ ๊ฒ์ด ๋ถ๋ช ํ๊ธฐ ๋๋ฌธ์ STM32F7-Discovery๊ฐ ์ ํ๋์์ต๋๋ค. ๊ทธ๋ ๋ 1MB ํ๋์ ๋๋ผ์ด๋ธ์ 256KB RAM (+ 64 ํน์ ๊ณ ์ ๋ฉ๋ชจ๋ฆฌ, ์ฐ๋ฆฌ๋ ์ฌ์ฉํ ๊ฒ์)์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ํ ์๋ฒ๋ฅผ ํตํ ํธ์ถ์ด ๋ง์ง๋ ์์ง๋ง ์ฐ๋ฆฌ๋ ๋ง์ถฐ๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
์กฐ๊ฑด๋ถ๋ก ์์ ์ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋ฉ๋๋ค.
- QEMU์์ PJSIP ์คํ. ๋๋ฒ๊น ์ ํธ๋ฆฌํ๊ณ ์ด๋ฏธ AC97 ์ฝ๋ฑ์ ์ง์ํ์ต๋๋ค.
- QEMU ๋ฐ STM32์์ ์์ฑ ๋ น์ ๋ฐ ์ฌ์.
- ์ ํ๋ฆฌ์ผ์ด์ ํฌํ simple_pjsua PJSIP์์. SIP ์๋ฒ์ ๋ฑ๋กํ๊ณ ์ ํ๋ฅผ ๊ฑธ ์ ์์ต๋๋ค.
- ๊ณ ์ ํ Asterisk ๊ธฐ๋ฐ ์๋ฒ๋ฅผ ๋ฐฐํฌํ๊ณ ํ ์คํธํ ๋ค์ sip.linphone.org์ ๊ฐ์ ์ธ๋ถ ์๋ฒ๋ฅผ ์ฌ์ฉํด ๋ณด์ญ์์ค.
Embox์ ์ฌ์ด๋๋ PISIP์์๋ ์ฌ์ฉ๋๋ Portaudio๋ฅผ ํตํด ์๋ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ QEMU์์ ๋ํ๋ฌ์ต๋๋ค. WAV๋ 44100Hz์์ ์ ์ฌ์๋์์ง๋ง 8000Hz์์๋ ๋ถ๋ช ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ทธ๊ฒ์ ์ฃผํ์ ์ค์ ์ ๋ฌธ์ ๋ผ๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฅ๋น์์ 44100์ด์๊ณ ์ด๊ฒ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค.
์ฌ๊ธฐ์์ ์ผ๋ฐ์ ์ผ๋ก ์๋ฆฌ๊ฐ ์ด๋ป๊ฒ ์ฌ์๋๋์ง ์กฐ๊ธ ์ค๋ช ํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ฌ์ด๋ ์นด๋๋ ๋ฏธ๋ฆฌ ์ ํด์ง ์ฃผํ์๋ก ์ฌ์ํ๊ฑฐ๋ ๋ น์ํ๋ ค๋ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ์ ๋ํ ํฌ์ธํฐ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ๋ฒํผ๊ฐ ๋๋๋ฉด ์ธํฐ๋ฝํธ๊ฐ ์์ฑ๋๊ณ ๋ค์ ๋ฒํผ์์ ์คํ์ด ๊ณ์๋ฉ๋๋ค. ์ฌ์ค ์ด๋ฌํ ๋ฒํผ๋ ์ด์ ๋ฒํผ๊ฐ ์ฌ์๋๋ ๋์ ๋ฏธ๋ฆฌ ์ฑ์์ ธ์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ STM32F7์์ ์ด ๋ฌธ์ ์ ๋ ์ง๋ฉดํ ๊ฒ์ ๋๋ค.
๋ค์์ผ๋ก ์๋ฒ๋ฅผ ์๋ํ๊ณ Asterisk๋ฅผ ๋ฐฐํฌํ์ต๋๋ค. ๋๋ฒ๊น
์ด ๋ง์ด ํ์ํ์ง๋ง ๋ง์ดํฌ์ ๋๊ณ ๋ณ๋ก ๋งํ๊ณ ์ถ์ง ์์๊ธฐ ๋๋ฌธ์ ์๋ ์ฌ์ ๋ฐ ๋
น์์ด ํ์ํ์ต๋๋ค. ์ด๋ฅผ ์ํด ์ค๋์ค ์ฅ์น ๋์ ํ์ผ์ ์ฌ๋ฆฝํ ์ ์๋๋ก simple_pjsua๋ฅผ ํจ์นํ์ต๋๋ค. PJSIP์์๋ ์ฅ์น๋ ํ์ผ์ด ๋ ์ ์๋ ํฌํธ ๊ฐ๋
์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ์ํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ํฌํธ๋ ๋ค๋ฅธ ํฌํธ์ ์ ์ฐํ๊ฒ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. pjsip์์ ์ฝ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
QEMU์์ ์์ ํ ํ STM32F7-Discovery๋ก ํฌํ ํ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ์ด๋ฏธ์ง ํฌ๊ธฐ์ ๋ํด ํ์ฑํ๋ ์ปดํ์ผ๋ฌ ์ต์ ํ "-Os" ์์ด๋ 1MB ROM์ ๋ง์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ "-Os"๋ฅผ ํฌํจ์ํจ ์ด์ ์ ๋๋ค. ๋ํ ํจ์น๋ C ++์ ๋ํ ์ง์์ ๋นํ์ฑํํ๊ธฐ ๋๋ฌธ์ pjsua์๋ง ํ์ํ๋ฉฐ simple_pjsua๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐฐ์น ํ simple_pjsua, ์ด์ ์์ํ ๊ธฐํ๊ฐ ์๋ค๊ณ ๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋จผ์ ์์ฑ ๋ น์ ๋ฐ ์ฌ์์ ์ฒ๋ฆฌํด์ผ ํ์ต๋๋ค. ๋ฌธ์ ๋ ์ด๋์ ์ธ ๊ฒ์ธ๊ฐ? ์ฐ๋ฆฌ๋ ์ธ๋ถ ๋ฉ๋ชจ๋ฆฌ์ธ SDRAM(128MB)์ ์ ํํ์ต๋๋ค. ์ง์ ์๋ํด ๋ณผ ์ ์์ต๋๋ค.
์ฃผํ์๊ฐ 16000Hz์ด๊ณ ์ง์ ์๊ฐ์ด 10์ด์ธ ์คํ ๋ ์ค WAV๋ฅผ ์์ฑํฉ๋๋ค.
record -r 16000 -c 2 -d 10000 -m C0000000
์ฐ๋ฆฌ๋ ์๋๋ค:
play -m C0000000
์ฌ๊ธฐ์๋ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ฝ๋ฑ์ธ WM8994๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ฌ๋กฏ ๊ฐ์ ๊ฒ์ด ์๊ณ ์ด๋ฐ ์ฌ๋กฏ์ด 4๊ฐ ์์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฒ์ด ์ค์ ๋์ด ์์ง ์์ผ๋ฉด ์ค๋์ค ์ฌ์ ์ 16000๊ฐ ์ฌ๋กฏ ๋ชจ๋์์ ์ฌ์์ด ๋ฉ๋๋ค. . ๋ฐ๋ผ์ 8000Hz์ ์ฃผํ์์์ 8000Hz๋ฅผ ์์ ํ์ง๋ง 0Hz์ ๊ฒฝ์ฐ ์ฌ์์ด ์๋ํ์ง ์์์ต๋๋ค. ์ฌ๋กฏ 2๊ณผ 32๋ง ์ ํํ๋ฉด ์ ๋๋ก ์๋ํ์ต๋๋ค. ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ STMXNUMXCube์ ์ค๋์ค ์ธํฐํ์ด์ค์๋๋ฐ ์ค๋์ค ์ถ๋ ฅ์ด ์ค๋์ค ์ ๋ ฅ๊ณผ ๋์์ SAI(Serial Audio Interface)๋ฅผ ํตํด ์๋ํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์ดํดํ์ง ๋ชปํ์ง๋ง ๊ณตํต ํด๋ญ์ ๊ณต์ ํ๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์ค๋์ค ์ถ๋ ฅ์ด ์ด๊ธฐํ๋๊ณ ์ค๋์ค๊ฐ ์ ๊ตฌ์ ์ฐ๊ฒฐ๋จ). ์ฆ, ๋ณ๋๋ก ์คํํ ์ ์์ผ๋ฏ๋ก ์ค๋์ค ์ ๋ ฅ ๋ฐ ์ค๋์ค ์ถ๋ ฅ์ด ํญ์ ์๋ํฉ๋๋ค(์ธํฐ๋ฝํธ ์์ฑ ํฌํจ). ๊ทธ๋ฌ๋ ์์คํ ์์ ์๋ฌด ๊ฒ๋ ์ฌ์๋์ง ์์ ๋ ๋น ๋ฒํผ๋ฅผ ์ค๋์ค ์ถ๋ ฅ์ ์ฝ์ ํ๊ณ ์ฌ์์ด ์์๋๋ฉด ์ ์งํ๊ฒ ์ฑ์ฐ๊ธฐ ์์ํฉ๋๋ค.
๋ํ ์์ฑ ๋ น์ ์ ์๋ฆฌ๊ฐ ๋งค์ฐ ์กฐ์ฉํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ STM32F7-Discovery์ MEMS ๋ง์ดํฌ๊ฐ 16000Hz ๋ฏธ๋ง์ ์ฃผํ์์์ ์ ๋๋ก ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ 16000Hz๊ฐ ์ค๋๋ผ๋ 8000Hz๋ก ์ค์ ํฉ๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ ค๋ฉด ํ ์ฃผํ์๋ฅผ ๋ค๋ฅธ ์ฃผํ์๋ก ๋ณํํ๋ ์ํํธ์จ์ด๋ฅผ ์ถ๊ฐํด์ผ ํ์ต๋๋ค.
๋ค์์ผ๋ก RAM์ ์๋ ํ์ ํฌ๊ธฐ๋ฅผ ๋๋ ค์ผ ํ์ต๋๋ค. ๊ณ์ฐ์ ๋ฐ๋ฅด๋ฉด pjsip์๋ ์ฝ 190KB๊ฐ ํ์ํ๊ณ ์ฝ 100KB๋ง ๋จ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ธ๋ถ ๋ฉ๋ชจ๋ฆฌ์ธ SDRAM(์ฝ 128KB)์ ์ฌ์ฉํด์ผ ํ์ต๋๋ค.
์ด ๋ชจ๋ ํธ์ง ํ์ Linux์ Embox ์ฌ์ด์ ์ฒซ ๋ฒ์งธ ํจํค์ง๋ฅผ ๋ณด์๊ณ ์๋ฆฌ๋ฅผ ๋ค์์ต๋๋ค! ๊ทธ๋ฌ๋ ์๋ฆฌ๋ ๋์ฐํ๊ณ QEMU์ ์ ํ ๊ฐ์ง ์์์ผ๋ฉฐ ์๋ฌด๊ฒ๋ ์์๋ผ ์ ์์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์๊ฐํ์ต๋๋ค. ๋๋ฒ๊น
๊ฒฐ๊ณผ Embox์ ์ค๋์ค ๋ฒํผ๋ฅผ ์ฑ์ฐ๊ฑฐ๋ ์ธ๋ก๋ํ ์๊ฐ์ด ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. pjsip์ด ํ ํ๋ ์์ ์ฒ๋ฆฌํ๋ ๋์ ๋ฒํผ ์ฒ๋ฆฌ ์๋ฃ์ ๋ํด 2๊ฐ์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ ์๊ฐ์ด ๋๋ฌด ๋ง์์ต๋๋ค. ์๋์ ๋ํ ์ฒซ ๋ฒ์งธ ์๊ฐ์ ์ปดํ์ผ๋ฌ ์ต์ ํ์์ง๋ง ์ด๋ฏธ PJSIP์ ํฌํจ๋์ด ์์์ต๋๋ค. ๋ ๋ฒ์งธ๋ ํ๋์จ์ด ๋ถ๋ ์์์ ์
๋๋ค.
๋ค์ ์์ด๋์ด๋ ์ฐ๋ฆฌ๊ฐ ์ธ๋ถ ๋ฉ๋ชจ๋ฆฌ๋ก ์์ ํ๊ณ ์๊ณ ๋งค์ฐ ์์ฃผ ์ก์ธ์ค๋๋ ๊ตฌ์กฐ๋ฅผ ๊ทธ๊ณณ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋๋ ์ธ์ , ๋ฌด์์ ๋ํ ์๋น ๋ถ์์ ์ํํ์ต๋๋ค. simple_pjsua ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค. 190Kb ์ค ์ฒ์ 90Kb๋ PJSIP์ ๋ด๋ถ ์๊ตฌ ์ฌํญ์ ํ ๋น๋์์ผ๋ฉฐ ์์ฃผ ์ก์ธ์ค๋์ง ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๋ํ ์์ ํธ์ถ ์ค์ pjsua_call_answer ํจ์๊ฐ ํธ์ถ๋์ด ์์ ๋ฐ ๋ฐ์ ํ๋ ์ ์์ ์ ์ํด ๋ฒํผ๊ฐ ํ ๋น๋ฉ๋๋ค. ์ฌ์ ํ ์ฝ 100Kb์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์์ ์ํํ์ต๋๋ค. ์ ํ๊ฐ ์ค๋ ์๊ฐ๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํฉ๋๋ค. ํธ์ถํ์๋ง์ ํ์ RAM์ ๋ค๋ฅธ ํ์ผ๋ก ์ฆ์ ๊ต์ฒดํฉ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ "ํซ" ๋ฐ์ดํฐ๋ ๋ ๋น ๋ฅด๊ณ ์์ธก ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ก ์ ์ก๋์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก์ด ๋ชจ๋ ๊ฒ์ด ํจ๊ป ์ถ์ ๋ ์์์์ต๋๋ค. simple_pjsua ์๋ฒ๋ฅผ ํตํด ํธ์ถํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ sip.linphone.org์ ๊ฐ์ ๋ค๋ฅธ ์๋ฒ๋ฅผ ํตํด.
์กฐ์ฌ ๊ฒฐ๊ณผ
๊ทธ ๊ฒฐ๊ณผ ๋ฐ์ฌ๊ฐ ๊ฐ๋ฅํ๋ค. simple_pjsua ์๋ฒ๋ฅผ ํตํด ์๋ฐฉํฅ์ผ๋ก ์์ฑ ์ ์ก. 128KB์ SDRAM์ ์ถ๊ฐ๋ก ์ฌ์ฉํ๋ ๋ฌธ์ ๋ ์ฝ๊ฐ ๋ ๊ฐ๋ ฅํ Cortex-M7(์: 32KB RAM์ STM769F512NI)์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์ง๋ง ๋์์ ์ฐ๋ฆฌ๋ ์ฌ์ ํ 256์ ๋๋ฌํ ํฌ๋ง์ ํฌ๊ธฐํ์ง ์์์ต๋๋ค. KB ๐ ๋๊ตฐ๊ฐ ๊ด์ฌ์ ๊ฐ์ ธ ์ฃผ์๋ฉด ๊ธฐ์ ๊ฒ์
๋๋ค. ์๋๋ฉด ๋ ์ข์ ๋ฐฉ๋ฒ์ ์๋ํด๋ณด์ญ์์ค. ํ์์ ๊ฐ์ด ๋ชจ๋ ์ถ์ฒ๋
์ถ์ฒ : habr.com