WebCodecsã䜿çšããŠãããŸããŸãªãã©ãããã©ãŒã ãããã€ã¹ã®Webã¢ããªã±ãŒã·ã§ã³ã§æé©ãªããã©ãŒãã³ã¹ãšå¹çãå®çŸããããã®ãããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãããã¡ã€ã«ã®èšå®ã«é¢ããå æ¬çãªã¬ã€ãã
WebCodecsãšã³ã³ãŒããŒãããã¡ã€ã«ïŒããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°èšå®ã®ãã¹ã¿ãŒ
WebCodecs APIã¯ããŠã§ãéçºè ããã©ãŠã¶å ã§ãªãŒãã£ãªããã³ãããªã³ãŒããã¯ã«çŽæ¥ã¢ã¯ã»ã¹ããŠæäœã§ãã匷åãªã€ã³ã¿ãŒãã§ãŒã¹ã§ããããã«ãããã¡ãã£ã¢åŠçãæ°ããªã¬ãã«ã§å¶åŸ¡ã§ããããã«ãªãããªã¢ã«ã¿ã€ã ãããªç·šéãäœé å»¶ã¹ããªãŒãã³ã°ãé«åºŠãªã¡ãã£ã¢æäœãªã©ããŠã§ãã¢ããªã±ãŒã·ã§ã³å ã§çŽæ¥è¡ãããšãã§ããŸããWebCodecsã广çã«æŽ»çšããããã®éèŠãªåŽé¢ã¯ãç¹ã«ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãå©çšããéã«ããšã³ã³ãŒããŒãããã¡ã€ã«ãçè§£ããæ§æããããšã§ãã
ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãšã¯ïŒ
ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã¯ããããªãšã³ã³ãŒãã£ã³ã°ãšããèšç®è² è·ã®é«ãã¿ã¹ã¯ãCPUããå°çšããŒããŠã§ã¢ïŒéåžžã¯GPUãŸãã¯å°çšãããªãšã³ã³ãŒããŒãããïŒã«ãªãããŒãããŸããããã«ã¯ãããã€ãã®éèŠãªå©ç¹ããããŸãã
- CPUè² è·ã®è»œæžïŒCPUãè§£æŸããããšã§ãä»ã®ã¿ã¹ã¯ãã¹ã ãŒãºã«å®è¡ã§ããããã«ãªããã¢ããªã±ãŒã·ã§ã³å šäœã®å¿çæ§ãåäžããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒããŒããŠã§ã¢ãšã³ã³ãŒããŒã¯ãããªåŠçã«æé©åãããŠãããããé«éãªãšã³ã³ãŒãã£ã³ã°é床ãå®çŸããŸãã
- æ¶è²»é»åã®åæžïŒå€ãã®å ŽåãããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã¯ãœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ããããšãã«ã®ãŒå¹çãé«ããããããªãŒé§åã®ããã€ã¹ã«ãšã£ãŠéèŠã§ãã
ãã ããããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãæå€§éã«æŽ»çšããã«ã¯ãç¹å®ã®ããŒãºãšåºç€ãšãªãããŒããŠã§ã¢ã®æ©èœã«åãããŠãšã³ã³ãŒããŒãããã¡ã€ã«ãæ éã«æ§æããå¿ èŠããããŸãããã®ã¬ã€ãã§ã¯ãäž»èŠãªèæ ®äºé ãšæ§æãªãã·ã§ã³ã«ã€ããŠèª¬æããŸãã
ãšã³ã³ãŒããŒãããã¡ã€ã«ã®çè§£
ãšã³ã³ãŒããŒãããã¡ã€ã«ã¯ããããªã¹ããªãŒã ã®ãšã³ã³ãŒãæ¹æ³ãå®çŸ©ããèšå®ã®éåã§ãããããã®èšå®ã«ã¯ä»¥äžãå«ãŸããŸãã
- ã³ãŒããã¯ïŒäœ¿çšããããããªå§çž®ã¢ã«ãŽãªãºã ïŒäŸïŒH.264ãVP9ãAV1ïŒã
- è§£å床ïŒãããªãã¬ãŒã ã®å¹ ãšé«ãã
- ãã¬ãŒã ã¬ãŒãïŒ1ç§ãããã®ãã¬ãŒã æ°ïŒFPSïŒã
- ãããã¬ãŒãïŒåç§ã®ãããªã衚ãããã«äœ¿çšãããããŒã¿ã®éïŒããã/ç§ãŸãã¯kbps/Mbpsã§æž¬å®ïŒã
- ãããã¡ã€ã«ãšã¬ãã«ïŒäœ¿çšãããã³ãŒããã¯æ©èœã®å¶çŽã§ãããäºææ§ãšããã©ãŒãã³ã¹ã«åœ±é¿ããŸãã
- ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®åªå é äœïŒåªå ããããšã³ã³ãŒãã£ã³ã°æ¹æ³ã«é¢ãããã©ãŠã¶ãžã®ãã³ãã
- ã¬ã€ãã³ã·ã¢ãŒãïŒã©ã€ãã¹ããªãŒãã³ã°ãªã©ã®ã¢ããªã±ãŒã·ã§ã³ã®äœã¬ã€ãã³ã·ã«ã¹ããªãŒã ãæé©åããããã®æ§æã
WebCodecsã䜿çšããå Žåããããã®èšå®ãVideoEncoderConfigãªããžã§ã¯ãå
ã§å®çŸ©ãããããVideoEncoderã®configure()ã¡ãœããã«æž¡ããŸãã
ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã®äž»èŠãªæ§æãªãã·ã§ã³
ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã䜿çšããããã©ãããããã³ãã®ããã©ãŒãã³ã¹ã«çŽæ¥åœ±é¿ããããã€ãã®æ§æãªãã·ã§ã³ããããŸãã
1. ã³ãŒããã¯ã®éžæ
ã³ãŒããã¯ã®éžæã¯ããšã³ã³ãŒãã£ã³ã°ãããã¡ã€ã«ã®åºç€ãšãªããŸããWebCodecsã¯ããŸããŸãªã³ãŒããã¯ããµããŒãããŠããŸãããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®å¯çšæ§ã¯ãã³ãŒããã¯ãšããã€ã¹ã®æ©èœã«äŸåããŸããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ããµããŒãããäžè¬çãªã³ãŒããã¯ã«ã¯ã以äžãå«ãŸããŸãã
- H.264ïŒAVCïŒïŒæãåºããµããŒããããŠããã³ãŒããã¯ã§ãããã»ãšãã©ã®ããã€ã¹ã§åªããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãå®çŸããŠããŸããå¹ åºãäºææ§ã確ä¿ããã«ã¯å®å šçã§ãã
- VP9ïŒGoogleãéçºãããã€ã€ãªãã£ããªãŒã®ã³ãŒããã¯ã§ãããH.264ãããåªããå§çž®å¹çãæäŸããŸããããŒããŠã§ã¢ãµããŒãã¯ãç¹ã«æ°ããããã€ã¹ã§å¢å ããŠããŸãã
- AV1ïŒããäžã€ã®ãã€ã€ãªãã£ããªãŒã®ã³ãŒããã¯ã§ãããVP9ãããããã«åªããå§çž®ãæäŸããŸããããŒããŠã§ã¢ãµããŒãã¯ãŸã é²åäžã§ãããå¢ããå¢ããŠããŸãã
- HEVCïŒH.265ïŒïŒé«å§çž®çã§ç¥ãããŠããŸããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®ãµããŒãã¯ããã€ã¹ã«äŸåããå€ãã®å Žåãã©ã€ã»ã³ã¹ãå¿ èŠã§ãã
äŸïŒH.264æ§æïŒïŒ
const config = {
codec: 'avc1.42E01E', // H.264 Baseline Profile Level 3.0
width: 1280,
height: 720,
framerate: 30,
bitrate: 2000000, // 2 Mbps
hardwareAcceleration: 'prefer-hardware',
};
éèŠïŒããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãä¿èšŒããã«ã¯ãããŒããŠã§ã¢ãå
·äœçã«ãµããŒãããã³ãŒããã¯ã䜿çšããå¿
èŠããããŸããããŒããŠã§ã¢ãµããŒããå©çšã§ããªãå Žåããã©ãŠã¶ã¯ãœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã«ãã©ãŒã«ããã¯ãããããããã©ãŒãã³ã¹äžã®å©ç¹ãç¡å¹ã«ãªãå¯èœæ§ããããŸããã³ãŒããã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãããŠãããã©ããã倿ããããã«navigator.mediaCapabilities APIã䜿çšããæ©èœæ€åºã¯éèŠã§ããé©åãªã³ãŒããã¯æåå圢åŒã«ã€ããŠã¯ããã©ãŠã¶ã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
2. ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®åªå é äœ
VideoEncoderConfigã®hardwareAccelerationãªãã·ã§ã³ã䜿çšãããšãããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãŸãã¯ãœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã«å¯Ÿããåªå
é äœã衚çŸã§ããŸããå¯èœãªå€ã¯æ¬¡ã®ãšããã§ãã
"prefer-hardware"ïŒïŒæšå¥šïŒããã¯ãå©çšå¯èœãªå Žåã¯ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãåªå ããããã«ãã©ãŠã¶ã«æç€ºããŸããæå®ãããã³ãŒããã¯ãŸãã¯æ§æã§ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ããµããŒããããŠããªãå Žåããã©ãŠã¶ã¯ãœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã«ãã©ãŒã«ããã¯ããŸãã"prefer-software"ïŒããã¯ããœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãåªå ããããã«ãã©ãŠã¶ã«æç€ºããŸããããã¯ããããã°ãããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã®åé¡ãçãããå Žåã«åœ¹ç«ã€å¯èœæ§ããããŸãã"no-preference"ïŒãã©ãŠã¶ã¯ãç¬èªã®å éšããžãã¯ã«åºã¥ããŠãããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãŸãã¯ãœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã䜿çšããããæ±ºå®ããŸãã
"prefer-hardware"ã䜿çšããããšã¯ãäžè¬çã«ããã©ãŒãã³ã¹ã«æé©ãªæ¹æ³ã§ãããäºææ§ãšå®å®æ§ã確ä¿ããããã«ãããŸããŸãªããã€ã¹ã§åžžã«ãã¹ãããå¿
èŠããããŸãã
3. ãããã¡ã€ã«ãšã¬ãã«
H.264ãVP9ãªã©ã®ã³ãŒããã¯ã¯ã䜿çšãããæ©èœãšãµããŒããããæå€§ãããã¬ãŒãããã³è§£å床ã«é¢ããå¶çŽãæå®ããããŸããŸãªãããã¡ã€ã«ãšã¬ãã«ãå®çŸ©ããŸããé©åãªãããã¡ã€ã«ãšã¬ãã«ãéžæããããšã¯ãããŒããŠã§ã¢äºææ§ã«ãšã£ãŠéèŠã§ãã
H.264ãããã¡ã€ã«ïŒ
- Baseline ProfileïŒæãã·ã³ãã«ãªãããã¡ã€ã«ã§ãããããŒããŠã§ã¢ãšã³ã³ãŒããŒã§åºããµããŒããããŠããŸãã
- Main ProfileïŒBaselineãããåªããå§çž®å¹çãåãããããè€éãªãããã¡ã€ã«ã§ãã
- High ProfileïŒæãè€éãªãããã¡ã€ã«ã§ãããæé«ã®å§çž®å¹çãæäŸããŸãããããå€ãã®åŠçèœåãå¿ èŠã§ãã
H.264ã¬ãã«ïŒ
ã¬ãã«ã¯ããµããŒããããæå€§ãããã¬ãŒããè§£å床ãããã³ãã¬ãŒã ã¬ãŒããå®çŸ©ããŸããäžè¬çã«ãããé«ãã¬ãã«ã§ã¯ãããå€ãã®åŠçèœåãå¿ èŠã§ããã¬ãã«ã¯1ãã5.2ãŸã§ãããŸããããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã®å Žåãç¹ã«å€ãããã€ã¹ã§ã¯ãããäœããããã¡ã€ã«ãšã¬ãã«ãéžæãããšãäºææ§ãšããã©ãŒãã³ã¹ãåäžããå¯èœæ§ããããŸããã¿ãŒã²ããã³ãŒããã¯ã§ç¹å®ã®ã¬ãã«ããµããŒããããŠãããã©ããã倿ããã«ã¯ãããŒããŠã§ã¢ã®æ©èœããã§ãã¯ããŠãã ããã
äŸïŒH.264ã®ãããã¡ã€ã«ãšã¬ãã«ã®æå®ïŒïŒ
const config = {
codec: 'avc1.42E01E', // H.264 Baseline Profile Level 3.0. 42E0 = Baseline Profile, 1E = Level 3.0.
width: 1280,
height: 720,
framerate: 30,
bitrate: 2000000,
hardwareAcceleration: 'prefer-hardware',
};
VP9ãããã¡ã€ã«ïŒ
VP9ã¯ãããããè€éããšãããã¬ãŒãã®ãµããŒããå¢å ãã0ã1ã2ãããã³3ã®ãããã¡ã€ã«ããµããŒãããŠããŸãããããã¡ã€ã«0ã¯ãããŒããŠã§ã¢ã§æãäžè¬çã«å®è£ ãããŠããŸãã
4. è§£å床ãšãã¬ãŒã ã¬ãŒã
ããé«ãè§£å床ãšãã¬ãŒã ã¬ãŒãã¯ãããå€ãã®åŠçèœåãå¿ èŠãšããŸããããŒããŠã§ã¢ãšã³ã³ãŒããŒã¯é«è§£å床ãããªãåŠçã§ããŸãããããŒããŠã§ã¢ã®èœåãè¶ ãããšãããã©ãŒãã³ã¹ãäœäžãããããœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã«ãã©ãŒã«ããã¯ãããããå¯èœæ§ããããŸããè§£å床ãšãã¬ãŒã ã¬ãŒããéžæãããšãã¯ãã¿ãŒã²ããããã€ã¹ã®æ©èœãèæ ®ããŠãã ããããŠã§ããããªã®äžè¬çãªè§£å床ã«ã¯ä»¥äžãå«ãŸããŸãã
- 360pïŒ640x360ïŒïŒäœåž¯åå¹ ã®æ¥ç¶ãšå°åã®ç»é¢ã«é©ããŠããŸãã
- 480pïŒ854x480ïŒïŒå質ãšåž¯åå¹ ã®é©åãªåŠ¥åç¹ã§ãã
- 720pïŒ1280x720ïŒïŒé«ç²Ÿçްãããªã§ããããã倧ããªç»é¢ã«é©ããŠããŸãã
- 1080pïŒ1920x1080ïŒïŒãã«é«ç²Ÿçްãããªã§ãããããå€ãã®åž¯åå¹ ãšåŠçèœåãå¿ èŠã§ãã
- 4KïŒ3840x2160ïŒïŒè¶ é«ç²Ÿçްãããªã§ãããããªãã®åž¯åå¹ ãšåŠçèœåãå¿ èŠã§ãã
äžè¬çãªãã¬ãŒã ã¬ãŒãã«ã¯ã24ã25ã30ãããã³60 FPSãå«ãŸããŸãããã¬ãŒã ã¬ãŒããé«ãã»ã©ã¢ãŒã·ã§ã³ãã¹ã ãŒãºã«ãªããŸãããããå€ãã®åŠçèœåãå¿ èŠã§ãããããªã³ã³ãã³ãã«é©ãããã¬ãŒã ã¬ãŒããéžæããããšãéèŠã§ããããšãã°ãéçãªãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ã60 FPSã¯å¿ èŠãªãå ŽåããããŸãã
5. ãããã¬ãŒã
ãããã¬ãŒãã¯ãåç§ã®ãããªã衚ãããã«äœ¿çšãããããŒã¿ã®éãæ±ºå®ããŸãããããã¬ãŒããé«ãã»ã©ãããªå質ã¯åäžããŸãããããå€ãã®åž¯åå¹ ãå¿ èŠã«ãªããŸããé©åãªãããã¬ãŒããéžæããããšã¯ãå質ãšåž¯åå¹ æ¶è²»ã®éã®ãã¬ãŒããªãã§ããåºå®ãããã¬ãŒãïŒCBRïŒãŸãã¯å¯å€ãããã¬ãŒãïŒVBRïŒãšã³ã³ãŒãã£ã³ã°ã䜿çšã§ããŸããCBRã¯ãããªå šäœã§äžè²«ãããããã¬ãŒããç¶æããŸãããVBRã¯ã·ãŒã³ã®è€éãã«åºã¥ããŠãããã¬ãŒãã調æŽããŸããVBRã¯ãå€ãã®å Žåãããäœãå¹³åãããã¬ãŒãã§ããè¯ãå質ãéæã§ããŸãããããå€ãã®åŠçèœåãå¿ èŠã«ãªãå ŽåããããŸããç¹å®ã®ã¿ãŒã²ããåè³ªã«æé©ãªãããã¬ãŒããèŠã€ããã«ã¯ãå®éšã䜿çšããŸãã
çæ³çãªãããã¬ãŒãã¯ãè§£å床ããã¬ãŒã ã¬ãŒããããã³äœ¿çšããã³ãŒããã¯ã«ãã£ãŠç°ãªããŸããäžè¬çãªã¬ã€ãã©ã€ã³ãšããŠïŒ
- 360pïŒ500 kbps - 1 Mbps
- 480pïŒ1 Mbps - 2 Mbps
- 720pïŒ2 Mbps - 5 Mbps
- 1080pïŒ5 Mbps - 10 Mbps
- 4KïŒ15 Mbps - 30 Mbps以äž
6. ã¬ã€ãã³ã·ã¢ãŒã
ã©ã€ãã¹ããªãŒãã³ã°ããªã¢ã«ã¿ã€ã éä¿¡ãªã©ãäœã¬ã€ãã³ã·ãå¿
èŠãšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãlatencyModeãªãã·ã§ã³ã"realtime"ã«èšå®ã§ããŸããããã«ããããšã³ã³ãŒããŒã¯å§çž®å¹çãããäœã¬ã€ãã³ã·ãåªå
ããããã«æç€ºãããŸãããã®ã¢ãŒããæå¹ã«ãããšãã¬ã€ãã³ã·ãå¢ããç¹å®ã®ãšã³ã³ãŒãã£ã³ã°æé©åãç¡å¹ã«ãªãå ŽåããããŸãããŸãã䜿çšããããšã³ã³ãŒãã£ã³ã°ãããã¡ã€ã«ã«ã圱é¿ãäžããå¯èœæ§ãããããã培åºçã«ãã¹ãããããšãéèŠã§ããã¬ã€ãã³ã·ã¢ãŒãã¯ãGOPïŒGroup of PicturesïŒãµã€ãºãBãã¬ãŒã ã®äœ¿çšãªã©ããã©ã¡ãŒã¿ãŒã«åœ±é¿ãäžããŸããããé«ãå§çž®çãåŸãã«ã¯ãããããå質ãã«èšå®ããŸãã
const config = {
codec: 'avc1.42E01E',
width: 640,
height: 480,
framerate: 30,
bitrate: 1000000,
hardwareAcceleration: 'prefer-hardware',
latencyMode: 'realtime'
};
ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã®åé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã§åé¡ãçºçããŠããå Žåã¯ã次ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°æé ãæ€èšããŠãã ããã
- ããŒããŠã§ã¢ãµããŒãã®ç¢ºèªïŒã¿ãŒã²ããããã€ã¹ããéžæããã³ãŒããã¯ãšãããã¡ã€ã«ã®ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ããµããŒãããŠããããšã確èªããŸããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ©èœæ€åºã«ã¯ã
navigator.mediaCapabilitiesAPIã䜿çšããŸãã - ãã©ã€ãã®æŽæ°ïŒã°ã©ãã£ãã¯ãã©ã€ããææ°ã§ããããšã確èªããŸããå€ããã©ã€ãã¯ãäºææ§ã®åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
- æ§æã®ç°¡çŽ åïŒããäœãè§£å床ããã¬ãŒã ã¬ãŒãããŸãã¯ãããã¡ã€ã«ã䜿çšããŠã¿ãŠãåé¡ã解決ãããã©ããã確èªããŸãã
- ããŸããŸãªããã€ã¹ã§ã®ãã¹ãïŒããŸããŸãªããã€ã¹ã§ãã¹ãããŠãããã€ã¹åºæã®åé¡ãç¹å®ããŸãã
- ãã©ãŠã¶ã³ã³ãœãŒã«ã®ç¢ºèªïŒæããããæäŸããå¯èœæ§ã®ãããšã©ãŒã¡ãã»ãŒãžãŸãã¯èŠåããã©ãŠã¶ã³ã³ãœãŒã«ã«ãªãã確èªããŸãã
- ãœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãžã®ãã©ãŒã«ããã¯ïŒããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãåžžã«å€±æããå Žåã¯ãããä¿¡é Œæ§ã®é«ããªãã·ã§ã³ãšããŠãœãããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãžã®ãã©ãŒã«ããã¯ãæ€èšããŠãã ãããããã©ãŒãã³ã¹ã¯äœããªããŸãããäºææ§ãä¿èšŒã§ããŸãã
äŸïŒããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã«ããé©å¿ãããã¬ãŒãã¹ããªãŒãã³ã°
é©å¿ãããã¬ãŒãã¹ããªãŒãã³ã°ïŒABSïŒã¯ããŠãŒã¶ãŒã®ãããã¯ãŒã¯ç¶æ ã«åºã¥ããŠãããªå質ãåçã«èª¿æŽã§ããææ³ã§ããããã«ããããããã¯ãŒã¯åž¯åå¹ ãå€åããå Žåã§ããã¹ã ãŒãºãªèŠèŽäœéšãæäŸãããŸããããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã¯ãABSã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããå€ãã®ã¹ããªãŒã ãåæã«ãšã³ã³ãŒãã§ããããã«ããŸãã
WebCodecsãšããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã䜿çšããŠABSãå®è£ ããæ¹æ³ã®ç°¡ç¥åãããäŸã次ã«ç€ºããŸãã
- è€æ°ã®ãšã³ã³ãŒããŒãããã¡ã€ã«ã®äœæïŒããŸããŸãªè§£å床ãšãããã¬ãŒãã䜿çšããŠãããã€ãã®
VideoEncoderConfigãªããžã§ã¯ããå®çŸ©ããŸããããšãã°ïŒ
const profiles = [
{
codec: 'avc1.42E01E',
width: 640,
height: 360,
framerate: 30,
bitrate: 500000,
hardwareAcceleration: 'prefer-hardware',
},
{
codec: 'avc1.42E01E',
width: 854,
height: 480,
framerate: 30,
bitrate: 1000000,
hardwareAcceleration: 'prefer-hardware',
},
{
codec: 'avc1.42E01E',
width: 1280,
height: 720,
framerate: 30,
bitrate: 2000000,
hardwareAcceleration: 'prefer-hardware',
},
];
- ãããã¯ãŒã¯ç¶æ
ã®ç£èŠïŒãããã¯ãŒã¯æ
å ±APIïŒ
navigator.connectionïŒãŸãã¯ãã®ä»ã®ææ³ã䜿çšããŠããŠãŒã¶ãŒã®ãããã¯ãŒã¯åž¯åå¹ ãç£èŠããŸãã - é©åãªãããã¡ã€ã«ã®éžæïŒãããã¯ãŒã¯ç¶æ
ã«åºã¥ããŠãå©çšå¯èœãªåž¯åå¹
ã«æãããäžèŽãã
VideoEncoderConfigãéžæããŸãã - ãããã¡ã€ã«ã®åçåãæ¿ãïŒãããã¯ãŒã¯ç¶æ
ãå€åããããå¥ã®
VideoEncoderConfigã«åãæ¿ããŸããããã¯ãæ°ããæ§æã§æ°ããVideoEncoderãäœæããã¹ããªãŒã éãã¹ã ãŒãºã«ç§»è¡ããããšã§å®è¡ã§ããŸãã
ããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã䜿çšãããšãè€æ°ã®ã¹ããªãŒã ãåæã«ãšã³ã³ãŒãã§ãããããé©å¿ãããã¬ãŒãã¹ããªãŒãã³ã°ãããå¹ççã«ãªããå¿çæ§ãåäžããŸãã
çµè«
WebCodecsã䜿çšããŠããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãããã¡ã€ã«ãæ§æããã«ã¯ãã³ãŒããã¯ããããã¡ã€ã«ãã¬ãã«ãè§£å床ããã¬ãŒã ã¬ãŒããããã³ãããã¬ãŒããæ éã«æ€èšããå¿ èŠããããŸãããããã®ãªãã·ã§ã³ãçè§£ããããŸããŸãªããã€ã¹ã§ãã¹ãããããšã«ãããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®åãæŽ»çšããŠãé«åºŠãªã¡ãã£ã¢æ©èœãåãã髿§èœãªãŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããé©å¿ãããã¬ãŒãã¹ããªãŒãã³ã°ãªã©ã®ææ³ãå®è£ ããããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ãå©çšã§ããªãå Žåã«ãã©ãŒã«ããã¯ãªãã·ã§ã³ãæäŸããããšã«ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåªå ããããšãå¿ããªãã§ãã ãããWebCodecsãšããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°ã®ãµããŒããé²åãç¶ããã«ã€ããŠããŠã§ãããŒã¹ã®ã¡ãã£ã¢åŠçã®å¯èœæ§ãæå€§éã«é«ããã«ã¯ãææ°ã®é²æ©ãšãã¹ããã©ã¯ãã£ã¹ã«é¢ããæ å ±ãåžžã«ææ¡ããããšãäžå¯æ¬ ã§ãã
WebCodecsã¯ããŠã§ãéçºè
ã«ãšã£ãŠãšããµã€ãã£ã³ã°ãªå¯èœæ§ãåãéãããã©ãŠã¶å
ã§ã®ã¡ãã£ã¢ã®é«åºŠãªæäœãå¯èœã«ããŸããnavigator.mediaCapabilitiesã䜿çšããŠãã³ãŒããã¯ããããã¡ã€ã«ãããã³ããŒããŠã§ã¢æ©èœã®ç¹å®ã®ãã©ãŠã¶ãµããŒãã確èªããããšãäžå¯æ¬ ã§ãããã®ã¬ã€ãã§æäŸãããæŽå¯ã«ãããæå
端ã®ã¡ãã£ã¢æ©èœããŠã§ãã¢ããªã±ãŒã·ã§ã³ã§å®éšããã³å®è£
ããæºåãæŽã£ãŠããŸããããŒããŠã§ã¢ãšã³ã³ãŒãã£ã³ã°æè¡ãæçããã«ã€ããŠãWebCodecsã®çµ±åã¯ã倿§ãªãã©ãããã©ãŒã ãããã€ã¹å
šäœã§é«å質ã§å¹ççãªãããªãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«ãŸããŸãéèŠã«ãªããŸããç¹ã«ãAV1ã®ãããªæ°ããã³ãŒããã¯ã¯ãããåºç¯ãªããŒããŠã§ã¢ãµããŒããåŸãŠããŸãã