์ค์๊ฐ ๋ฐ ์คํ๋ผ์ธ ์ค๋์ค ์ฒ๋ฆฌ๋ฅผ ์ํ WebCodecs AudioEncoder ์ฑ๋ฅ ์ต์ ํ ์ฌ์ธต ๋ถ์. ์ธ์ฝ๋ฉ ์๋ ํฅ์, ์ฝ๋ฑ ์ ํ, ๊ธ๋ก๋ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ์ํฉ๋๋ค.
WebCodecs AudioEncoder ์ฑ๋ฅ: ์ค๋์ค ์ธ์ฝ๋ฉ ์๋ ์ต์ ํ
WebCodecs API๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ค๋์ค์ ๋น๋์ค๋ฅผ ์ธ์ฝ๋ฉํ๊ณ ๋์ฝ๋ฉํ ์ ์๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์ค์๊ฐ ํต์ , ๋ฏธ๋์ด ์คํธ๋ฆฌ๋ฐ, ์คํ๋ผ์ธ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฌดํํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. WebCodecs๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐ ์์ด ์ค์ํ ์ธก๋ฉด์ AudioEncoder์ ์ฑ๋ฅ์ ์ดํดํ๊ณ ์ต์ ํํ๋ ๊ฒ์
๋๋ค.
์ด ๊ธ์์๋ AudioEncoder ์ฑ๋ฅ์ ๋ฏธ๋ฌํ ์ฐจ์ด์ ์ ํ๊ณ ๋ค์ด ์ธ์ฝ๋ฉ ์๋์ ์ํฅ์ ๋ฏธ์น๋ ์์ธ์ ํ์ํ๊ณ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํ ์ค์ฉ์ ์ธ ์ ๋ต์ ์ ์ํฉ๋๋ค. ์ฝ๋ฑ ์ ํ, ๊ตฌ์ฑ ์ต์
, ์ค๋ ๋ฉ ๊ณ ๋ ค ์ฌํญ ๋ฑ์ ๋ค๋ฃจ๋ฉฐ, WebCodecs๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ฑ๋ฅ ์ค๋์ค ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๋ ค๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
WebCodecs AudioEncoder ์ดํดํ๊ธฐ
WebCodecs์ AudioEncoder ์ธํฐํ์ด์ค๋ ๊ฐ๋ฐ์๊ฐ ์์ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ์์ถ๋ ํ์์ผ๋ก ์ธ์ฝ๋ฉํ์ฌ ์ ์ฅ, ์ ์ก ๋๋ ์ถ๊ฐ ์ฒ๋ฆฌ์ ์ ํฉํ๊ฒ ๋ง๋ค ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ๋ฏธ๋์ด ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ธ์ฝ๋ฉ ํ๋ก์ธ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
์ดํดํด์ผ ํ ์ฃผ์ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ค๋์ค ๋ฐ์ดํฐ ํ์:
AudioEncoder๋ ์ผ๋ฐ์ ์ผ๋ก PCM(ํ์ค ๋ถํธ ๋ณ์กฐ)๊ณผ ๊ฐ์ ํน์ ํ์์ ์์ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ต๋๋ค. ์ด ํ์์๋ ์ํ ๋ ์ดํธ, ์ฑ๋ ์, ๋นํธ ๊น์ด์ ๊ฐ์ ๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋ฉ๋๋ค. - ์ฝ๋ฑ: ์ฝ๋ฑ์ ์ค๋์ค๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํฉ๋๋ค. WebCodecs์์ ์ง์ํ๋ ์ผ๋ฐ์ ์ธ ์ฝ๋ฑ์ผ๋ก๋ Opus์ AAC๊ฐ ์์ต๋๋ค.
- ๊ตฌ์ฑ:
AudioEncoder๋ ๋นํธ๋ ์ดํธ, ์ง์ฐ ์๊ฐ ๋ชจ๋, ๋ณต์ก๋์ ๊ฐ์ ๋ค์ํ ๋งค๊ฐ๋ณ์๋ก ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ธ์ฝ๋ฉ ์๋์ ํ์ง ๊ฐ์ ๊ท ํ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. - ๋น๋๊ธฐ ์์ : ์ธ์ฝ๋ฉ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํ๋๋ฉฐ ๊ฒฐ๊ณผ๋ ์ฝ๋ฐฑ์ ํตํด ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ธ์ฝ๋ฉ์ด ์งํ๋๋ ๋์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ต์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
AudioEncoder ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ์์
์ฌ๋ฌ ์์๊ฐ AudioEncoder์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์ณ ์ธ์ฝ๋ฉ ์๋์ ์ ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์
์๋ต์ฑ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ํจ๊ณผ์ ์ธ ์ต์ ํ๋ฅผ ์ํด์๋ ์ด๋ฌํ ์์๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
1. ์ฝ๋ฑ ์ ํ
์ฝ๋ฑ ์ ํ์ ์ธ์ฝ๋ฉ ์๋๋ฅผ ๊ฒฐ์ ํ๋ ๊ทผ๋ณธ์ ์ธ ์์์ ๋๋ค. ์ฝ๋ฑ๋ง๋ค ๊ณ์ฐ ๋ณต์ก๋๊ฐ ๋ค๋ฅด๋ฉฐ, ์ฃผ์ด์ง ์ค๋์ค ํ๋ ์์ ์ธ์ฝ๋ฉํ๋ ๋ฐ ํ์ํ ์๊ฐ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- Opus: ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ํ ํ์ง๊ณผ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ๊ท ํ์ผ๋ก ์๋ ค์ง Opus๋ ์ค์๊ฐ ํต์ ๋ฐ ์คํธ๋ฆฌ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค. ์ธ์ฝ๋ฉ ์๋๋ ์ผ๋ฐ์ ์ผ๋ก AAC๋ณด๋ค ๋น ๋ฅด๋ฉฐ, ํนํ ๋ฎ์ ๋นํธ๋ ์ดํธ์์ ๊ทธ๋ ์ต๋๋ค. Opus๋ ๋ก์ดํฐ๊ฐ ์์ผ๋ฉฐ ๋๋ฆฌ ์ง์๋ฉ๋๋ค.
- AAC: AAC(Advanced Audio Coding)๋ ์ ๋นํ ๋นํธ๋ ์ดํธ์์ ๋์ ์ค๋์ค ํ์ง๋ก ์๋ ค์ง ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ฝ๋ฑ์ ๋๋ค. ๊ทธ๋ฌ๋ AAC ์ธ์ฝ๋ฉ์ ํนํ ๋์ ํ์ง ์ค์ ์์ Opus๋ณด๋ค ๊ณ์ฐ ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค. ์ฌ์ฉ ์ฌ๋ก์ ์ง์ญ์ ๋ฐ๋ผ ๋ผ์ด์ ์ค ๊ณ ๋ ค ์ฌํญ๋ ๊ด๋ จ๋ ์ ์์ต๋๋ค.
๊ถ์ฅ ์ฌํญ: ๋ฎ์ ์ง์ฐ ์๊ฐ๊ณผ ์ธ์ฝ๋ฉ ์๋๊ฐ ๊ฐ์ฅ ์ค์ํ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ Opus๊ฐ ์ข ์ข ์ ํธ๋๋ ์ ํ์ ๋๋ค. ๋์ ์ค๋์ค ํ์ง์ด ์ฃผ๋ ๊ด์ฌ์ฌ์ด๊ณ ์ธ์ฝ๋ฉ ์๋๊ฐ ๋ ์ค์ํ ์๋๋ฆฌ์ค์์๋ AAC๊ฐ ์ ํฉํ ์ต์ ์ผ ์ ์์ต๋๋ค. ํญ์ ํ์ง, ์๋, ๋ผ์ด์ ์ค ๊ฐ์ ์ ์ถฉ์์ ๊ณ ๋ คํ์ญ์์ค.
2. ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์
์ด๊ธฐํ ์ค์ AudioEncoder์ ์ ๋ฌ๋๋ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ ์ฑ๋ฅ์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ฃผ์ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋นํธ๋ ์ดํธ: ๋นํธ๋ ์ดํธ๋ ๋จ์ ์๊ฐ๋น ์ธ์ฝ๋ฉ๋ ์ค๋์ค๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ์์ ๊ฒฐ์ ํฉ๋๋ค. ๋นํธ๋ ์ดํธ๊ฐ ๋์์๋ก ์ผ๋ฐ์ ์ผ๋ก ์ค๋์ค ํ์ง์ด ์ข์์ง์ง๋ง ์ธ์ฝ๋ฉ์ ๋ ๋ง์ ๊ณ์ฐ ๋ฆฌ์์ค๊ฐ ํ์ํฉ๋๋ค. ๋นํธ๋ ์ดํธ๊ฐ ๋ฎ์ผ๋ฉด ์ธ์ฝ๋ฉ ๋ณต์ก๋๊ฐ ์ค์ด๋ค์ง๋ง ์ค๋์ค ํ์ง์ด ์ ํ๋ ์ ์์ต๋๋ค.
- ์ง์ฐ ์๊ฐ ๋ชจ๋: ์ผ๋ถ ์ฝ๋ฑ์ ๋ค์ํ ์ง์ฐ ์๊ฐ ๋ชจ๋๋ฅผ ์ ๊ณตํ์ฌ ๋ฎ์ ์ง์ฐ ์๊ฐ(์ค์๊ฐ ํต์ ์ ์ค์) ๋๋ ๋์ ํ์ง์ ์ต์ ํํฉ๋๋ค. ๋ฎ์ ์ง์ฐ ์๊ฐ ๋ชจ๋๋ฅผ ์ ํํ๋ฉด ์ข ์ข ์ธ์ฝ๋ฉ ์๋๊ฐ ํฅ์๋ ์ ์์ต๋๋ค.
- ๋ณต์ก๋: ๋ณต์ก๋ ๋งค๊ฐ๋ณ์๋ ์ธ์ฝ๋ฉ ์๊ณ ๋ฆฌ์ฆ์ ๊ณ์ฐ ๊ฐ๋๋ฅผ ์ ์ดํฉ๋๋ค. ๋ณต์ก๋ ์ค์ ์ด ๋ฎ์์๋ก ์ธ์ฝ๋ฉ ์๊ฐ์ด ์ค์ด๋ค์ง๋ง ์ค๋์ค ํ์ง์ด ์ฝ๊ฐ ์ ํ๋ ์ ์์ต๋๋ค.
- ์ํ ๋ ์ดํธ: ์ ๋ ฅ ์ค๋์ค์ ์ํ ๋ ์ดํธ๋ ์ธ์ฝ๋ฉ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ํ ๋ ์ดํธ๊ฐ ๋์์๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฒ๋ฆฌ ๋ถํ๊ฐ ์ฆ๊ฐํฉ๋๋ค.
- ์ฑ๋ ์: ์คํ ๋ ์ค ์ค๋์ค(2์ฑ๋)๋ ๋ชจ๋ ธ ์ค๋์ค(1์ฑ๋)๋ณด๋ค ๋ ๋ง์ ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
์์: ์ง์ฐ ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ์ค์ํ ์ค์๊ฐ VoIP ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ฐํด๋ณด์ญ์์ค. ์ ๋์ ์ธ ์ค๋์ค ์ถฉ์ค๋๋ณด๋ค ์๋๋ฅผ ์ฐ์ ์ํ๊ธฐ ์ํด Opus, ๋ฎ์ ๋นํธ๋ ์ดํธ(์: 32kbps), ๋ฎ์ ์ง์ฐ ์๊ฐ ๋ชจ๋๋ก AudioEncoder๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ฐ๋๋ก, ๊ณ ํ์ง ์ค๋์ค ๋
น์์ ๋ณด๊ดํ๊ธฐ ์ํด ๋ ๋์ ๋นํธ๋ ์ดํธ(์: 128kbps)์ ๋ ๋์ ๋ณต์ก๋ ์ค์ ์ ๊ฐ์ถ AAC๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
3. ํ๋์จ์ด ์ฑ๋ฅ
์น ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ ์ฅ์น์ ๊ธฐ๋ณธ ํ๋์จ์ด๋ AudioEncoder ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. CPU ์๋, ์ฝ์ด ์, ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์์๋ ์ธ์ฝ๋ฉ ํ๋ก์ธ์ค์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
๊ณ ๋ ค ์ฌํญ:
- CPU ์ฌ์ฉ๋ฅ : ์ค๋์ค ์ธ์ฝ๋ฉ์ CPU ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค. ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ธฐ ์ํด ์ธ์ฝ๋ฉ ์ค CPU ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ์ญ์์ค.
- ํ๋์จ์ด ๊ฐ์: ์ผ๋ถ ๋ธ๋ผ์ฐ์ ๋ฐ ํ๋ซํผ์ ํน์ ์ฝ๋ฑ์ ๋ํ ํ๋์จ์ด ๊ฐ์์ ์ ๊ณตํฉ๋๋ค. ์ ํํ ์ฝ๋ฑ ๋ฐ ๊ตฌ์ฑ์ ๋ํด ํ๋์จ์ด ๊ฐ์์ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ์ค๋ช ์๋ฅผ ํ์ธํ์ญ์์ค.
- ์ฅ์น ์ ์ฝ: ๋ชจ๋ฐ์ผ ์ฅ์น ๋ฐ ์ ์ ๋ ฅ ์ปดํจํฐ๋ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ ํ๋ ์ ์์ผ๋ฏ๋ก ๋ณด๋ค ๊ณต๊ฒฉ์ ์ธ ์ต์ ํ ์ ๋ต์ด ํ์ํ ์ ์์ต๋๋ค.
4. ์ค๋ ๋ฉ ๋ฐ ๋น๋๊ธฐ ์์
WebCodecs๋ ๋ฉ์ธ ์ค๋ ๋ ์ฐจ๋จ์ ํผํ๊ธฐ ์ํด ๋น๋๊ธฐ ์์ ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์๋ต์ฑ ์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์งํ๊ณ ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ๋์ ๊ทน๋ํํ๋ ค๋ฉด ๋น๋๊ธฐ ์์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์น ์์ปค(Web Workers): ์น ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋์ค ์ธ์ฝ๋ฉ ์์ ์ ๋ณ๋์ ์ค๋ ๋๋ก ์คํ๋ก๋ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ์ธ์ฝ๋ฉ ์ค์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
- Promise ๊ธฐ๋ฐ API:
AudioEncoderAPI๋ Promise ๊ธฐ๋ฐ์ด๋ฏ๋ก ๋น๋๊ธฐ ์์ ์ ์ฐ๊ฒฐํ๊ณ ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. - ์ญ์(Backpressure) ์ฒ๋ฆฌ: ์ธ์ฝ๋ฉ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ค๋ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ผ์ก์ ์ ์๋ ์ญ์์ ์ฒ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ญ์์ค. ์ฌ๊ธฐ์๋ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๊ฑฐ๋ ํ๋ ์์ ์ญ์ ํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
5. ์ ๋ ฅ ์ค๋์ค ๋ฐ์ดํฐ ํ์
์ ๋ ฅ ์ค๋์ค ๋ฐ์ดํฐ์ ํ์๋ ์ธ์ฝ๋ฉ ์๋์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. WebCodecs๋ ์ผ๋ฐ์ ์ผ๋ก ์ํ ๋ ์ดํธ, ์ฑ๋ ์, ๋นํธ ๊น์ด์ ๋ํ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ํจ๊ป PCM ํ์์ ์์ ์ค๋์ค๋ฅผ ์์ํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ณํ: ์ ๋ ฅ ์ค๋์ค๊ฐ ์์ ํ์๊ณผ ๋ค๋ฅธ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉ ์ ์ ๋ฐ์ดํฐ ๋ณํ์ ์ํํด์ผ ํ ์ ์์ต๋๋ค. ์ด ๋ณํ ํ๋ก์ธ์ค๋ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ๊ณ ์ ์ฒด ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ์ต์ ํ์: ๋ณํ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด ์ ๋ ฅ ์ค๋์ค ํ์์ด ์ธ์ฝ๋์ ์์ ํ์๊ณผ ์ต๋ํ ์ผ์นํ๋์ง ํ์ธํ์ญ์์ค.
6. ๋ธ๋ผ์ฐ์ ๋ฐ ํ๋ซํผ
WebCodecs ์ง์ ๋ฐ ์ฑ๋ฅ์ ๋ธ๋ผ์ฐ์ ์ ํ๋ซํผ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ผ๋ถ ๋ธ๋ผ์ฐ์ ๋ ๋ ์ต์ ํ๋ ๊ตฌํ์ ๊ฐ์ง๊ณ ์๊ฑฐ๋ ํน์ ์ฝ๋ฑ์ ๋ํ ํ๋์จ์ด ๊ฐ์์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ: ๋์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ํ ๊ธฐ๋ฅ์ ์ง์ํ๋์ง ํ์ธํ๋ ค๋ฉด WebCodecs ํธํ์ฑ ๋งคํธ๋ฆญ์ค๋ฅผ ํ์ธํ์ญ์์ค.
- ์ฑ๋ฅ ํ๋กํ์ผ๋ง: ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ต์ ํํ๊ธฐ ์ํด ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ฐ ํ๋ซํผ์์ ์ฑ๋ฅ ํ๋กํ์ผ๋ง์ ์ํํ์ญ์์ค.
AudioEncoder ์ฑ๋ฅ ์ต์ ํ ์ ๋ต
์ด์ AudioEncoder ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ์์๋ฅผ ์ดํด๋ณด์์ผ๋ฏ๋ก ์ต์ ์ ์ธ์ฝ๋ฉ ์๋๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ์ค์ฉ์ ์ธ ์ ๋ต์ ๊ฒํ ํด ๋ณด๊ฒ ์ต๋๋ค.
1. ์ฝ๋ฑ ์ ํ ๋ฐ ๊ตฌ์ฑ ํ๋
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ฝ๋ฑ์ ์ ์คํ๊ฒ ์ ํํ๊ณ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค.
- ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด Opus ์ฐ์ ์ฌ์ฉ: VoIP ๋๋ ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ๊ณผ ๊ฐ์ด ๋ฎ์ ์ง์ฐ ์๊ฐ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ Opus๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ต์์ ์ ํ์ ๋๋ค.
- ํ์ง ์๊ตฌ์ ๋ฐ๋ผ ๋นํธ๋ ์ดํธ ์กฐ์ : ์ค๋์ค ํ์ง๊ณผ ์ธ์ฝ๋ฉ ์๋ ์ฌ์ด์ ์ต์ ์ ๊ท ํ์ ์ฐพ๊ธฐ ์ํด ๋ค์ํ ๋นํธ๋ ์ดํธ๋ก ์คํํ์ญ์์ค. ๋นํธ๋ ์ดํธ๊ฐ ๋ฎ์์๋ก ์ธ์ฝ๋ฉ ๋ณต์ก๋๊ฐ ์ค์ด๋ค์ง๋ง ์ค๋์ค ์ถฉ์ค๋๊ฐ ์ ํ๋ ์ ์์ต๋๋ค.
- ๋ฎ์ ์ง์ฐ ์๊ฐ ๋ชจ๋ ํ์ฉ: ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฝ๋ฑ ๊ตฌ์ฑ์์ ๋ฎ์ ์ง์ฐ ์๊ฐ ๋ชจ๋๋ฅผ ํ์ฑํํ์ฌ ์ฒ๋ฆฌ ์ง์ฐ์ ์ต์ํํ์ญ์์ค.
- ๊ฐ๋ฅํ ๋ ๋ณต์ก๋ ์ค์ด๊ธฐ: ์ค๋์ค ํ์ง์ด ๊ฐ์ฅ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ๋ณต์ก๋ ์ค์ ์ ์ค์ฌ ์ธ์ฝ๋ฉ ์๋๋ฅผ ํฅ์์ํค๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ํ ๋ ์ดํธ ๋ฐ ์ฑ๋ ์ ์ต์ ํ: ํ์ง ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๊ฐ์ฅ ๋ฎ์ ํ์ฉ ๊ฐ๋ฅํ ์ํ ๋ ์ดํธ์ ์ฑ๋ ์๋ฅผ ์ ํํ์ญ์์ค.
์์:
```javascript const encoderConfig = { codec: 'opus', sampleRate: 48000, numberOfChannels: 1, bitrate: 32000, // 32kbps latencyMode: 'low' }; const encoder = new AudioEncoder(encoderConfig); ```2. ๋ฐฑ๊ทธ๋ผ์ด๋ ์ธ์ฝ๋ฉ์ ์ํ ์น ์์ปค ํ์ฉ
์ค๋์ค ์ธ์ฝ๋ฉ ์์ ์ ์น ์์ปค๋ก ์คํ๋ก๋ํ๋ ๊ฒ์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ์๋ต์ฑ ์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ณด์ฅํ๋ ๋งค์ฐ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ตฌํ ๋จ๊ณ:
- ์น ์์ปค ์คํฌ๋ฆฝํธ ์์ฑ: ์ค๋์ค ์ธ์ฝ๋ฉ ๋ก์ง์ ํฌํจํ๋ ๋ณ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์์ฑํฉ๋๋ค.
- ์์ปค๋ก ์ค๋์ค ๋ฐ์ดํฐ ์ ์ก:
postMessage()๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ์น ์์ปค๋ก ์ ์กํฉ๋๋ค. ๋ถํ์ํ ๋ฐ์ดํฐ ๋ณต์ฌ๋ฅผ ํผํ๊ธฐ ์ํดTransferable๊ฐ์ฒด(์:ArrayBuffer)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. - ์์ปค์์ ์ธ์ฝ๋ฉ ์ํ: ์น ์์ปค ๋ด์์
AudioEncoder๋ฅผ ์ธ์คํด์คํํ๊ณ ์ธ์ฝ๋ฉ ํ๋ก์ธ์ค๋ฅผ ์ํํฉ๋๋ค. - ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ก ๋ค์ ์ ์ก:
postMessage()๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฝ๋ฉ๋ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ก ๋ค์ ๋ณด๋ ๋๋ค. - ๋ฉ์ธ ์ค๋ ๋์์ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ: ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ๊ฑฐ๋ ํ์ผ์ ์ ์ฅํ๋ ๋ฑ ๋ฉ์ธ ์ค๋ ๋์์ ์ธ์ฝ๋ฉ๋ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์์:
๋ฉ์ธ ์ค๋ ๋ (index.html):
```html ```์น ์์ปค (worker.js):
```javascript let encoder; self.onmessage = async function(event) { const audioData = event.data; if (!encoder) { const encoderConfig = { codec: 'opus', sampleRate: 48000, numberOfChannels: 1, bitrate: 32000, }; encoder = new AudioEncoder({ ...encoderConfig, output: (chunk) => { self.postMessage(chunk, [chunk.data]); }, error: (e) => { console.error("์ธ์ฝ๋ ์ค๋ฅ", e); } }); encoder.configure(encoderConfig); } const audioFrame = { data: audioData, sampleRate: 48000, numberOfChannels: 1 } const frame = new AudioData(audioFrame); encoder.encode(frame); frame.close(); }; ```3. ๋ฐ์ดํฐ ๋ณต์ฌ ์ต์ํ
๋ฐ์ดํฐ ๋ณต์ฌ๋ ํนํ ํฐ ์ค๋์ค ๋ฒํผ๋ฅผ ๋ค๋ฃฐ ๋ ์๋นํ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. Transferable ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ๋ถํ์ํ ๋ณํ์ ํผํ์ฌ ๋ฐ์ดํฐ ๋ณต์ฌ๋ฅผ ์ต์ํํ์ญ์์ค.
- Transferable ๊ฐ์ฒด: ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋
ArrayBuffer์ ๊ฐ์Transferable๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ด๋ฅผ ํตํด ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๊ถ์ด ์ด์ ๋์ด ๋น์ฉ์ด ๋ง์ด ๋๋ ๋ณต์ฌ ์์ ์ ํผํ ์ ์์ต๋๋ค. - AudioData ๊ฐ์ฒด ์ง์ ์ฌ์ฉ: `AudioData` ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ์ฝ๋๊ฐ ๋งค์ฐ ์ ์ ์ค๋ฒํค๋๋ก ๊ธฐ๋ณธ ์ค๋์ค ๋ฒํผ์์ ์ง์ ์์ ํ ์ ์์ต๋๋ค.
4. ์ ๋ ฅ ์ค๋์ค ํ์ ์ต์ ํ
๋ณํ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด ์
๋ ฅ ์ค๋์ค ๋ฐ์ดํฐ๊ฐ AudioEncoder์ ์ต์ ์ ํ์์ธ์ง ํ์ธํ์ญ์์ค.
- ์ธ์ฝ๋์ ์์ ํ์๊ณผ ์ผ์น์ํค๊ธฐ: ์ํ ๋ ์ดํธ, ์ฑ๋ ์, ๋นํธ ๊น์ด๋ฅผ ํฌํจํ์ฌ ์ธ์ฝ๋๊ฐ ์์ํ๋ ํ์์ผ๋ก ์ ๋ ฅ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ์ญ์์ค.
- ๋ถํ์ํ ๋ณํ ํผํ๊ธฐ: ์ ๋ ฅ ์ค๋์ค๊ฐ ์ฌ๋ฐ๋ฅธ ํ์์ด ์๋ ๊ฒฝ์ฐ ์ต์ ํ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฅํ ํ ํจ์จ์ ์ผ๋ก ๋ณํ์ ์ํํ์ญ์์ค.
5. ํ๋์จ์ด ๊ฐ์ ๊ณ ๋ ค ์ฌํญ
์ธ์ฝ๋ฉ ์์ ์ GPU๋ ์ ์ฉ ์ค๋์ค ํ๋ก์ธ์์ ๊ฐ์ ํน์ ํ๋์จ์ด๋ก ์คํ๋ก๋ํ๊ธฐ ์ํด ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ๋์จ์ด ๊ฐ์์ ํ์ฉํ์ญ์์ค.
- ๋ธ๋ผ์ฐ์ ์ค๋ช ์ ํ์ธ: ์ ํํ ์ฝ๋ฑ ๋ฐ ๊ตฌ์ฑ์ ๋ํด ํ๋์จ์ด ๊ฐ์์ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ํ๋์จ์ด ๊ฐ์ ํ๋๊ทธ ํ์ฑํ: ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์๋ ํ๋์จ์ด ๊ฐ์์ ํ์ฑํํ๊ธฐ ์ํด ํน์ ํ๋๊ทธ๋ ์ค์ ์ ํ์ฑํํด์ผ ํ ์ ์์ต๋๋ค.
6. ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๋ฐ ๋ชจ๋ํฐ๋ง
์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์๊ณผ ๊ฐ์ ์์ญ์ ์๋ณํ๊ธฐ ์ํด AudioEncoder ๊ตฌํ์ ์ฑ๋ฅ์ ์ ๊ธฐ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ ๋ชจ๋ํฐ๋งํ์ญ์์ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ: ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋์ค ์ธ์ฝ๋ฉ ์ค CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์๋น, ๋คํธ์ํฌ ํ๋์ ํ๋กํ์ผ๋งํ์ญ์์ค.
- ์ฑ๋ฅ ์งํ: ์ธ์ฝ๋ฉ ์๊ฐ, ํ๋ ์ ์๋, ์ง์ฐ ์๊ฐ๊ณผ ๊ฐ์ ์ฃผ์ ์ฑ๋ฅ ์งํ๋ฅผ ์ถ์ ํ์ญ์์ค.
- ์ค์ ํ๊ฒฝ ํ ์คํธ: ์ค์ ์๋๋ฆฌ์ค์์ ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์ํ ์ฅ์น ๋ฐ ๋คํธ์ํฌ ์กฐ๊ฑด์์ ๊ตฌํ์ ํ ์คํธํ์ญ์์ค.
์ค์ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
์ด ๊ธ์์ ์ค๋ช ๋ ๊ธฐ์ ์ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ์ค์ ์ฌ์ฉ ์ฌ๋ก์ ์ ์ฉ๋ ์ ์์ต๋๋ค:
- ์ค์๊ฐ ํต์ (VoIP): ์๋ต์ฑ ์๊ณ ์ง์ฐ ์๊ฐ์ด ๋ฎ์ VoIP ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ค๋ฉด
AudioEncoder์ฑ๋ฅ ์ต์ ํ๊ฐ ์ค์ํฉ๋๋ค. - ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ: ํจ์จ์ ์ธ ์ค๋์ค ์ธ์ฝ๋ฉ์ ์ต์ํ์ ์ง์ฐ์ผ๋ก ๊ณ ํ์ง ๋ผ์ด๋ธ ์คํธ๋ฆผ์ ์ ๊ณตํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ์ค๋์ค ๋ น์: ์ธ์ฝ๋ฉ ์๋๋ฅผ ์ต์ ํํ๋ฉด ํนํ ๊ธด ์ธ์ ์ ๋ น์ํ ๋ ์ค๋์ค ๋ น์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ค๋์ค ํธ์ง: ๋น ๋ฅธ ์ค๋์ค ์ธ์ฝ๋ฉ์ ์ค๋์ค ํธ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ์ค๋์ค ํ์ผ์ ์ ์ํ๊ฒ ๋ด๋ณด๋ด๊ณ ์ฒ๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
- ์น ๊ธฐ๋ฐ ์ค๋์ค ์ฒ๋ฆฌ: WebCodecs๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ ๊ตํ ์ค๋์ค ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๊ณ ํจ์จ์ ์ธ ์์ถ์ ์ํด
AudioEncoder๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
์์ ์๋๋ฆฌ์ค: ์น ๊ธฐ๋ฐ VoIP ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ
WebRTC์ WebCodecs๋ฅผ ์ฌ์ฉํ์ฌ ์น ๊ธฐ๋ฐ VoIP ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ค๊ณ ์์ํด๋ณด์ญ์์ค. ์ํํ๊ณ ์๋ต์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๋ ค๋ฉด ์ค๋์ค ์ธ์ฝ๋ฉ ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํด์ผ ํฉ๋๋ค.
- ์ฝ๋ฑ ์ ํ: ํ์ง๊ณผ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ํ์ํ ๊ท ํ ๋๋ฌธ์ Opus๋ฅผ ์ฝ๋ฑ์ผ๋ก ์ ํํฉ๋๋ค.
- ๊ตฌ์ฑ ํ๋: ๋ฎ์ ๋นํธ๋ ์ดํธ(์: 32kbps)์ ๋ฎ์ ์ง์ฐ ์๊ฐ ๋ชจ๋๋ก
AudioEncoder๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. - ์น ์์ปค: ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค๋์ค ์ธ์ฝ๋ฉ ์์ ์ ์น ์์ปค๋ก ์คํ๋ก๋ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ก:
Transferable๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๊ฐ์ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์กํฉ๋๋ค. - ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ธฐ ์ํด CPU ์ฌ์ฉ๋๊ณผ ์ธ์ฝ๋ฉ ์ง์ฐ ์๊ฐ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํฉ๋๋ค.
๊ฒฐ๋ก
AudioEncoder ์ฑ๋ฅ ์ต์ ํ๋ ์ค์๊ฐ ์ค๋์ค ์ฒ๋ฆฌ, ๋ฏธ๋์ด ์คํธ๋ฆฌ๋ฐ, ์คํ๋ผ์ธ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๊ณ ์ฑ๋ฅ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์ธ์ฝ๋ฉ ์๋์ ์ํฅ์ ๋ฏธ์น๋ ์์ธ์ ์ดํดํ๊ณ ์ด ๊ธ์์ ์ค๋ช
ํ ์ ๋ต์ ์ ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์๋นํ ์ฑ๋ฅ ํฅ์์ ๋ฌ์ฑํ๊ณ ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ฝ๋ฑ์ ์ ์คํ๊ฒ ์ ํํ๊ณ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค. ์น ์์ปค๋ฅผ ํ์ฉํ์ฌ ์ธ์ฝ๋ฉ ์์ ์ ๋ณ๋์ ์ค๋ ๋๋ก ์คํ๋ก๋ํ๊ณ , ๋ฐ์ดํฐ ๋ณต์ฌ๋ฅผ ์ต์ํํ๋ฉฐ, ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ๋์จ์ด ๊ฐ์์ ํ์ฉํ์ญ์์ค. ๋ง์ง๋ง์ผ๋ก, ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์๊ณผ ๊ฐ์ ์์ญ์ ์๋ณํ๊ธฐ ์ํด ๊ตฌํ์ ์ฑ๋ฅ์ ์ ๊ธฐ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ ๋ชจ๋ํฐ๋งํ์ญ์์ค.
์ด๋ฌํ ์ง์นจ์ ๋ฐ๋ฅด๋ฉด WebCodecs AudioEncoder์ ๋ชจ๋ ์ ์ฌ๋ ฅ์ ๋ฐํํ๊ณ ์ค๋์ค ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํํ๊ฒ ํตํฉํ๋ ํ์ ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.