WebCodecs API ๋ด์์ ๋น์จ-์๊ณก ์ต์ ํ(RDO)์ ์๋ฆฌ, ๊ตฌํ ๋ฐ ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ๊ฑธ์ณ ๋น๋์ค ์ธ์ฝ๋ฉ ํ์ง๊ณผ ํจ์จ์ฑ์ ๋ฏธ์น๋ ์ํฅ์ ๋ํ ์ฌ์ธต์ ์ธ ํ๊ตฌ.
WebCodecs ์ธ์ฝ๋ ํ์ง ์ ์ด ์๊ณ ๋ฆฌ์ฆ: ๋น์จ-์๊ณก ์ต์ ํ
WebCodecs API๋ ์น ๊ธฐ๋ฐ ๋ฏธ๋์ด ์ฒ๋ฆฌ ๋ถ์ผ์์ ์๋นํ ๋ฐ์ ์ ์๋ฏธํฉ๋๋ค. ์ด API๋ ๋ธ๋ผ์ฐ์ ๋ด์์ ์ง์ ๋น๋์ค ๋ฐ ์ค๋์ค ์ฝ๋ฑ์ ๋ํ ์ ์์ค ์ก์ธ์ค๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ ฅํ ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ํฉ๋๋ค. WebCodecs๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ํ์ง ๋น๋์ค ์ธ์ฝ๋ฉ์ ๋ฌ์ฑํ๋ ๋ฐ ์์ด ์ค์ํ ์ธก๋ฉด์ ํจ๊ณผ์ ์ธ ํ์ง ์ ์ด์ ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ๋น์จ-์๊ณก ์ต์ ํ(RDO)๊ฐ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ WebCodecs ํ๊ฒฝ์์์ RDO์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด, ๊ทธ ๊ทผ๋ณธ ์๋ฆฌ, ์ค์ ๊ตฌํ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์๋๋ฆฌ์ค์์ ์ ๊ณตํ๋ ์ด์ ์ ํ๊ตฌํฉ๋๋ค.
๋น์จ-์๊ณก ์ต์ ํ(RDO) ์ดํดํ๊ธฐ
ํต์ฌ ๊ฐ๋
๋ณธ์ง์ ์ผ๋ก RDO๋ ์ฃผ์ด์ง ๋นํธ๋ ์ดํธ์์ ๊ฐ๋ฅํ ์ต๊ณ ์ ๋น๋์ค ํ์ง์ ๋ฌ์ฑํ๊ฑฐ๋, ๋ฐ๋๋ก ํน์ ์์ค์ ํ์ง์ ๋ฌ์ฑํ๋ ๋ฐ ํ์ํ ๋นํธ๋ ์ดํธ๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๋น๋์ค ์ธ์ฝ๋ฉ์ ์ฌ์ฉ๋๋ ์ต์ ํ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ๋น์จ(๋น๋์ค๋ฅผ ํํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋นํธ ์)๊ณผ ์๊ณก(์์ถ ์ค ์๊ฐ ์ ๋ณด ์์ค) ์ฌ์ด์ ๋ฏธ๋ฌํ ๊ท ํ ์ก๊ธฐ์ ๋๋ค. ๋ชฉํ๋ ๋น์จ๊ณผ ์๊ณก์ ๋ชจ๋ ๊ฒฐํฉํ๋ ๋น์ฉ ํจ์๋ฅผ ์ต์ํํ๋ ์ธ์ฝ๋ฉ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฐพ๋ ๊ฒ์ ๋๋ค.
์ํ์ ์ผ๋ก ์ด ๋น์ฉ ํจ์๋ ์ข ์ข ๋ค์๊ณผ ๊ฐ์ด ํํ๋ฉ๋๋ค:
J = D + ฮป * R
์ฌ๊ธฐ์:
J
๋ ๋น์ฉ์ ๋๋ค.D
๋ ์๊ณก(์๋ณธ ๋น๋์ค์ ์ธ์ฝ๋ฉ๋ ๋น๋์ค ๊ฐ์ ์ฐจ์ด๋ฅผ ์ธก์ ํ๋ ๊ฐ)์ ๋๋ค.R
์ ๋น์จ(์ฌ์ฉ๋ ๋นํธ ์)์ ๋๋ค.ฮป
(๋๋ค)๋ ๋น์จ๊ณผ ์๊ณก ์ฌ์ด์ ํธ๋ ์ด๋์คํ๋ฅผ ๋ํ๋ด๋ ๋ผ๊ทธ๋์ฃผ ์น์์ ๋๋ค. ๋๋ค ๊ฐ์ด ๋์์๋ก ๋นํธ๋ ์ดํธ ์ต์ํ์ ๋ ์ค์ ์ ๋์ด ํ์ง์ ์ผ๋ถ ํฌ์ํ ์ ์์ผ๋ฉฐ, ๋๋ค ๊ฐ์ด ๋ฎ์์๋ก ๋ ๋์ ํ์ง์ ์ฌ์ฉํ๋๋ผ๋ ๋ ๋ง์ ๋นํธ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
์ธ์ฝ๋๋ ๋ค์ํ ์ธ์ฝ๋ฉ ์ต์ (์: ๋ค๋ฅธ ์์ง์ ๋ฒกํฐ, ์์ํ ํ๋ผ๋ฏธํฐ, ์ฝ๋ฉ ๋ชจ๋)์ ํ์ํ๊ณ ๊ฐ ์ต์ ์ ๋ํ ๋น์ฉ์ ๊ณ์ฐํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ ์ฒด ๋น์ฉ์ ์ต์ํํ๋ ์ต์ ์ ์ ํํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋น๋์ค ํ๋ ์์ ๊ฐ ๋งคํฌ๋ก๋ธ๋ก(๋๋ ์ฝ๋ฉ ๋จ์)์ ๋ํด ๋ฐ๋ณต๋ฉ๋๋ค.
RDO๊ฐ ์ค์ํ ์ด์
RDO๊ฐ ์์ผ๋ฉด ๋น๋์ค ์ธ์ฝ๋๋ ์ข ์ข ๋ ๊ฐ๋จํ๊ณ ๋น ๋ฅธ ํด๋ฆฌ์คํฑ์ ์์กดํ์ฌ ์ธ์ฝ๋ฉ ๊ฒฐ์ ์ ๋ด๋ฆฝ๋๋ค. ์ด๋ฌํ ํด๋ฆฌ์คํฑ์ ํจ์จ์ ์ผ ์ ์์ง๋ง, ์ข ์ข ์ต์ ์ด ์๋ ๊ฒฐ๊ณผ๋ก ์ด์ด์ ธ ํ์ํ ๊ฒ๋ณด๋ค ๋ฎ์ ๋น๋์ค ํ์ง์ด๋ ๋ ๋์ ๋นํธ๋ ์ดํธ๋ฅผ ์ด๋ํฉ๋๋ค. RDO๋ ์ต์์ ์ธ์ฝ๋ฉ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฐพ๋ ๋ฐ ๋ ์๊ฒฉํ๊ณ ์ฒด๊ณ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ์ฌ ๋น๋์ค ํ์ง๊ณผ ์์ถ ํจ์จ์ฑ ๋ชจ๋์์ ์๋นํ ๊ฐ์ ์ ๊ฐ์ ธ์ต๋๋ค.
๊ธ๋ก๋ฒ ์์ฒญ์๋ฅผ ๋์์ผ๋ก ํ๋ ์คํฌ์ธ ์ค๊ณ์ ๊ฐ์ ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ณด์ญ์์ค. ํจ๊ณผ์ ์ธ RDO๋ ๋ค์ํ ์ธํฐ๋ท ์ฐ๊ฒฐ ์๋๋ฅผ ๊ฐ์ง ์์ฒญ์๋ค์ด ๋์ญํญ ์ ์ฝ ๋ด์์ ๊ฐ๋ฅํ ์ต๊ณ ์ ๋น๋์ค ํ์ง์ ๋ฐ์ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋๋ ๊ณ ํด์๋ ๊ณผํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. RDO๋ ์ค์ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณด์กดํ๋ฉด์ ์ ์ฅ ๋น์ฉ์ ์ต์ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
WebCodecs์์ RDO ๊ตฌํ
WebCodecs ๋ฐ ์ธ์ฝ๋ ๊ตฌ์ฑ
WebCodecs API๋ ๋น๋์ค ์ธ์ฝ๋์ ์ํธ ์์ฉํ๊ธฐ ์ํ ์ ์ฐํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. API ์์ฒด๋ RDO ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ๋
ธ์ถํ์ง ์์ง๋ง, ๊ฐ๋ฐ์๊ฐ RDO ํ๋ก์ธ์ค์ ๊ฐ์ ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น๋ ๋ค์ํ ์ธ์ฝ๋ ์ค์ ์ ๊ตฌ์ฑํ ์ ์๋๋ก ํฉ๋๋ค. ์ด ๊ตฌ์ฑ์ ์ฃผ๋ก VideoEncoder
๋ฅผ ์ด๊ธฐํํ ๋ VideoEncoderConfig
๊ฐ์ฒด๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
RDO์ ์ํฅ์ ๋ฏธ์น๋ ์ฃผ์ ํ๋ผ๋ฏธํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋นํธ๋ ์ดํธ: ๋ชฉํ ๋นํธ๋ ์ดํธ๋ฅผ ์ค์ ํ๋ ๊ฒ์ RDO์ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๋ ์ธ์ฝ๋์ ์ ๋ฐ์ ์ธ ๋น์จ ์ ์ด ์ ๋ต์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ฎ์ ๋ชฉํ ๋นํธ๋ ์ดํธ๋ ์ธ์ฝ๋๊ฐ ๋ ๊ณต๊ฒฉ์ ์ธ ์์ถ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋๋ก ๊ฐ์ ํ์ฌ ์ ์ฌ์ ์ผ๋ก ๋ ๋์ ์๊ณก์ ์ด๋ํ ์ ์์ต๋๋ค.
- ํ๋ ์๋ ์ดํธ: ๋ ๋์ ํ๋ ์๋ ์ดํธ๋ ์ธ์ฝ๋๊ฐ ์ด๋น ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํจ์ ์๋ฏธํ๋ฉฐ, ์ด๋ RDO ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ธ์ฝ๋๋ ๋ ๋น ๋ฅธ ๊ฒฐ์ ์ ๋ด๋ ค์ผ ํ ์ ์์ผ๋ฉฐ, RDO ํ๋ก์ธ์ค์ ์ผ๋ถ ์ ํ์ฑ์ ํฌ์ํ ์ ์์ต๋๋ค.
- ์ฝ๋ฑ๋ณ ์ค์ : ์ฌ์ฉ ์ค์ธ ํน์ ์ฝ๋ฑ(์: VP9, AV1, H.264)์ RDO์ ์ํฅ์ ๋ฏธ์น๋ ์์ฒด ํ๋ผ๋ฏธํฐ ์ธํธ๋ฅผ ๊ฐ์ง๋๋ค. ์ด๋ฌํ ํ๋ผ๋ฏธํฐ์๋ ์์ํ ํ๋ผ๋ฏธํฐ, ์์ง์ ์ถ์ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ์ฝ๋ฉ ๋ชจ๋ ์ ํ ์ ๋ต์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ค์ ์ `VideoEncoderConfig` ๋ด์ ์ฝ๋ฑ๋ณ ์ต์ ์ ํตํด ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์ง์ฐ ์๊ฐ ๋ชจ๋: ์ค์๊ฐ ํต์ ์๋๋ฆฌ์ค(์: ํ์ ํ์)์ ๊ฒฝ์ฐ ๋ฎ์ ์ง์ฐ ์๊ฐ์ด ์ค์ํฉ๋๋ค. ์ธ์ฝ๋๋ ์ ๋์ ์ธ ํ์ง๋ณด๋ค ์๋๋ฅผ ์ฐ์ ์ํ์ฌ RDO ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ ์ ์์ต๋๋ค.
์ฝ๋ฑ๋ณ API ํ์ฉ
WebCodecs๋ VP9, AV1, H.264์ ๊ฐ์ ๋ค์ํ ์ฝ๋ฑ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ฐ ์ฝ๋ฑ์ ๊ณ ์ ํ ๊ธฐ๋ฅ๊ณผ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. RDO๋ฅผ ์์ ํ ํ์ฉํ๋ ค๋ฉด ์ฝ๋ฑ๋ณ API๋ฅผ ๊น์ด ํ๊ณ ๋ค์ด ์ธ์ฝ๋๋ฅผ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ข ์ข ํ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, VP9์์๋ ์์ํ ํ๋ผ๋ฏธํฐ(QP)๋ฅผ ์ง์ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ฎ์ QP๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋์ ํ์ง์ ์ ๊ณตํ์ง๋ง ๋ ๋์ ๋นํธ๋ ์ดํธ๋ฅผ ์ด๋ํฉ๋๋ค. AV1์ ๋ค์ํ ์ธ์ฝ๋ฉ ํ๋ผ๋ฏธํฐ์ ๋ํด ํจ์ฌ ๋ ์ธ๋ถํ๋ ์ ์ด๋ฅผ ์ ๊ณตํ์ฌ RDO ํ๋ก์ธ์ค๋ฅผ ๋ฏธ์ธ ์กฐ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
`VideoEncoderConfig`์ `codecConfig` ์์ฑ์ ์ฝ๋ฑ๋ณ ๊ตฌ์ฑ์ ๊ธฐ๋ณธ ์ธ์ฝ๋ ๊ตฌํ์ผ๋ก ์ ๋ฌํ๋ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
์์: RDO๋ฅผ ์ํ VP9 ๊ตฌ์ฑ
์์ ํ ์์๋ ๋ฐฉ๋ํ๊ฒ ์ง๋ง, WebCodecs๋ฅผ ์ฌ์ฉํ์ฌ VP9๋ฅผ RDO์ ๋ง๊ฒ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋ตํ ์์์ ๋๋ค:
const encoderConfig = {
codec: 'vp09.00.10.08',
width: 1280,
height: 720,
bitrate: 2000000, // 2 Mbps
framerate: 30,
latencyMode: 'quality',
codecConfig: {
vp9: {
// ์ด ์ค์ ๋ค์ ์์์ด๋ฉฐ ํน์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์กฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค.
profile: 0,
level: 10,
quantizer: {
min: 4,
max: 63,
deltaQResilience: 1 // delta-Q ๋ณต์๋ ฅ ํ์ฑํ
},
// ๋ ๊ณ ๊ธ RDO ๊ด๋ จ ์ค์ (์์):
tune: {
rdmult: 20, // ๋น์จ ์๊ณก ์น์
// ๊ธฐํ ํ๋ ํ๋ผ๋ฏธํฐ
}
}
}
};
const encoder = new VideoEncoder(encoderConfig);
์ค์ ์ฐธ๊ณ : ํน์ ์ฝ๋ฑ๋ณ ํ๋ผ๋ฏธํฐ์ ๊ทธ ํจ๊ณผ๋ ๊ธฐ๋ณธ ์ธ์ฝ๋ ๊ตฌํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ฌ์ฉ ์ค์ธ ํน์ ์ฝ๋ฑ์ ๋ํ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ๊ณผ RDO์ ๋ฏธ์น๋ ์ํฅ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
RDO ๊ตฌํ์ ์ํ ์ค์ ๊ณ ๋ ค ์ฌํญ
๊ณ์ฐ ๋ณต์ก์ฑ
RDO๋ ๊ณ์ฐ ์ง์ฝ์ ์ ๋๋ค. ์ธ์ฝ๋๊ฐ ์๋ง์ ์ธ์ฝ๋ฉ ์ต์ ์ ํ๊ฐํด์ผ ํ๋ฏ๋ก ์ธ์ฝ๋ฉ ์๊ฐ์ ํฌ๊ฒ ๋๋ฆด ์ ์์ต๋๋ค. ์ด๋ ์ธ์ฝ๋ฉ ์๋๊ฐ ์ต์ฐ์ ์ธ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ด ์ค์ํ ๊ณ ๋ ค ์ฌํญ์ ๋๋ค.
RDO์ ๊ณ์ฐ ๋ณต์ก์ฑ์ ์ํํ๊ธฐ ์ํ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ์ ๊ณต๊ฐ ๋จ์ํ: ์ธ์ฝ๋๊ฐ ๊ณ ๋ คํ๋ ์ธ์ฝ๋ฉ ์ต์ ์ ์๋ฅผ ์ค์ ๋๋ค. ์ด๋ ์์ง์ ๋ฒกํฐ์ ๋ฒ์๋ฅผ ์ ํํ๊ฑฐ๋, ํน์ ์ฝ๋ฉ ๋ชจ๋์ ์ฌ์ฉ์ ์ ํํ๊ฑฐ๋, ๋ ๋น ๋ฅด์ง๋ง(์ ์ฌ์ ์ผ๋ก ๋ ์ ํํ) ์๊ณก ์ถ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ํฌํจํ ์ ์์ต๋๋ค.
- ๊ณ์ธต์ RDO ์ฌ์ฉ: ์ฌ๋ฌ ์์ค์ ์ธ๋ถ์ฑ์์ RDO๋ฅผ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ๋น ๋ฅด๊ณ ๋ ์ ํํ RDO ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํ์ ๊ณต๊ฐ์ ์ ์ํ๊ฒ ๊ฐ์ง์น๊ธฐํ๊ณ , ์ด์ด์ ๋จ์ ํ๋ณด์ ๋ํด ๋ ์ฒ ์ ํ RDO ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ๋ณ๋ ฌํ: ์ฌ๋ฌ CPU ์ฝ์ด ๋๋ GPU์ ๊ณ์ฐ์ ๋ถ์ฐํ์ฌ RDO์ ๋ด์ฌ๋ ๋ณ๋ ฌ์ฑ์ ํ์ฉํฉ๋๋ค. WebCodecs ์์ฒด๋ ๋น๋๊ธฐ API๋ฅผ ํตํด ์ด๋ ์ ๋์ ๋ณ๋ ฌํ๋ฅผ ์ง์ํฉ๋๋ค.
์ ์ ํ ๋๋ค(ฮป) ์ ํ
๋ผ๊ทธ๋์ฃผ ์น์(ฮป)๋ ๋น์จ๊ณผ ์๊ณก ์ฌ์ด์ ํธ๋ ์ด๋์คํ๋ฅผ ๊ฒฐ์ ํ๋ฏ๋ก RDO์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ ์ ํ ๋๋ค ๊ฐ์ ์ ํํ๋ ๊ฒ์ ๋น๋์ค ํ์ง๊ณผ ๋นํธ๋ ์ดํธ ์ฌ์ด์ ์ํ๋ ๊ท ํ์ ๋ฌ์ฑํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
๋ ๋์ ๋๋ค ๊ฐ์ ๋นํธ๋ ์ดํธ ์ต์ํ์ ์ฐ์ ์์๋ฅผ ๋์ด ์ ์ฌ์ ์ผ๋ก ๋น๋์ค ํ์ง์ ๋ฎ์ถ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋ฐ์ผ ์คํธ๋ฆฌ๋ฐ ๋๋ ์ ๋์ญํญ ๋คํธ์ํฌ์ ๊ฐ์ด ๋์ญํญ์ด ์ ํ๋ ์๋๋ฆฌ์ค์ ์ ํฉํฉ๋๋ค.
๋ ๋ฎ์ ๋๋ค ๊ฐ์ ๋ ๋์ ๋นํธ๋ ์ดํธ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋น๋์ค ํ์ง ์ต๋ํ์ ์ฐ์ ์์๋ฅผ ๋ก๋๋ค. ์ด๋ ์์นด์ด๋ธ ๋๋ ๋น ๋ฅธ ๋คํธ์ํฌ๋ฅผ ํตํ ๊ณ ํ์ง ๋น๋์ค ์คํธ๋ฆฌ๋ฐ๊ณผ ๊ฐ์ด ๋์ญํญ์ด ํ๋ถํ ์๋๋ฆฌ์ค์ ์ ํฉํฉ๋๋ค.
์ต์ ์ ๋๋ค ๊ฐ์ ์ธ์ฝ๋ฉ๋๋ ์ฝํ ์ธ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ณต์กํ ์ฅ๋ฉด๊ณผ ๋ฏธ์ธํ ๋ํ ์ผ์ด ์๋ ๋น๋์ค๋ ํด๋น ๋ํ ์ผ์ ๋ณด์กดํ๊ธฐ ์ํด ๋ ๋ฎ์ ๋๋ค ๊ฐ์ด ํ์ํ ์ ์๋ ๋ฐ๋ฉด, ๋ ๊ฐ๋จํ ์ฅ๋ฉด์ ๋น๋์ค๋ ์๋นํ ํ์ง ์์ค ์์ด ๋ ๋์ ๋๋ค ๊ฐ์ ํ์ฉํ ์ ์์ต๋๋ค.
์ค์ ๋ก ๋๋ค๋ WebCodecs์์ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ๋ก ์ง์ ๋ ธ์ถ๋์ง ์์ต๋๋ค. ๋์ ๋นํธ๋ ์ดํธ ์ค์ ๋ฐ ๊ธฐํ ์ฝ๋ฑ๋ณ ํ๋ผ๋ฏธํฐ์ ์ํด ์๋ฌต์ ์ผ๋ก ์ ์ด๋ฉ๋๋ค. ์ธ์ฝ๋์ ๋ด๋ถ RDO ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฌํ ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋๋ค๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํฉ๋๋ค.
์๊ณก ์ธก์ ํญ๋ชฉ
์๊ณก ์ธก์ ํญ๋ชฉ์ ์ ํ ๋ํ ์ค์ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์๊ณก ์ธก์ ํญ๋ชฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ๊ท ์ ๊ณฑ ์ค์ฐจ (MSE): ์๋ณธ ํฝ์ ๊ณผ ์ธ์ฝ๋ฉ๋ ํฝ์ ๊ฐ์ ํ๊ท ์ ๊ณฑ ์ฐจ์ด๋ฅผ ์ธก์ ํ๋ ๊ฐ๋จํ๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ธก์ ํญ๋ชฉ์ ๋๋ค.
- ์ต๋ ์ ํธ ๋ ์ก์๋น (PSNR): MSE๋ฅผ ๋ฐ์๋ฒจ๋ก ํํํ๋ ๊ด๋ จ ์ธก์ ํญ๋ชฉ์ ๋๋ค. PSNR ๊ฐ์ด ๋์์๋ก ์ผ๋ฐ์ ์ผ๋ก ๋ ๋์ ๋น๋์ค ํ์ง์ ๋ํ๋ ๋๋ค.
- ๊ตฌ์กฐ์ ์ ์ฌ์ฑ ์ง์ (SSIM): ์ธ๊ฐ ์๊ฐ ์์คํ ์ ์ธ์ง์ ํน์ฑ์ ๊ณ ๋ คํ๋ ๋ ์ ๊ตํ ์ธก์ ํญ๋ชฉ์ ๋๋ค. SSIM์ ์ข ์ข MSE ๋๋ PSNR๋ณด๋ค ์ธ์ง๋ ๋น๋์ค ํ์ง์ ๋ ๋์ ์งํ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- ๋น๋์ค ํ์ง ์ธก์ (VMAF): ์ธ์ง๋ ๋น๋์ค ํ์ง์ ๊ฐ์ฅ ์ ์์ธกํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฐ ์ธก์ ํญ๋ชฉ์ ๋๋ค.
WebCodecs๋ ์ธ์ฝ๋ฉ ๊ณผ์ ์ค์ ์ด๋ฌํ ์๊ณก ์ธก์ ํญ๋ชฉ์ ๋ํ ์ง์ ์ ์ธ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ์ง ์์ง๋ง, ๋ค์ํ ์ธ์ฝ๋ฉ ๊ตฌ์ฑ ๋ฐ RDO ์ ๋ต์ ์ฑ๋ฅ์ ํ๊ฐํ๋ ๋ฐ์๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ธ์ฝ๋ฉ๋ ๋น๋์ค๋ฅผ ๋์ฝ๋ฉํ ๋ค์ ์ด๋ฌํ ์ธก์ ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ ์๋ณธ๊ณผ ๋น๊ตํ์ฌ ์ธ์ฝ๋ฉ ์ค์ ์ ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ ์ฌ๋ก ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
RDO๋ ๋ค์์ ํฌํจํ ๊ด๋ฒ์ํ ๋น๋์ค ์ธ์ฝ๋ฉ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ฉํฉ๋๋ค:- ๋น๋์ค ์คํธ๋ฆฌ๋ฐ: ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๊ฐ์ง ์์ฒญ์์๊ฒ ์ต์ ์ ๋น๋์ค ํ์ง์ ๋ณด์ฅํฉ๋๋ค. ์ ์ํ ๋นํธ๋ ์ดํธ ์คํธ๋ฆฌ๋ฐ(ABR)์ RDO์ ํฌ๊ฒ ์์กดํ์ฌ ๋ค์ํ ๋นํธ๋ ์ดํธ์ ํ์ง ์์ค์ผ๋ก ๋น๋์ค์ ์ฌ๋ฌ ๋ฒ์ ์ ์์ฑํ๊ณ , ํ๋ ์ด์ด๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋์ญํญ์ ๋ฐ๋ผ ์ด๋ค ๊ฐ์ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค. ๊ธ๋ก๋ฒ ์คํธ๋ฆฌ๋ฐ ์๋น์ค๋ ์ ๊ตํ๊ฒ ํ๋๋ RDO๋ฅผ ํตํด ์์ฒญ์๊ฐ ๋์ฟ, ๋ฐ๋, ๋ถ์๋ ธ์ค์์ด๋ ์ค ์ด๋์ ์๋ ์ต๊ณ ์ ๊ฒฝํ์ ์ ๊ณตํจ์ผ๋ก์จ ํฐ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
- ํ์ ํ์: ์ค์๊ฐ ํต์ ์๋๋ฆฌ์ค์์ ๋์ญํญ ์ฌ์ฉ๋์ ์ต์ํํ๋ฉด์ ๋น๋์ค ํ์ง์ ์ ์งํฉ๋๋ค. ์ฌ๋ฌ ๊ตญ๊ฐ์ ์ฐธ๊ฐ์๋ค์ด ์ฐธ์ฌํ๋ ํ์ ํ์์์ RDO๋ ์ผ๋ถ ์ฐธ๊ฐ์์ ๋์ญํญ์ด ์ ํ์ ์ด๋๋ผ๋ ๋ชจ๋ ์ฌ๋์ด ์ ๋ช ํ๊ณ ์์ ์ ์ธ ๋น๋์ค ํผ๋๋ฅผ ๋ฐ์ ์ ์๋๋ก ๋์ต๋๋ค.
- ๋น๋์ค ์์นด์ด๋น: ์ค์ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณด์กดํ๋ฉด์ ๋น๋์ค ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์์ถํฉ๋๋ค. ์ ๋ฝ ์ํ ์์นด์ด๋ธ๊ฐ ์ปฌ๋ ์ ์ ๋์งํธํํ๋ ๊ฒ์ ์์ํด ๋ณด์ญ์์ค. RDO๋ ์ํ์ ์ญ์ฌ์ , ์์ ์ ๊ฐ์น๋ฅผ ๋ณด์กดํ๋ฉด์ ์ ์ฅ ๋น์ฉ์ ์ต์ํํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ๊ฒ์ ๋๋ค.
- ๊ฐ์ ์์คํ : ์ ์ฌ์ ์ํ์ ์๋ณํ๊ธฐ์ ์ถฉ๋ถํ ์ ๋ช ๋๋ฅผ ์ ์งํ๋ฉด์ ๊ฐ์ ์์์ ํจ์จ์ ์ผ๋ก ์ ์ฅํฉ๋๋ค. ๊ธ๋ก๋ฒ ๋ณด์ ํ์ฌ๋ ๊ณ ๊ฐ์ ๊ฐ์ ์์คํ ์์ ๋ฐฉ๋ํ ์์ ๋น๋์ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํฉ๋๋ค. RDO๋ ์ ์ฅ ๋น์ฉ๊ณผ ๋ช ํํ๊ณ ์คํ ๊ฐ๋ฅํ ์์์ ๋ํ ํ์์ฑ ์ฌ์ด์ ๊ท ํ์ ๋ง์ถ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ํด๋ผ์ฐ๋ ๊ฒ์: ๊ฒ์ ์คํธ๋ฆฌ๋ฐ ์๋น์ค์ ๋์ญํญ ์๋น๋ฅผ ์ค์ด๊ณ ์๊ฐ์ ์ถฉ์ค๋๋ฅผ ํฅ์์ํต๋๋ค. ๋ค์ํ ๊ตญ๊ฐ์ ํ๋ ์ด์ด๋ ์๋ก ๋ค๋ฅธ ์ฐ๊ฒฐ ์๋์ ํ๋์จ์ด๋ฅผ ๊ฐ์ง ๊ฒ์ ๋๋ค. RDO๋ ๋ชจ๋ ์ฌ๋์๊ฒ ์ผ๊ด๋๊ณ ์ฆ๊ฑฐ์ด ๊ฒ์ ๊ฒฝํ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ณ ๊ธ RDO ๊ธฐ์
RDO์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ๋์ด, ๋น๋์ค ์ธ์ฝ๋ฉ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํฌ ์ ์๋ ๋ช ๊ฐ์ง ๊ณ ๊ธ ๊ธฐ์ ์ด ์์ต๋๋ค:
- ์ ์ํ ์์ํ: ๋น๋์ค ์ฝํ ์ธ ์ ํน์ฑ์ ๋ฐ๋ผ ์์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ํ ์ผ์ด ๋์ ์์ญ์ ํด๋น ๋ํ ์ผ์ ๋ณด์กดํ๊ธฐ ์ํด ๋ ๋ฎ์ ์์ํ ํ๋ผ๋ฏธํฐ๋ก ์ธ์ฝ๋ฉ๋ ์ ์์ผ๋ฉฐ, ๋ํ ์ผ์ด ๋ฎ์ ์์ญ์ ๋นํธ๋ ์ดํธ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ ๋์ ์์ํ ํ๋ผ๋ฏธํฐ๋ก ์ธ์ฝ๋ฉ๋ ์ ์์ต๋๋ค.
- ์์ง์ ์ถ์ ์ ๊ตํ: ๋ ์ ๊ตํ ์์ง์ ์ถ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ ์ ํํ ์์ง์ ๋ฒกํฐ๋ฅผ ์ฐพ์ต๋๋ค. ์ด๋ ์ธ์ฝ๋ฉํด์ผ ํ๋ ์์ฌ ๋ฐ์ดํฐ์ ์์ ์ค์ฌ ๋ ๋์ ์์ถ ํจ์จ์ฑ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ๋ชจ๋ ๊ฒฐ์ ์ต์ ํ: ๋จธ์ ๋ฌ๋ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ฐ ๋งคํฌ๋ก๋ธ๋ก์ ๋ํ ์ต์ ์ ์ฝ๋ฉ ๋ชจ๋๋ฅผ ์์ธกํฉ๋๋ค. ์ด๋ ํ๊ฐํด์ผ ํ๋ ์ฝ๋ฉ ๋ชจ๋์ ์๋ฅผ ์ ํํจ์ผ๋ก์จ RDO์ ๊ณ์ฐ ๋ณต์ก์ฑ์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์ฝํ ์ธ ์ธ์ ์ธ์ฝ๋ฉ: ๋น๋์ค ์ฝํ ์ธ ๋ฅผ ๋ถ์ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ธ์ฝ๋ฉ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋น ๋ฅธ ์์ง์์ด ์๋ ๋น๋์ค๋ ์์ง์ ์ํฐํฉํธ๋ฅผ ํผํ๊ธฐ ์ํด ๋ ๋์ ๋นํธ๋ ์ดํธ๊ฐ ํ์ํ ์ ์๋ ๋ฐ๋ฉด, ์ ์ ์ฅ๋ฉด์ด ์๋ ๋น๋์ค๋ ๋ ๋ฎ์ ๋นํธ๋ ์ดํธ๋ก ์ธ์ฝ๋ฉ๋ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ณ ๊ธ ๊ธฐ์ ์ ์ข ์ข ์ฝ๋ฑ๋ณ์ด๋ฉฐ WebCodecs API๋ฅผ ํตํด ์ง์ ๋ ธ์ถ๋์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น๋์ค ์ธ์ฝ๋์ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฏ๋ก ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
WebCodecs์์ RDO์ ๋ฏธ๋
WebCodecs API๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ RDO ๊ธฐ๋ฅ์ ์ถ๊ฐ ๊ฐ์ ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ ์ ์์ต๋๋ค:
- RDO ํ๋ผ๋ฏธํฐ์ ๋ํ ๋ ์ง์ ์ ์ธ ์ ์ด: API๋ ๋ผ๊ทธ๋์ฃผ ์น์(ฮป) ๋ฐ ์๊ณก ์ธก์ ํญ๋ชฉ ์ ํ๊ณผ ๊ฐ์ RDO ํ๋ผ๋ฏธํฐ์ ๋ํ ๋ ์ง์ ์ ์ธ ์ ์ด๋ฅผ ๋ ธ์ถํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํน์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ RDO ํ๋ก์ธ์ค๋ฅผ ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค.
- ๊ฐ์ ๋ ์ฝ๋ฑ ๊ตฌํ: ์ฝ๋ฑ ๊ตฌํ์ RDO ์๊ณ ๋ฆฌ์ฆ์ ๊ณ์ ๊ฐ์ ํ์ฌ ๋ ๋์ ๋น๋์ค ํ์ง๊ณผ ์์ถ ํจ์จ์ฑ์ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
- ํ๋์จ์ด ๊ฐ์: RDO์ ํ๋์จ์ด ๊ฐ์์ด ๋์ฑ ๋ณดํธํ๋์ด ๋ ๋น ๋ฅธ ์ธ์ฝ๋ฉ ์๊ฐ๊ณผ ๋ฎ์ ์ ๋ ฅ ์๋น๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ ๋๋ค.
RDO์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ WebCodecs API์ ๊ธฐ๋ฅ์ ํ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๊ณ ํ์ง ์์ฒญ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ๋น๋์ค ์ธ์ฝ๋ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
๋น์จ-์๊ณก ์ต์ ํ๋ ํ๋ ๋น๋์ค ์ธ์ฝ๋ฉ์ ์ด์์ด๋ฉฐ, WebCodecs๋ฅผ ํตํด ๊ณ ํ์ง ๋น๋์ค๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ํจ๊ณผ์ ์ธ ๊ตฌํ์ด ์ค์ํฉ๋๋ค. RDO์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ธ์ฝ๋๋ฅผ ์ ์ ํ ๊ตฌ์ฑํ๋ฉฐ, ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ๋ ผ์๋ ์ค์ ๊ณ ๋ ค ์ฌํญ์ ๊ณ ๋ คํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ WebCodecs์ ํ์ ํ์ฉํ์ฌ ์ ์ธ๊ณ ์์ฒญ์๋ฅผ ์ํ ๋งค๋ ฅ์ ์ด๊ณ ํจ์จ์ ์ธ ๋ฏธ๋์ด ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์ํ ์ค์ ๊ณผ ์๊ณก ์ธก์ ํญ๋ชฉ์ ์คํํ์ญ์์ค. ์ฑ๋ฅ์ ํญ์ ์ฝํ ์ธ ์ ํฌ๊ฒ ์์กดํ๋ฉฐ, ์ฝํ ์ธ ๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ค์ํฉ๋๋ค. ํจ๊ณผ์ ์ธ RDO๋ ์ง์ญ์ ๊ด๊ณ์์ด ์์ฒญ์์ ํน์ ์ํฉ์ ๋ฐ๋ผ ๊ฐ๋ฅํ ์ต๊ณ ์ ์์ฒญ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.