μΉ μ ν리μΌμ΄μ μμ ν¨μ¨μ μΈ λΆλΆ νλ μ 볡μ , μ΅μ ν λ° κ³ κΈ λΉλμ€ μ²λ¦¬ κΈ°μ μ μν WebCodecs VideoFrame μμ λ³΅μ¬ κΈ°λ₯μ κ°λ₯μ±μ νμν©λλ€.
WebCodecs VideoFrame μμ 볡μ¬: λΆλΆ νλ μ 볡μ λ° μ΅μ ν
WebCodecs APIλ μΉ κΈ°λ° λ―Έλμ΄ μ²λ¦¬μ νλͺ
μ μΌμΌν€λ©°, λΉλμ€ λ° μ€λμ€ μΈμ½λ©κ³Ό λμ½λ©μ λν μ λ‘ μλ μ μ΄ κΈ°λ₯μ μ 곡ν©λλ€. νΉν κ°λ ₯ν κΈ°λ₯ μ€ νλλ VideoFrame κ°μ²΄μ λν μμ 볡μ¬λ₯Ό μννλ λ₯λ ₯μ
λλ€. μ’
μ’
λΆλΆ νλ μ 볡μ λΌκ³ λ λΆλ¦¬λ μ΄ κΈ°μ μ ν΅ν΄ κ°λ°μλ λΉλμ€ νλ μμ νΉμ μΉμ
μ ν¨μ¨μ μΌλ‘ μΆμΆνκ³ μ¬μ¬μ©νμ¬ λ€μν μ΅μ ν λ° κ³ κΈ λΉλμ€ μ²λ¦¬ μλ리μ€μ λ¬Έμ μ΄ μ μμ΅λλ€. μ΄ κΈμμλ μ μΈκ³ μΉ κ°λ°μλ€μ λμμΌλ‘ WebCodecs VideoFrame μμ 볡μ¬μ κΈ°λ₯, μμ© νλ‘κ·Έλ¨, μ΄μ λ° κ΅¬ν μΈλΆ μ¬νμ λν΄ μμΈν μμλ΄
λλ€.
VideoFrame μμ λ³΅μ¬ μ΄ν΄νκΈ°
ν΅μ¬μ μΌλ‘ VideoFrame μμ 볡μ¬λ μλ³Έ νλ μμ μΌλΆλ§ ν¬ν¨νλ μλ‘μ΄ VideoFrame κ°μ²΄λ₯Ό μμ±νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ μμ€ VideoFrameμμ 볡μ¬ν μ¬κ°ν μμ(μΌμͺ½ μλ¨ λͺ¨μ리 μ’νμ λλΉ/λμ΄λ‘ μ μ)μ μ§μ νμ¬ μνλ©λλ€. κ²°κ³Ό νλ μμ μ§μ λ μμμ 볡μ¬λ³Έμ΄λ©°, μΆκ° μ²λ¦¬λ μΈμ½λ©μ μν΄ λ
립μ μΌλ‘ μ¬μ©λ μ μμ΅λλ€.
μ΄ κ³Όμ μ λΉλμ€λ₯Ό λ¨μν ν¬κΈ° μ‘°μ νκ±°λ μλ₯΄λ κ²κ³Όλ λ€λ¦ λλ€. μλνλ©΄ λΉλμ€ νλ μ λ΄μ νΉμ μμλ₯Ό μ νμ μΌλ‘ 볡μ ν μ μκΈ° λλ¬Έμ λλ€. μλ₯Ό λ€μ΄, λ‘κ³ , νΉμ μμ§μ΄λ κ°μ²΄ λλ κ΄μ¬ μμμ 볡μ νμ¬ μΆκ° λΆμμ΄λ ν₯μμ μν μ μμ΅λλ€.
WebCodecs APIλ VideoFrame κ°μ²΄μ copyTo() λ©μλλ₯Ό μ 곡νλ©°, μ΄κ²μ΄ μμ 볡μ¬λ₯Ό μννλ μ£Όμ λ©μ»€λμ¦μ
λλ€. μ΄ λ©μλλ₯Ό μ¬μ©νλ©΄ λμ VideoFrame, 볡μ¬ν μμ€ μμ λ° λ³΅μ¬ νλ‘μΈμ€λ₯Ό μ μ΄νκΈ° μν λ€μν μ΅μ
μ μ§μ ν μ μμ΅λλ€.
μ¬μ© μ¬λ‘ λ° μμ© λΆμΌ
VideoFrame μμ 볡μ¬λ μΉ κΈ°λ° λ―Έλμ΄ μ²λ¦¬μμ μλ§μ μμ© λΆμΌλ₯Ό κ°μ§λλ€. λ€μμ λͺ κ°μ§ μ£Όμ μμμ λλ€:
1. λΉλμ€ μΈμ½λ© μ΅μ ν
λΉλμ€ νλ μμ νΉμ μμμ΄ λΉκ΅μ μ μ μ΄κ±°λ μμΈ‘ κ°λ₯ν λ³κ²½μ κ²ͺλ μλ리μ€μμ, μμ 볡μ¬λ λΉλμ€ μΈμ½λ©μ ν¬κ² μ΅μ ννλ λ° μ¬μ©λ μ μμ΅λλ€. νλ μμ λμ μΈ λΆλΆμ λΆλ¦¬νκ³ ν΄λΉ μμλ§ μΈμ½λ©ν¨μΌλ‘μ¨ μ 체 λΉνΈλ μ΄νΈλ₯Ό μ€μ΄κ³ μΈμ½λ© ν¨μ¨μ±μ ν₯μμν¬ μ μμ΅λλ€.
μμ: μ£Όμ μ½ν μΈ κ° νλ μ ν μ΄μ μ¬λΌμ΄λμΈ λΌμ΄λΈ μ€νΈλ¦¬λ° μ ν리μΌμ΄μ μ μκ°ν΄ 보μμμ€. λ°νμμ λΉλμ€ νΌλλ νλ μμ μμ λΆλΆλ§ μ°¨μ§ν μ μμ΅λλ€. λ°νμμ μμκ³Ό λ³κ²½λλ μ¬λΌμ΄λ μ½ν μΈ λ§ λ³΅μ¬νμ¬ μΈμ½λ©ν¨μΌλ‘μ¨ μ μ μΈ λ°°κ²½μ λ€μ μΈμ½λ©νλ κ²μ νΌν μ μμΌλ©°, κ²°κ³Όμ μΌλ‘ λ ν¨μ¨μ μΈ μ€νΈλ¦Όμ λ§λ€ μ μμ΅λλ€.
2. μκ° ν¨κ³Ό ꡬν
μμ 볡μ¬λ λ€μκ³Ό κ°μ λ€μν μκ° ν¨κ³Όλ₯Ό ꡬννλ λ° κ°λ ₯ν λκ΅¬κ° λ μ μμ΅λλ€:
- κ°μ²΄ μΆμ λ° λ³΅μ : λΉλμ€ λ΄μμ μμ§μ΄λ κ°μ²΄λ₯Ό μΆμ νκ³ νλ μ μ 체μ 볡μ νμ¬ ν₯λ―Έλ‘μ΄ μκ° ν¨κ³Όλ₯Ό λ§λλλ€.
- μμ κΈ°λ° νλ¦Ό λλ μ λͺ ν: μΌκ΅΄μ΄λ κ΄μ¬ μμκ³Ό κ°μ λΉλμ€μ νΉμ μμμλ§ νλ¦Ό λλ μ λͺ ν ν¨κ³Όλ₯Ό μ μ©ν©λλ€.
- PIP(Picture-in-Picture) ν¨κ³Ό μμ±: λ μμ λΉλμ€ νλ μ μμμ λ ν° νλ μμ 볡μ¬νμ¬ PIP λ μ΄μμμ μ½κ² ꡬνν©λλ€.
- νΉμ μμ κ°μ‘°: μμμ 볡μ¬νκ³ μμ νν°λ λ€λ₯Έ μκ°μ ν₯μμ μ μ©νμ¬ μ£Όμλ₯Ό λλλ€.
μμ: μ΄κ²μ μΈκΈ° μλ μμ© μ¬λ‘λ λΉλμ€μ ν μμμ 볡μ¬νκ³ νλνμ¬ ν΄λΉ μμ λ΄μ μ½ν μΈ λ₯Ό νλνλ 'λμ§νΈ μ€' ν¨κ³Όλ₯Ό λ§λλ κ²μ λλ€.
3. λ¨Έμ λ¬λμ μν λ°μ΄ν° μ¦κ°
λΉλμ€ λΆμκ³Ό κ΄λ ¨λ λ¨Έμ λ¬λ μμ© νλ‘κ·Έλ¨μμ μμ 볡μ¬λ λ°μ΄ν° μ¦κ° κΈ°μ λ‘ μ¬μ©λ μ μμ΅λλ€. λΉλμ€ νλ μ λ΄μ κ΄μ¬ μμμ 볡μ¬νκ³ μ‘°μν¨μΌλ‘μ¨ λͺ¨λΈμ λ λμ λ²μμ λ³νμ λ ΈμΆμν€κ³ μΌλ°ν λ₯λ ₯μ ν₯μμν€λ μλ‘μ΄ νλ ¨ μνμ λ§λ€ μ μμ΅λλ€.
μμ: λΉλμ€μμ κ°μ²΄λ₯Ό νμ§νλ λͺ¨λΈμ νλ ¨νλ κ²½μ°, ν΄λΉ κ°μ²΄λ₯Ό ν¬ν¨νλ νλ μμ λ€λ₯Έ μμμ 볡μ¬νμ¬ λ€μν λ°°κ²½κ³Ό μ‘°λͺ 쑰건μ κ°μ§ μ νλ μμ λΆμ¬λ£μμΌλ‘μ¨ ν¨κ³Όμ μΌλ‘ λ λ§μ νλ ¨ λ°μ΄ν°λ₯Ό μμ±ν μ μμ΅λλ€.
4. μ½ν μΈ μ‘°μ λ° κ²μ΄
μ£Όλ μλλ μλμ§λ§, μμ 볡μ¬λ μ½ν μΈ μ‘°μ μ μ¬μ©λ μ μμ΅λλ€. λ―Όκ°νκ±°λ λΆμ μ ν μ½ν μΈ λ₯Ό ν¬ν¨νλ νΉμ μμμ μλ³νκ³ , νλ μμ λ€λ₯Έ λΆλΆμ΄λ 미리 μ μλ λ§μ€ν¬μμ 볡μ¬ν ν리거λ κ²κ² μΉ ν μμμΌλ‘ λ체ν μ μμ΅λλ€. μ΄λ λ²μ λ° μ€λ¦¬μ μ§μΉ¨μ μ€μνλ©° μ± μκ° μκ³ μ€λ¦¬μ μΌλ‘ μνλμ΄μΌ ν©λλ€.
μμ: μΌλΆ μ§μμμλ λ²κ· μ€μλ₯Ό μν΄ νΉμ λ‘κ³ λ ν μ€νΈμ κ²μ΄μ΄ νμν μ μμ΅λλ€. μμ 볡μ¬λ μ΄λ¬ν μμλ€μ μλ μμ (redaction)μ κ°λ₯νκ² ν©λλ€.
5. λΉλμ€ νΈμ§ λ° ν©μ±
μμ 볡μ¬λ μΉ κΈ°λ° λΉλμ€ νΈμ§ λꡬμ ν΅ν©λμ΄ κ³ κΈ ν©μ± κΈ°λ₯μ μ 곡ν μ μμ΅λλ€. μ¬μ©μλ λ€λ₯Έ λΉλμ€ νλ μμμ νΉμ μμμ μ ννκ³ λ³΅μ¬νμ¬ λ³΅μ‘ν μ₯λ©΄κ³Ό μκ° ν¨κ³Όλ₯Ό λ§λ€ μ μμ΅λλ€.
μμ: λΆν νλ©΄ ν¨κ³Όλ₯Ό λ§λ€κ±°λ λ€λ₯Έ λΉλμ€ μμλ₯Ό μλ‘ κ²Ήμ³ μλ κ²μ΄ λΉλμ€ νλ μ μμμ 볡μ¬νκ³ μ‘°μνλ κΈ°λ₯ λλΆμ ν¨μ¬ μ¬μμ§λλ€.
WebCodecsλ‘ VideoFrame μμ λ³΅μ¬ κ΅¬ννκΈ°
VideoFrame μμ 볡μ¬λ₯Ό ꡬννλ €λ©΄ VideoFrame μΈν°νμ΄μ€μ copyTo() λ©μλλ₯Ό μ¬μ©ν΄μΌ ν©λλ€. λ€μμ κ·Έ κ³Όμ μ λν μ€λͺ
μ
λλ€:
1. VideoFrame μ»κΈ°
λ¨Όμ , VideoFrame κ°μ²΄λ₯Ό μ»μ΄μΌ ν©λλ€. μ΄λ λ€μκ³Ό κ°μ λ€μν λ°©λ²μ ν΅ν΄ λ¬μ±ν μ μμ΅λλ€:
- λΉλμ€ μ€νΈλ¦Ό λμ½λ©:
VideoDecoderAPIλ₯Ό μ¬μ©νμ¬ μ€νΈλ¦Όμμ λΉλμ€ νλ μμ λμ½λ©ν©λλ€. - μΉ΄λ©λΌμμ λΉλμ€ μΊ‘μ²:
getUserMedia()APIλ₯Ό μ¬μ©νμ¬ μΉ΄λ©λΌμμ λΉλμ€λ₯Ό μΊ‘μ²νκ³ μΊ‘μ²λ νλ μμμVideoFrameκ°μ²΄λ₯Ό μμ±ν©λλ€. - ImageBitmapμμ VideoFrame μμ±:
ImageBitmapμμ€μ ν¨κ»VideoFrame()μμ±μλ₯Ό μ¬μ©ν©λλ€.
2. λμ VideoFrame μμ±νκΈ°
λ€μμΌλ‘, 볡μ¬λ μμμ λ΄μ λμ VideoFrame κ°μ²΄λ₯Ό μμ±ν΄μΌ ν©λλ€. λμ νλ μμ ν¬κΈ°μ νμμ 볡μ¬νλ €λ μμμ μ ν©ν΄μΌ ν©λλ€. νμμ μμ€ VideoFrameκ³Ό νΈνλμ΄μΌ ν©λλ€. μ μ¬μ μΈ νμ λ³ν λ¬Έμ λ₯Ό νΌνκΈ° μν΄ μμ€μ λμΌν νμμ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
```javascript const sourceFrame = // ... obtain a VideoFrame object const regionWidth = 100; const regionHeight = 50; const destinationFrame = new VideoFrame(sourceFrame, { codedWidth: regionWidth, codedHeight: regionHeight, width: regionWidth, height: regionHeight, }); ```
3. copyTo() λ©μλ μ¬μ©νκΈ°
μ΄μ copyTo() λ©μλλ₯Ό μ¬μ©νμ¬ μμ€ νλ μμμ λμ νλ μμΌλ‘ μμμ 볡μ¬ν μ μμ΅λλ€. copyTo() λ©μλλ λμ VideoFrameμ μΈμλ‘ λ°κ³ , μμ€ μ¬κ°νκ³Ό κΈ°ν λ³΅μ¬ λ§€κ°λ³μλ₯Ό μ μνλ μ νμ μ΅μ
κ°μ²΄λ₯Ό λ°μ΅λλ€.
```javascript const sourceFrame = // ... VideoFrame κ°μ²΄ μ»κΈ° const destinationFrame = // ... λμ VideoFrame κ°μ²΄ μμ±νκΈ° const copyOptions = { x: 50, // μμ€ μμμ μΌμͺ½ μλ¨ λͺ¨μ리μ X μ’ν y: 25, // μμ€ μμμ μΌμͺ½ μλ¨ λͺ¨μ리μ Y μ’ν width: 100, // μμ€ μμμ λλΉ height: 50, // μμ€ μμμ λμ΄ }; sourceFrame.copyTo(destinationFrame, copyOptions); ```
4. 볡μ¬λ μμ μ²λ¦¬νκΈ°
copyTo() λ©μλκ° μλ£λλ©΄, destinationFrameμ μμ€ νλ μμμ 볡μ¬λ μμμ ν¬ν¨νκ² λ©λλ€. κ·Έ ν μ΄ νλ μμ μΈμ½λ©νκ±°λ, μΊλ²μ€μ νμνκ±°λ, λ¨Έμ λ¬λ λͺ¨λΈμ μ
λ ₯μΌλ‘ μ¬μ©νλ λ± μΆκ°λ‘ μ²λ¦¬ν μ μμ΅λλ€.
μμ: κ°λ¨ν μμ 볡μ¬
λ€μμ κΈ°λ³Έ μμ 볡μ¬λ₯Ό μμ°νλ μ 체 μμμ λλ€:
```javascript async function copyRegion(sourceFrame, x, y, width, height) { const destinationFrame = new VideoFrame(sourceFrame, { codedWidth: width, codedHeight: height, width: width, height: height, }); await sourceFrame.copyTo(destinationFrame, { x: x, y: y, width: width, height: height, }); return destinationFrame; } // μ¬μ© μμ: async function processVideo(videoElement) { const videoTrack = videoElement.captureStream().getVideoTracks()[0]; const imageCapture = new ImageCapture(videoTrack); // λΉλμ€μμ λ¨μΌ νλ μ κ°μ Έμ€κΈ° const bitmap = await imageCapture.grabFrame(); const sourceFrame = new VideoFrame(bitmap); bitmap.close(); // μμ€ νλ μμμ μμ 볡μ¬νκΈ° const copiedFrame = await copyRegion(sourceFrame, 100, 50, 200, 100); // 볡μ¬λ νλ μμ μΊλ²μ€μ νμνκΈ° const canvas = document.getElementById('outputCanvas'); canvas.width = copiedFrame.width; canvas.height = copiedFrame.height; const ctx = canvas.getContext('2d'); ctx.drawImage(copiedFrame, 0, 0); sourceFrame.close(); copiedFrame.close(); } ```
μ±λ₯ κ³ λ €μ¬ν
VideoFrame μμ 볡μ¬λ μλΉν μ΄μ μ μ 곡νμ§λ§, νΉν μ€μκ° μ ν리μΌμ΄μ μμλ μ±λ₯μ λ―ΈμΉλ μν₯μ κ³ λ €νλ κ²μ΄ μ€μν©λλ€:
- λ©λͺ¨λ¦¬ ν λΉ: μλ‘μ΄
VideoFrameκ°μ²΄λ₯Ό μμ±νλ κ²μ λ©λͺ¨λ¦¬ ν λΉμ ν¬ν¨νλ©°, μ΄λ μμ£Ό μνλ κ²½μ° μ±λ₯ λ³λͺ© νμμ μΌμΌν¬ μ μμ΅λλ€. λ©λͺ¨λ¦¬ μ€λ²ν€λλ₯Ό μ΅μννκΈ° μν΄ κ°λ₯ν λλ§λ€VideoFrameκ°μ²΄λ₯Ό μ¬μ¬μ©νλ κ²μ κ³ λ €νμμμ€. - λ³΅μ¬ μ€λ²ν€λ:
copyTo()λ©μλ μ체λ ν½μ λ°μ΄ν°λ₯Ό 볡μ¬νλ μμ μ ν¬ν¨νλ©°, νΉν ν° μμμ κ²½μ° κ³μ° λΉμ©μ΄ λ§μ΄ λ€ μ μμ΅λλ€. 볡μ¬λλ λ°μ΄ν°μ μμ μ΅μννλλ‘ μ½λλ₯Ό μ΅μ ννμμμ€. - νμ λ³ν: μμ€μ λμ
VideoFrameκ°μ²΄μ νμμ΄ λ€λ₯Έ κ²½μ°,copyTo()λ©μλλ νμ λ³νμ μνν΄μΌ ν μ μμΌλ©°, μ΄λ μλΉν μ€λ²ν€λλ₯Ό μΆκ°ν μ μμ΅λλ€. νΈνλλ νμμ μ¬μ©νλ©΄ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. - λΉλκΈ° μμ
:
copyTo()μμ μ νΉν νλμ¨μ΄ κ°μμ΄ μ¬μ©λ λ μ’ μ’ λΉλκΈ°μ μ λλ€. λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ μλλ‘ μμ μ λΉλκΈ°μ νΉμ±μ μ¬λ°λ₯΄κ² μ²λ¦¬νμμμ€. - νλμ¨μ΄ κ°μ: WebCodecsλ κ°λ₯ν λλ§λ€ νλμ¨μ΄ κ°μμ νμ©ν©λλ€. μ΅μ μ μ±λ₯μ μν΄ μ¬μ©μμ λΈλΌμ°μ μμ νλμ¨μ΄ κ°μμ΄ νμ±νλμ΄ μλμ§ νμΈνμμμ€. λΈλΌμ°μ μ€μ λ° λλΌμ΄λ² νΈνμ±μ νμΈνμμμ€.
μ΅μ νλ₯Ό μν λͺ¨λ² μ¬λ‘
VideoFrame μμ 볡μ¬μ μ±λ₯κ³Ό ν¨μ¨μ±μ κ·Ήλννλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- VideoFrame κ°μ²΄ μ¬μ¬μ©: κ° λ³΅μ¬ μμ
λ§λ€ μλ‘μ΄
VideoFrameκ°μ²΄λ₯Ό μμ±νλ λμ , κ°λ₯ν λλ§λ€ κΈ°μ‘΄ κ°μ²΄λ₯Ό μ¬μ¬μ©νμμμ€. μ΄λ λ©λͺ¨λ¦¬ ν λΉ μ€λ²ν€λλ₯Ό μ€μ λλ€. - λ³΅μ¬ μμ μ΅μν: λΉλμ€ νλ μμ νμν μμλ§ λ³΅μ¬νμμμ€. λΆνμνκ² ν° μμμ 볡μ¬νλ κ²μ νΌνμμμ€. μ΄λ λ³΅μ¬ μ€λ²ν€λλ₯Ό μ¦κ°μν΅λλ€.
- νΈνλλ νμ μ¬μ©: νμ λ³νμ νΌνκΈ° μν΄ μμ€μ λμ
VideoFrameκ°μ²΄κ° νΈνλλ νμμ κ°μ§κ³ μλμ§ νμΈνμμμ€. λ³νμ΄ λΆκ°νΌν κ²½μ°, λͺ μμ μΌλ‘ μννκ³ κ²°κ³Όλ₯Ό μ¬μ¬μ©νκΈ° μν΄ μΊμνμμμ€. - νλμ¨μ΄ κ°μ νμ©: μ¬μ©μμ λΈλΌμ°μ μμ νλμ¨μ΄ κ°μμ΄ νμ±νλμ΄ μλμ§ νμΈνμμμ€.
- λΉλκΈ° μμ
μ΅μ ν: λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ μλλ‘
copyTo()λ©μλμ λΉλκΈ°μ νΉμ±μ μ¬λ°λ₯΄κ² μ²λ¦¬νμμμ€.async/awaitλλ Promiseλ₯Ό μ¬μ©νμ¬ λΉλκΈ° μμ μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νμμμ€. - μ½λ νλ‘νμΌλ§: λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό νλ‘νμΌλ§νκ³ μ±λ₯ λ³λͺ© νμμ μλ³νμμμ€. λ©λͺ¨λ¦¬ μ¬μ©λ, CPU μ¬μ©λ₯ λ° GPU νλμ μΈμ¬ν μ£Όμλ₯Ό κΈ°μΈμ΄μμμ€.
- WebAssembly κ³ λ €: κ³μ° μ§μ½μ μΈ μμ μ κ²½μ°, λ€μ΄ν°λΈμ κ°κΉμ΄ μλλ‘ μ€νν μ μλ μ¬μ©μ μ μ μ΄λ―Έμ§ μ²λ¦¬ μκ³ λ¦¬μ¦μ ꡬννκΈ° μν΄ WebAssembly μ¬μ©μ κ³ λ €νμμμ€.
보μ κ³ λ €μ¬ν
WebCodecsλ κ°λ ₯ν κΈ°λ₯μ μ 곡νμ§λ§, μ μ¬μ μΈ λ³΄μ μνμ μΈμ§νλ κ²μ΄ μ€μν©λλ€:
- λ°μ΄ν° μ μΆ: μμ 볡μ¬λ₯Ό ν΅ν΄ λ―Όκ°ν λ°μ΄ν°λ₯Ό λΆμ£Όμνκ² λ ΈμΆνμ§ μλλ‘ νμμμ€. κ°μΈ μλ³ μ 보(PII)λ κΈ°ν κΈ°λ° λ°μ΄ν°λ₯Ό ν¬ν¨ν μ μλ μμμ 볡μ¬ν λ μ£Όμνμμμ€.
- μ μ± μ½λ μ£Όμ : μ λ’°ν μ μλ μμ€μ λΉλμ€λ₯Ό μ²λ¦¬ν λ μ μ¬μ μΈ μ½λ μ£Όμ μ·¨μ½μ μ μ£Όμνμμμ€. λΉλμ€ μ€νΈλ¦Όμ μ μ± μ½λκ° μ½μ λλ κ²μ λ°©μ§νκΈ° μν΄ μ¬μ©μκ° μ 곡ν λͺ¨λ μ λ ₯μ μ΄κ· (sanitize) μ²λ¦¬νμμμ€.
- μλΉμ€ κ±°λΆ(DoS) 곡격: μ μμ μΈ νμμκ° WebCodecs ꡬνμ μ·¨μ½μ μ μ μ©νμ¬ μλΉμ€ κ±°λΆ κ³΅κ²©μ μμν μ μμ΅λλ€. μ΄λ¬ν μνμ μννκΈ° μν΄ λΈλΌμ°μ μ μ΄μ 체μ λ₯Ό μ΅μ 보μ ν¨μΉλ‘ μ λ°μ΄νΈνμμμ€.
- κ΅μ°¨ μΆμ²(Cross-Origin) λ¬Έμ : λ€λ₯Έ λλ©μΈμμ λΉλμ€ μ€νΈλ¦Όμ μ κ·Όν λ κ΅μ°¨ μΆμ² μ νμ μ μνμμμ€. νμν CORS ν€λκ° κ΅¬μ±λμ΄ κ΅μ°¨ μΆμ² μ κ·Όμ νμ©νλμ§ νμΈνμμμ€.
λΈλΌμ°μ νΈνμ±
WebCodecsλ λΉκ΅μ μλ‘μ΄ APIμ΄λ―λ‘ λΈλΌμ°μ νΈνμ±μ΄ λ€λ₯Ό μ μμ΅λλ€. μ΅μ λΈλΌμ°μ νΈνμ± μ°¨νΈλ₯Ό νμΈνμ¬ λμ λΈλΌμ°μ μμ APIκ° μ§μλλμ§ νμΈνμμμ€. 2024λ νλ° κΈ°μ€μΌλ‘ Chrome, Firefox, Safariμ κ°μ μ£Όμ λΈλΌμ°μ λ€μ λ€μν μμ€μ μ§μμ μ 곡ν©λλ€. νμ λ€λ₯Έ λΈλΌμ°μ μμ μ½λλ₯Ό ν μ€νΈνμ¬ μΌκ΄λ λμμ 보μ₯νμμμ€.
κ²°λ‘
WebCodecs VideoFrame μμ 볡μ¬λ ν¨μ¨μ μΈ λΆλΆ νλ μ 볡μ λ₯Ό κ°λ₯νκ² νκ³ μΉ μ ν리μΌμ΄μ
μμ λΉλμ€ μ²λ¦¬ λ° μ΅μ νλ₯Ό μν κ΄λ²μν κ°λ₯μ±μ μ΄μ΄μ£Όλ κ°λ ₯ν κΈ°λ₯μ
λλ€. κ°λ°μλ copyTo() λ©μλμ κΈ°λ₯μ μ΄ν΄νκ³ μ±λ₯ λ° λ³΄μ μν₯μ κ³ λ €ν¨μΌλ‘μ¨ μ΄ κΈ°λ₯μ νμ©νμ¬ νμ μ μ΄κ³ μ±λ₯μ΄ λ°μ΄λ μΉ κΈ°λ° λ―Έλμ΄ κ²½νμ λ§λ€ μ μμ΅λλ€. WebCodecsκ° μ±μνκ³ λ λμ λΈλΌμ°μ μ§μμ μ»κ² λ¨μ λ°λΌ, λΉλμ€ λ° κΈ°ν λ―Έλμ΄ νμμΌλ‘ μμ
νλ μΉ κ°λ°μμκ² νμμ μΈ λκ΅¬κ° λ κ²μ
λλ€. μ¬μ© μ¬λ‘ λ° μ΅μ ν μ λ΅μ λν μ§μμ μΈ νꡬλ μ΄ κΈ°μ μ μ μ¬λ ₯μ μ΅λν λ°ννλ λ° μ€μν κ²μ
λλ€. νμ WebCodecs APIμ μ΅μ κ°λ° λν₯κ³Ό κΈλ‘λ² μ»¨ν
μ€νΈμμμ μ¬μ©μ λν λͺ¨λ² μ¬λ‘λ₯Ό μ΅μ μνλ‘ μ μ§νμμμ€.