WebCodecs VideoEncoder์ ๋น์จ-์๊ณก ์ต์ ํ(RDO)๋ฅผ ํ๊ตฌํ๋ฉฐ, ๋น๋์ค ํ์ง, ๋นํธ ์ ์ก๋ฅ ์ ๋ฏธ์น๋ ์ํฅ์ ์ดํดํ๊ณ ์ต์ ์ ์ฑ๋ฅ์ ์ํด ํจ๊ณผ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.
WebCodecs VideoEncoder ํ์ง: ๋น์จ-์๊ณก ์ต์ ํ์ ๋ํ ์ฌ์ธต ๋ถ์
WebCodecs API๋ ์น ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ๋ฏธ๋์ด ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ์ ๋ํ ์ ๋ก ์๋ ์ ์ด๋ฅผ ๊ฐ๋ฐ์์๊ฒ ์ ๊ณตํฉ๋๋ค. ๊ณ ํ์ง ๋น๋์ค ์ธ์ฝ๋ฉ์ ๋ฌ์ฑํ๋ ๋ฐ ์ค์ํ ์ธก๋ฉด์ VideoEncoder ๋ด์์ ๋น์จ-์๊ณก ์ต์ ํ(RDO)๋ฅผ ์ดํดํ๊ณ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๊ฒ์
๋๋ค. ์ด ๊ธฐ์ฌ์์๋ RDO์ ์๋ฆฌ, ๋น๋์ค ํ์ง ๋ฐ ๋นํธ ์ ์ก๋ฅ ์ ๋ฏธ์น๋ ์ํฅ, WebCodecs์์ RDO๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ์ค์ง์ ์ธ ๊ณ ๋ ค ์ฌํญ์ ์ฌ์ธต์ ์ผ๋ก ์ดํด๋ด
๋๋ค.
๋น์จ-์๊ณก ์ต์ ํ(RDO)๋ ๋ฌด์์ธ๊ฐ์?
๋น์จ-์๊ณก ์ต์ ํ๋ ๋น๋์ค ์์ถ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋๋ค. ์ด๋ ๋น์จ(๋น๋์ค๋ฅผ ๋ํ๋ด๋ ๋ฐ ํ์ํ ๋นํธ ์, ํ์ผ ํฌ๊ธฐ ๋ฐ ๋์ญํญ ์ฌ์ฉ๋๊ณผ ์ง์ ๊ด๋ จ๋จ)๊ณผ ์๊ณก(์๋ณธ ๋น๋์ค์ ์์ถ๋ ๋ฒ์ ๊ฐ์ ์ธ์๋๋ ์ฐจ์ด, ๋น๋์ค ํ์ง์ ๋ํ๋) ์ฌ์ด์ ํต์ฌ ์ ์ถฉ์ ์ ๋ค๋ฃน๋๋ค. RDO ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ์ ๊ท ํ์ ์ฐพ๊ธฐ ์ํด ๋ ธ๋ ฅํฉ๋๋ค. ์ฆ, ์ฃผ์ด์ง ๋นํธ ์ ์ก๋ฅ ์ ๋ํ ์๊ณก์ ์ต์ํํ๊ฑฐ๋ ํน์ ํ์ง ์์ค์ ๋ฌ์ฑํ๋ ๋ฐ ํ์ํ ๋นํธ ์ ์ก๋ฅ ์ ์ต์ํํฉ๋๋ค.
๊ฐ๋จํ ๋งํด, RDO๋ ๋น๋์ค ์ธ์ฝ๋๊ฐ ๋ชจ์ ์ถ์ , ์์ํ, ๋ณํ ์ ํ ๋ฑ๊ณผ ๊ฐ์ ์ธ์ฝ๋ฉ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ฒ ์ ์งํ๋ฉด์ ์ต์์ ์๊ฐ์ ํ์ง์ ๋ฌ์ฑํ๋๋ก ์ง๋ฅ์ ์ธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ๋์์ ์ค๋๋ค. RDO๊ฐ ์์ผ๋ฉด ์ธ์ฝ๋๋ ์ต์ ์ด ์๋ ์ ํ์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ฃผ์ด์ง ๋นํธ ์ ์ก๋ฅ ์์ ํ์ง์ด ๋ฎ๊ฑฐ๋ ์ํ๋ ํ์ง ์์ค์ ๋นํด ํ์ผ ํฌ๊ธฐ๊ฐ ๋ ์ปค์ง๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๋ณต์กํ ๊ฐ๋ ์ ์ค๋ช ํ๋ ค๊ณ ํ๋ค๊ณ ์์ํด ๋ณด์ธ์. ๊ฐ๋จํ ๋จ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ณผ๋ํ ๋จ์ํ(๋ฎ์ ํ์ง, ๋ฎ์ ๋นํธ ์ ์ก๋ฅ )์ ์ํ์ด ์๊ฑฐ๋ ์๋ฌด๋ ์ดํดํ์ง ๋ชปํ๋ ๋งค์ฐ ์ ํํ ๊ธฐ์ ์ฉ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค(๋์ ํ์ง, ๋์ ๋นํธ ์ ์ก๋ฅ ). RDO๋ ์ค๋ช ์ด ์ ํํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด '์ค์ํธ ์คํ'์ ์ฐพ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋น๋์ค ์ธ์ฝ๋์์ RDO๊ฐ ์๋ํ๋ ๋ฐฉ์
RDO ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค.
- ๋ชจ๋ ๊ฒฐ์ : ์ธ์ฝ๋๋ ๋น๋์ค ํ๋ ์์ ๊ฐ ๋ธ๋ก ๋๋ ๋งคํฌ๋ก๋ธ๋ก์ ๋ํด ๋ค์ํ ์ธ์ฝ๋ฉ ๋ชจ๋๋ฅผ ๊ณ ๋ คํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋๋ ๋ธ๋ก์ด ์์ธก, ๋ณํ ๋ฐ ์์ํ๋๋ ๋ฐฉ์์ ๊ฒฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋ ์ ๋ด ์์ธก(ํ์ฌ ํ๋ ์ ๋ด์์ ์์ธก) ๋๋ ํ๋ ์ ๊ฐ ์์ธก(์ด์ ํ๋ ์์์ ์์ธก) ์ค์์ ์ ํํ ์ ์์ต๋๋ค.
- ๋น์ฉ ๊ณ์ฐ: ๊ฐ๋ฅํ ๊ฐ ์ธ์ฝ๋ฉ ๋ชจ๋์ ๋ํด ์ธ์ฝ๋๋ ๋ ๊ฐ์ง ๋น์ฉ์ ๊ณ์ฐํฉ๋๋ค. ๋น์จ ๋น์ฉ์ผ๋ก, ํด๋น ๋ชจ๋์์ ๋ธ๋ก์ ์ธ์ฝ๋ฉํ๋ ๋ฐ ํ์ํ ๋นํธ ์๋ฅผ ๋ํ๋ ๋๋ค. ์๊ณก ๋น์ฉ์ผ๋ก, ์๋ณธ ๋ธ๋ก๊ณผ ์ธ์ฝ๋ฉ๋ ๋ธ๋ก ๊ฐ์ ์ฐจ์ด๋ฅผ ์ธก์ ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์๊ณก ์งํ์๋ ์ ๊ณฑ ์ฐจ์ด ํฉ(SSD) ๋ฐ ์ ๋ ์ฐจ์ด ํฉ(SAD)์ด ํฌํจ๋ฉ๋๋ค.
- ๋ผ๊ทธ๋์ฃผ ์น์(ฮป): RDO๋ ์ข
์ข
๋ผ๊ทธ๋์ฃผ ์น์(ฮป)๋ฅผ ์ฌ์ฉํ์ฌ ๋น์จ ๋ฐ ์๊ณก ๋น์ฉ์ ๋จ์ผ ๋น์ฉ ํจ์๋ก ๊ฒฐํฉํฉ๋๋ค.
๋น์ฉ = ์๊ณก + ฮป * ๋น์จ. ๋ผ๊ทธ๋์ฃผ ์น์๋ ๋น์จ ๋ ์๊ณก์ ์ค์์ฑ์ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํฉ๋๋ค. ฮป ๊ฐ์ด ๋์์๋ก ํ์ง์ ํฌ์ํ๋๋ผ๋ ๋นํธ ์ ์ก๋ฅ ๊ฐ์๋ฅผ ๊ฐ์กฐํ๋ ๋ฐ๋ฉด, ฮป ๊ฐ์ด ๋ฎ์์๋ก ํ์ง์ ์ฐ์ ์ํ๊ณ ๋นํธ ์ ์ก๋ฅ ์ด ๋์์ง ์ ์์ต๋๋ค. ์ด ๋งค๊ฐ๋ณ์๋ ์ข ์ข ๋์ ๋นํธ ์ ์ก๋ฅ ๊ณผ ์ํ๋ ํ์ง ์์ค์ ๋ฐ๋ผ ์กฐ์ ๋ฉ๋๋ค. - ๋ชจ๋ ์ ํ: ์ธ์ฝ๋๋ ์ ์ฒด ๋น์ฉ ํจ์๋ฅผ ์ต์ํํ๋ ์ธ์ฝ๋ฉ ๋ชจ๋๋ฅผ ์ ํํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ํ๋ ์์ ๊ฐ ๋ธ๋ก์ ๋ํด ๋ฐ๋ณต๋์ด ๋น๋์ค ์ ์ฒด์์ ๊ฐ์ฅ ํจ์จ์ ์ธ ์ธ์ฝ๋ฉ์ด ์ฌ์ฉ๋๋๋ก ํฉ๋๋ค.
์ด ํ๋ก์ธ์ค๋ ํนํ ๊ณ ํด์๋ ๋น๋์ค ๋ฐ ๋ณต์กํ ์ธ์ฝ๋ฉ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ ๊ณ์ฐ๋์ด ๋ง์ต๋๋ค. ๋ฐ๋ผ์ ์ธ์ฝ๋๋ ์ข ์ข ๋ค์ํ ์์ค์ RDO ๋ณต์ก์ฑ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ธ์ฝ๋ฉ ์๋์ ํ์ง์ ์ ์ถฉํ ์ ์๋๋ก ํฉ๋๋ค.
WebCodecs VideoEncoder์ RDO
WebCodecs API๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ๋น๋์ค ์ธ์ฝ๋ฉ ๊ธฐ๋ฅ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ํน์ RDO ๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ ๋ธ๋ผ์ฐ์ ์ ์ฝ๋ฑ ๊ตฌํ(์: VP9, AV1, H.264) ๋ด์ ์จ๊ฒจ์ ธ ์์ง๋ง, ๊ฐ๋ฐ์๋ VideoEncoderConfig ๊ฐ์ฒด๋ฅผ ํตํด RDO ๋์์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. RDO์ ๊ฐ์ ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น๋ ์ฃผ์ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
codec: ์ ํํ ์ฝ๋ฑ(์: "vp9", "av1", H.264์ ๊ฒฝ์ฐ "avc1.42001E")์ ์ฌ์ฉ๋๋ RDO ์๊ณ ๋ฆฌ์ฆ์ ๋ณธ์ง์ ์ผ๋ก ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ค์ํ ์ฝ๋ฑ์ ๋น์จ-์๊ณก ์ต์ ํ๋ฅผ ์ํด ๋ค๋ฅธ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. AV1๊ณผ ๊ฐ์ ์ต์ ์ฝ๋ฑ์ ์ผ๋ฐ์ ์ผ๋ก H.264์ ๊ฐ์ ์ด์ ์ฝ๋ฑ์ ๋นํด ๋ ์ ๊ตํ RDO ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํฉ๋๋ค.width๋ฐheight: ๋น๋์ค ํด์๋๋ RDO์ ๊ณ์ฐ ๋ณต์ก์ฑ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋์ ํด์๋๋ ๋ชจ๋ ๊ฒฐ์ ๋ฐ ๋น์ฉ ๊ณ์ฐ์ ๋ ๋ง์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค.bitrate: ๋์ ๋นํธ ์ ์ก๋ฅ ์ RDO์์ ์ฌ์ฉ๋๋ ๋ผ๊ทธ๋์ฃผ ์น์(ฮป)์ ํฌ๊ฒ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋์ ๋นํธ ์ ์ก๋ฅ ์ด ๋ฎ์์๋ก ์ผ๋ฐ์ ์ผ๋ก ฮป ๊ฐ์ด ๋์์ ธ ์ธ์ฝ๋๊ฐ ํ์ง๋ณด๋ค ๋นํธ ์ ์ก๋ฅ ๊ฐ์๋ฅผ ์ฐ์ ์ํ๊ฒ ๋ฉ๋๋ค.framerate: ํ๋ ์ ์๋๋ ๋น๋์ค์ ์๊ฐ์ ์ค๋ณต์ฑ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ ๋์ ํ๋ ์ ์๋๋ ์ธ์ฝ๋๊ฐ ํ๋ ์ ๊ฐ ์์ธก์ ํตํด ๋ ๋์ ์์ถ์ ๋ฌ์ฑํ ์ ์๋๋ก ํ์ฌ ์ฃผ์ด์ง ๋นํธ ์ ์ก๋ฅ ์์ ํ์ง์ ํฅ์์ํฌ ์ ์์ต๋๋ค.hardwareAcceleration: ํ๋์จ์ด ๊ฐ์์ ์ฌ์ฉํ๋ฉด ์ธ์ฝ๋ฉ ํ๋ก์ธ์ค๊ฐ ํฌ๊ฒ ๋นจ๋ผ์ ธ ์ธ์ฝ๋๊ฐ ๋์ผํ ์๊ฐ ๋ด์ ๋ ๋ณต์กํ RDO ๊ณ์ฐ์ ์ํํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ์ค์๊ฐ ์ธ์ฝ๋ฉ ์๋๋ฆฌ์ค์์ ํ์ง ํฅ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.latencyMode: ๋ฎ์ ์ง์ฐ ์๊ฐ ๋ชจ๋๋ฅผ ์ ํํ๋ฉด ์ข ์ข ํ์ง์ ์๋์ ์ ์ถฉํ๊ฒ ๋ฉ๋๋ค. ์ด๋ RDO ๊ณ์ฐ์ ์ธ๋ถ์ฑ๊ณผ ์ ๊ตํจ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.qp(์์ํ ๋งค๊ฐ๋ณ์): ์ผ๋ถ ๊ณ ๊ธ ๊ตฌ์ฑ์์๋ ์์ํ ๋งค๊ฐ๋ณ์(QP)๋ฅผ ์ง์ ์ ์ดํ ์ ์์ต๋๋ค. QP๋ ๋น๋์ค์ ์ ์ฉ๋๋ ์์ถ๋์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. QP ๊ฐ์ด ๋ฎ์์๋ก ํ์ง์ ๋์์ง์ง๋ง ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ , QP ๊ฐ์ด ๋์์๋ก ํ์ง์ ๋ฎ์์ง์ง๋ง ํ์ผ ํฌ๊ธฐ๊ฐ ์์์ง๋๋ค. RDO์ ์ง์ ์ ์ธ ๊ฒ์ ์๋์ง๋ง QP๋ฅผ ์๋์ผ๋ก ์ค์ ํ๋ฉด RDO์ ์ ํ์ ์ฌ์ ์ํ๊ฑฐ๋ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
๊ตฌ์ฑ ์:
const encoderConfig = {
codec: "vp9",
width: 1280,
height: 720,
bitrate: 2000000, // 2 Mbps
framerate: 30,
hardwareAcceleration: "prefer-hardware",
latencyMode: "quality"
};
์ด ๊ตฌ์ฑ์ 720p VP9 ๋น๋์ค๋ฅผ 2Mbps๋ก ์ธ์ฝ๋ฉํ๋ ค๊ณ ์๋ํ๋ฉฐ, latencyMode๋ฅผ "quality"๋ก ์ค์ ํ๊ณ ํ๋์จ์ด ๊ฐ์์ ์ ํธํ์ฌ ํ์ง์ ์ฐ์ ์ํฉ๋๋ค. ์ฌ์ฉ๋๋ ํน์ RDO ์๊ณ ๋ฆฌ์ฆ์ ๋ธ๋ผ์ฐ์ ์ VP9 ๊ตฌํ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
์ค์ง์ ์ธ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
WebCodecs์์ RDO๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ค๋ฉด ์ฌ๋ฌ ์์๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ๋์ ๋นํธ ์ ์ก๋ฅ : ์ ์ ํ ๋์ ๋นํธ ์ ์ก๋ฅ ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋นํธ ์ ์ก๋ฅ ์ด ๋๋ฌด ๋ฎ์ผ๋ฉด RDO๊ฐ ์๋ฌด๋ฆฌ ์ ๊ตฌํ๋๋๋ผ๋ ์๋นํ ํ์ง ์ ํ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋น๋์ค ์ฝํ ์ธ ์ ๋ณต์ก์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋์ ๋ชจ์ ๊ณผ ๋ํ ์ผ์ด ์๋ ๋น๋์ค๋ ํ์ฉ ๊ฐ๋ฅํ ํ์ง์ ์ ์งํ๊ธฐ ์ํด ๋ ๋์ ๋นํธ ์ ์ก๋ฅ ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ์ธ ํ๋ฉด ๋ นํ๋ ์คํฌ์ธ ๋ฐฉ์ก์ ๋น ๋ฅด๊ฒ ์งํ๋๋ ์ก์ ์ฅ๋ฉด๋ณด๋ค ํจ์ฌ ๋ฎ์ ๋นํธ ์ ์ก๋ฅ ๋ก ์ธ์ฝ๋ฉํ ์ ์์ต๋๋ค. ํ์ง๊ณผ ํ์ผ ํฌ๊ธฐ ๊ฐ์ ์ต์ ์ ๊ท ํ์ ์ฐพ๊ธฐ ์ํด ๋ค์ํ ๋นํธ ์ ์ก๋ฅ ๋ก ํ ์คํธํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
- ์ฝ๋ฑ ์ ํ: ์ฝ๋ฑ ์ ํ์ RDO ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. AV1๊ณผ ๊ฐ์ ์ต์ ์ฝ๋ฑ์ ์ผ๋ฐ์ ์ผ๋ก H.264์ ๊ฐ์ ์ด์ ์ฝ๋ฑ์ ๋นํด ์ฐ์ํ ์์ถ ํจ์จ์ฑ๊ณผ RDO ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ AV1 ์ธ์ฝ๋ฉ์ ์ผ๋ฐ์ ์ผ๋ก ๊ณ์ฐ๋์ด ๋ ๋ง์ต๋๋ค. VP9๋ ์์ถ ํจ์จ์ฑ๊ณผ ์ธ์ฝ๋ฉ ์๋ ๊ฐ์ ์ข์ ์ ์ถฉ์ ์ ์ ๊ณตํฉ๋๋ค. ๋์ ์ฌ์ฉ์์ ์ฅ์น ๊ธฐ๋ฅ์ ๊ณ ๋ คํ์ญ์์ค. ์ด์ ์ฅ์น๋ AV1 ๋์ฝ๋ฉ์ ์ง์ํ์ง ์์ ์ฌ์ฉ์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค.
- ์ฝํ ์ธ ๋ณต์ก์ฑ: ๋น๋์ค ์ฝํ ์ธ ์ ๋ณต์ก์ฑ์ RDO์ ํจ๊ณผ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋์ ๋ชจ์ , ๋ฏธ์ธํ ๋ํ ์ผ ๋ฐ ๋น๋ฒํ ์ฅ๋ฉด ์ ํ์ด ์๋ ๋น๋์ค๋ ์์ถํ๊ธฐ ๋ ์ด๋ ต๊ณ ๋ ์ ๊ตํ RDO ๊ธฐ์ ์ด ํ์ํฉ๋๋ค. ๋ณต์กํ ์ฝํ ์ธ ์ ๊ฒฝ์ฐ ๋ ๋์ ๋์ ๋นํธ ์ ์ก๋ฅ ๋๋ AV1๊ณผ ๊ฐ์ ๊ณ ๊ธ ์ฝ๋ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ๋๋ ๋น๋์ค๋ฅผ ์ฌ์ ์ฒ๋ฆฌํ์ฌ ๋ ธ์ด์ฆ๋ฅผ ์ค์ด๊ฑฐ๋ ์ด๋ฏธ์ง๋ฅผ ์์ ํํ๋ฉด ์์ถ ํจ์จ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ธ์ฝ๋ฉ ์๋ ๋ ํ์ง: RDO ์๊ณ ๋ฆฌ์ฆ์ ๊ณ์ฐ๋์ด ๋ง์ต๋๋ค. RDO์ ๋ณต์ก์ฑ์ ๋์ด๋ฉด ์ผ๋ฐ์ ์ผ๋ก ํ์ง์ด ํฅ์๋์ง๋ง ์ธ์ฝ๋ฉ ์๊ฐ์ด ์ฆ๊ฐํฉ๋๋ค. WebCodecs๋ ๊ตฌ์ฑ ์ต์ ์ ํตํด ๋๋ ์ฝ๋ฑ ์ ํ์ ํตํด ์์์ ์ผ๋ก ์ธ์ฝ๋ฉ ์๋๋ฅผ ์ด๋ ์ ๋ ์ ์ดํ ์ ์์ต๋๋ค. ์ค์๊ฐ ์ธ์ฝ๋ฉ์ด ํ์ํ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ณ ํ๋์จ์ด ๊ฐ์์ ์ฌ์ฉํ์ฌ ์ธ์ฝ๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์คํ๋ผ์ธ์ผ๋ก ์ธ์ฝ๋ฉํ๋ ๊ฒฝ์ฐ RDO์ ๋ ๋ง์ ์๊ฐ์ ํฌ์ํ๋ฉด ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ํ๋์จ์ด ๊ฐ์: ํ๋์จ์ด ๊ฐ์์ ์ฌ์ฉํ๋ฉด ์ธ์ฝ๋ฉ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํค๊ณ ์ธ์ฝ๋๊ฐ ๋ ๋ณต์กํ RDO ๊ณ์ฐ์ ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋์จ์ด ๊ฐ์์ ๋ชจ๋ ์ฅ์น ๋๋ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์ ์์ ์ ์์ต๋๋ค. ํ๋์จ์ด ๊ฐ์ ์ง์์ ํ์ธํ๊ณ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋์ฒด ์๋ฃจ์
์ ์ ๊ณตํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
VideoEncoder.isConfigSupported()๋ฉ์๋๋ฅผ ํ์ธํ์ฌ ์ ํํ ๊ตฌ์ฑ(ํ๋์จ์ด ๊ฐ์ ํฌํจ)์ด ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ๋ฐ ํ๋์จ์ด์์ ์ง์๋๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ์ญ์์ค. - ํ ์คํธ ๋ฐ ํ๊ฐ: ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์ต์ ์ RDO ๊ตฌ์ฑ์ ๊ฒฐ์ ํ๋ ค๋ฉด ์ฒ ์ ํ ํ ์คํธ ๋ฐ ํ๊ฐ๊ฐ ํ์์ ์ ๋๋ค. PSNR(Peak Signal-to-Noise Ratio) ๋ฐ SSIM(Structural Similarity Index)๊ณผ ๊ฐ์ ๊ฐ๊ด์ ์ธ ํ์ง ์งํ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฝ๋ฉ๋ ๋น๋์ค์ ํ์ง์ ์ ๋ํํ์ญ์์ค. ์ฃผ๊ด์ ์ธ ์๊ฐ์ ๊ฒ์ฌ๋ ์ธ์ฝ๋ฉ๋ ๋น๋์ค๊ฐ ์ํ๋ ํ์ง ํ์ค์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๋ค์ํ ์ฝํ ์ธ ์ ํ ๋ฐ ํด์๋๋ฅผ ๋ํ๋ด๋ ๋ค์ํ ํ ์คํธ ๋น๋์ค ์ธํธ๋ฅผ ์ฌ์ฉํ์ญ์์ค. ํ์ง๊ณผ ๋นํธ ์ ์ก๋ฅ ๊ฐ์ ์ต์ ์ ๊ท ํ์ ์ ๊ณตํ๋ ์ค์ ์ ์๋ณํ๊ธฐ ์ํด ๋ค๋ฅธ RDO ๊ตฌ์ฑ์ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ์ญ์์ค.
- ์ ์ํ ๋นํธ ์ ์ก๋ฅ ์คํธ๋ฆฌ๋ฐ(ABS): ์คํธ๋ฆฌ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ ์ํ ๋นํธ ์ ์ก๋ฅ ์คํธ๋ฆฌ๋ฐ(ABS) ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ABS๋ ๋น๋์ค๋ฅผ ์ฌ๋ฌ ๋นํธ ์ ์ก๋ฅ ๋ฐ ํด์๋๋ก ์ธ์ฝ๋ฉํ๊ณ ์ฌ์ฉ์์ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์ ํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. RDO๋ ABS ๊ณ์ธต์ ๊ฐ ๋นํธ ์ ์ก๋ฅ ์์ค์ ๋ํ ๊ณ ํ์ง ์ธ์ฝ๋ฉ์ ์์ฑํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ ์ฒด ๋ฒ์์ ๊ฑธ์ณ ์ต์ ์ ํ์ง์ ๋ณด์ฅํ๊ธฐ ์ํด ๊ฐ ๋นํธ ์ ์ก๋ฅ ์์ค์ ๋ํด RDO ์ค์ ์ ๋ณ๋๋ก ์ต์ ํํ์ญ์์ค.
- ์ฌ์ ์ฒ๋ฆฌ: ๊ฐ๋จํ ์ฌ์ ์ฒ๋ฆฌ ๋จ๊ณ๋ RDO์ ํจ๊ณผ๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ ธ์ด์ฆ ๊ฐ์ ๋ฐ ์์ ํ๊ฐ ํฌํจ๋ฉ๋๋ค.
์ ์ธ๊ณ RDO ์ํฅ์ ์
RDO์ ์ํฅ์ ๋ค์ํ ์ค์ ์๋๋ฆฌ์ค์์ ๊ด์ฐฐ๋ ์ ์์ต๋๋ค.
- ์ ํ๋ ๋์ญํญ ์ง์ญ์ ํ์ ํ์: ๊ฐ๋ฐ ๋์๊ตญ์ ๋์ด ์ง์ญ๊ณผ ๊ฐ์ด ์ธํฐ๋ท ๋์ญํญ์ด ์ ํ์ ์ด๊ฑฐ๋ ๋ถ์์ ํ ์ง์ญ์์๋ ์ํํ๊ณ ์ ๋ช ํ ํ์ ํ์ ๊ฒฝํ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ํจ์จ์ ์ธ RDO๊ฐ ์ค์ํฉ๋๋ค. ๋นํธ ์ ์ก๋ฅ ๊ณผ ํ์ง์ ๊ท ํ์ ์ ์คํ๊ฒ ๋ง์ถค์ผ๋ก์จ RDO๋ ์ด๋ ค์ด ๋คํธ์ํฌ ์กฐ๊ฑด์์๋ ํ์ ํตํ๊ฐ ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, WebCodecs๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ ํ์ต์ ํ๋ ์ธ๋ ๋์ด ์ง์ญ์ ํ๊ต๋ ์ต์ ํ๋ RDO๋ฅผ ํ์ฉํ์ฌ ์ธํฐ๋ท ์ก์ธ์ค๊ฐ ์ ํ๋ ํ์๋ค์๊ฒ ๊ต์ก ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์ ํฅ ์์ฅ์ ๋ชจ๋ฐ์ผ ๋น๋์ค ์คํธ๋ฆฌ๋ฐ: ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ๊ฐ ์ข ์ข ๋น์ธ๊ณ ๋ฐ์ดํฐ ์ ํ์ด ์ผ๋ฐ์ ์ธ ์ ํฅ ์์ฅ์์ RDO๋ ๋น๋์ค ํ์ง์ ํฌ์ํ์ง ์๊ณ ๋ฐ์ดํฐ ์๋น๋ฅผ ์ค์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ธ์ฝ๋ฉ ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํจ์ผ๋ก์จ RDO๋ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ ์ ํ์ ์ด๊ณผํ์ง ์๊ณ ๋ชจ๋ฐ์ผ ์ฅ์น์์ ๋น๋์ค๋ฅผ ์คํธ๋ฆฌ๋ฐํ ์ ์๋๋ก ๋์ธ ์ ์์ต๋๋ค. ๋์ด์ง๋ฆฌ์์ ๋ด์ค ๋งค์ฒด๋ WebCodecs์ ์ต์ ํ๋ RDO๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ์๊ธ์ ์ต์ํํ๋ฉด์ ๋ชจ๋ฐ์ผ ์ฌ์ฉ์์๊ฒ ๋น๋์ค ๋ณด๊ณ ์๋ฅผ ์คํธ๋ฆฌ๋ฐํ ์ ์์ต๋๋ค.
- ๋ํํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ ์ง์ฐ ์คํธ๋ฆฌ๋ฐ: ์จ๋ผ์ธ ๊ฒ์ ๋๋ ์คํฌ์ธ ์ด๋ฒคํธ์ ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ๊ณผ ๊ฐ์ ๋ํํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ RDO๋ ํ์ง, ๋นํธ ์ ์ก๋ฅ ๋ฐ ์ง์ฐ ์๊ฐ ๊ฐ์ ๊ท ํ์ ๋ง์ถฐ์ผ ํฉ๋๋ค. ๊ณต๊ฒฉ์ ์ธ ๋นํธ ์ ์ก๋ฅ ๊ฐ์๋ ์ฉ๋ฉํ ์ ์๋ ์๊ฐ์ ์ํฐํฉํธ๋ฅผ ์ด๋ํ ์ ์์ผ๋ฉฐ, ๋์ ๋นํธ ์ ์ก๋ฅ ์ ๊ณผ๋ํ ์ง์ฐ ์๊ฐ์ ๋์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์์ฒญ ๊ฒฝํ์ ์ ํดํ์ง ์์ผ๋ฉด์ ์ง์ฐ ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด ์ ์คํ RDO ํ๋์ด ํ์์ ์ ๋๋ค. ํ๊ตญ์ ํ๋ก e์คํฌ์ธ ๋ฆฌ๊ทธ๊ฐ WebCodecs๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ง์ฐ ์คํธ๋ฆฌ๋ฐ์ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ค์ ์์ฒญ์์๊ฒ ์ ๋ช ํ ๋น๋์ค๋ฅผ ์ ๊ณตํ๋ฉด์ ์ง์ฐ ์๊ฐ์ ์ต์ํํ๋ ๊ท ํ์ ๋ง์ถฐ์ผ ํฉ๋๋ค.
WebCodecs์์ RDO์ ๋ฏธ๋
WebCodecs API๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ RDO ๊ธฐ๋ฅ์ ์ถ๊ฐ ๋ฐ์ ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ์ ์ฌ์ ์ธ ๋ฏธ๋ ๊ฐ๋ฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ๋ ธ์ถ๋ RDO ๋งค๊ฐ๋ณ์: API๋ RDO ๋งค๊ฐ๋ณ์์ ๋ํ ๋ณด๋ค ์ธ๋ถํ๋ ์ ์ด๋ฅผ ๋ ธ์ถํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋น์จ-์๊ณก ์ ์ถฉ์ ์ง์ ์ํฅ์ ๋ฏธ์น ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ๋ณด๋ค ์ ํํ ํ๋์ด ๊ฐ๋ฅํด์ง ๊ฒ์ ๋๋ค.
- ์ ์ํ RDO: RDO ์๊ณ ๋ฆฌ์ฆ์ ๋น๋์ค ์ฝํ ์ธ ์ ํน์ฑ๊ณผ ์ฌ์ฉ ๊ฐ๋ฅํ ๋คํธ์ํฌ ๋์ญํญ์ ๊ธฐ๋ฐ์ผ๋ก ๋์์ ๋์ ์ผ๋ก ์กฐ์ ํ์ฌ ๋ณด๋ค ์ ์์ ์ผ๋ก ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ค์ํ ์กฐ๊ฑด์์ ๋ณด๋ค ํจ์จ์ ์ธ ์ธ์ฝ๋ฉ๊ณผ ํฅ์๋ ํ์ง์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
- ๊ธฐ๊ณ ํ์ต ๊ธฐ๋ฐ RDO: ๊ธฐ๊ณ ํ์ต ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ RDO ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํ๊ณ ๋ฐฉ๋ํ ์์ ๋น๋์ค ๋ฐ์ดํฐ๋ฅผ ํ์ตํ์ฌ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์ธ์ฝ๋ฉ ์ ๋ต์ ์๋ณํ ์ ์์ต๋๋ค. ์ด๋ ์์ถ ํจ์จ์ฑ๊ณผ ํ์ง์์ ์๋นํ ๊ฐ์ ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
๊ฒฐ๋ก
๋น์จ-์๊ณก ์ต์ ํ๋ ์ต์ ๋น๋์ค ์ธ์ฝ๋ฉ์ ์ค์ํ ๊ตฌ์ฑ ์์์ด๋ฉฐ, WebCodecs๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ํ์ง ๋น๋์ค๋ฅผ ๋ฌ์ฑํ๋ ค๋ฉด ๊ทธ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ๋์ ๋นํธ ์ ์ก๋ฅ , ์ฝ๋ฑ ์ ํ, ์ฝํ ์ธ ๋ณต์ก์ฑ ๋ฐ ํ๋์จ์ด ๊ธฐ๋ฅ์ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ RDO๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋น๋์ค ์ธ์ฝ๋ฉ์ ์ต์ ํํ ์ ์์ต๋๋ค. WebCodecs API๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋์ฑ ํฅ์๋ ๋น๋์ค ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ ๋์ฑ ๊ฐ๋ ฅํ RDO ๊ธฐ๋ฅ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ์ต์ ์ ๋นํธ ์ ์ก๋ฅ ๊ณผ ํ์ง ๊ท ํ์ ๋ฌ์ฑํ๋ ค๋ฉด ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ํ ์คํธ ๋ฐ ์กฐ์ ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
์ด๋ฌํ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ๊ถ์ฅ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ WebCodecs๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋์ค ์ธ์ฝ๋ฉ ์ํฌํ๋ก์ ํ์ง๊ณผ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์์ผ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ์์ฒญ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.