ããã³ããšã³ãWebCodecsããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ãæ¢æ±ãã倿§ãªããã€ã¹ã®ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãç¹å®ã»æŽ»çšããŠãã°ããŒãã«ãŠãŒã¶ãŒåãã«ãŠã§ãã¢ããªãæé©åããæ¹æ³ãåŠã³ãŸãã
ããã³ããšã³ãWebCodecsããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ïŒã°ããŒãã«ãªã¢ã¯ã»ã©ã¬ãŒã·ã§ã³èœåãè§£æŸãã
WebCodecs APIã¯ããŠã§ãããŒã¹ã®åç»ããã³é³å£°åŠçã«ããã倧ããªäžæ©ã象城ããéçºè ããã©ãŠã¶å ã§çŽæ¥äœã¬ãã«ã®ãšã³ã³ãŒãã£ã³ã°ããã³ãã³ãŒãã£ã³ã°æäœãå®è¡ã§ããããã«ããŸãããããããããã®æäœã®ããã©ãŒãã³ã¹ã¯ããŠãŒã¶ãŒã®ããã€ã¹ã®åºç€ãšãªãããŒããŠã§ã¢èœåã«å€§ããäŸåããŸããWebCodecsã广çã«å©çšããããã®éèŠãªåŽé¢ã¯ãå©çšå¯èœãªããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ©èœãæ€åºããŠé©å¿ããèœåã§ãããã®ããã°èšäºã§ã¯ãããã³ããšã³ãWebCodecsããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ã®è€éããæãäžããã¢ã¯ã»ã©ã¬ãŒã·ã§ã³èœåãæ£ç¢ºã«ç¹å®ãã倿§ãªããŒããŠã§ã¢ããã³ãœãããŠã§ã¢æ§æã«ãããã°ããŒãã«ãªèŠèŽè åãã«ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæé©åããæ¹æ³ãæ¢ããŸãã
ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ€åºã®éèŠæ§ãçè§£ãã
ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãšã¯ãGPUãå°çšã®åç»ãšã³ã³ãŒãã£ã³ã°/ãã³ãŒãã£ã³ã°ããããªã©ã®ç¹æ®ãªããŒããŠã§ã¢ã³ã³ããŒãã³ãã䜿çšããŠãCPUããèšç®è² è·ã®é«ãã¿ã¹ã¯ããªãããŒãããããšã§ããããã«ãããç¹ã«é«è§£å床ã®åç»ããªã¢ã«ã¿ã€ã ã¹ããªãŒãã³ã°ã¢ããªã±ãŒã·ã§ã³ãæ±ãå Žåã«ãããã©ãŒãã³ã¹ã®å€§å¹ ãªåäžãæ¶è²»é»åã®åæžããããŠããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸã§ããŸããWebCodecsã®æèã§ã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã¯ãšã³ã³ãŒãã£ã³ã°ããã³ãã³ãŒãã£ã³ã°æäœã®é床ãšå¹çã«åçãªåœ±é¿ãäžããå¯èœæ§ããããŸãã
ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãé©åã«æ€åºã»å©çšã§ããªãå Žåãããã€ãã®åé¡ãçºçããå¯èœæ§ããããŸã:
- ããã©ãŒãã³ã¹ã®äœäž: ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãå©çšå¯èœãªå Žåã«ãœãããŠã§ã¢ã³ãŒããã¯ã䜿çšããããšãã¢ããªã±ãŒã·ã§ã³ã¯ãšã³ã³ãŒãã£ã³ã°/ãã³ãŒãã£ã³ã°é床ã®äœäžããã¬ãŒã ãããããCPU䜿çšçã®å¢å ã«æ©ãŸãããå¯èœæ§ããããŸãã
- æ¶è²»é»åã®å¢å : ãœãããŠã§ã¢ã³ãŒããã¯ã¯éåžžãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãå©çšããå Žåãããå€ãã®é»åãæ¶è²»ãããããã¢ãã€ã«ããã€ã¹ãã©ãããããã®ããããªãŒå¯¿åœã«æªåœ±é¿ãäžããå¯èœæ§ããããŸãã
- äžè²«æ§ã®ãªããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹: ãœãããŠã§ã¢ã³ãŒããã¯ã®ããã©ãŒãã³ã¹ã¯ããŠãŒã¶ãŒã®ããã€ã¹ã®CPUãã¯ãŒã«ãã£ãŠå€§ããç°ãªãå ŽåããããŸããããã«ãããç°ãªãããã€ã¹ããã©ãããã©ãŒã éã§äžè²«æ§ã®ãªããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçããå¯èœæ§ããããŸãã
ãããã£ãŠãå ç¢ãªããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ã¯ãäžçäžã®ãŠãŒã¶ãŒã«æé©ãªããã©ãŒãã³ã¹ãšäžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããWebCodecsããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã
ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ€åºã«ããã課é¡
ãŠã§ããã©ãŠã¶ç°å¢ã§ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³èœåãæ€åºããããšã¯ãããã€ãã®èª²é¡ãæç€ºããŸã:
- ãã©ãŠã¶ã®å·®ç°: ç°ãªããã©ãŠã¶ïŒChrome, Firefox, Safari, Edgeãªã©ïŒã¯ãWebCodecsãç°ãªãæ¹æ³ã§å®è£ ããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãµããŒãã«é¢ããæ å ±ãç°ãªãã¬ãã«ã§å ¬éããå ŽåããããŸãã
- ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®å·®ç°: ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®å©çšå¯èœæ§ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒWindows, macOS, Linux, Android, iOSïŒãããã€ã¹ã«ã€ã³ã¹ããŒã«ãããŠããç¹å®ã®ãã©ã€ãã«äŸåããå ŽåããããŸãã
- ã³ãŒããã¯ã®å·®ç°: ç°ãªãã³ãŒããã¯ïŒAV1, H.264, VP9ïŒã¯ããã©ãããã©ãŒã ã«ãã£ãŠããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®ãµããŒãã¬ãã«ãç°ãªãå ŽåããããŸãã
- ããã€ã¹ã®å·®ç°: ããã€ã¹ã®ããŒããŠã§ã¢èœåã¯ãå°çšGPUãæèŒãããã€ãšã³ãã®ãã¹ã¯ãããã³ã³ãã¥ãŒã¿ãããåŠçèœåãéãããããŒãšã³ãã®ã¢ãã€ã«ããã€ã¹ãŸã§ãå¹ åºãç°ãªããŸãã
- é²åããæšæº: WebCodecs APIã¯ãŸã æ¯èŒçæ°ããããã©ãŠã¶ã®å®è£ ãããŒããŠã§ã¢ãµããŒãã¯çµ¶ããé²åããŠããŸãã
- ã»ãã¥ãªãã£äžã®å¶é: ãã©ãŠã¶ã¯ãåºç€ãšãªãããŒããŠã§ã¢ã«ã€ããŠã¢ã¯ã»ã¹ã§ããæ å ±éãå¶éããã»ãã¥ãªãã£äžã®å¶çŽã課ããŠããŸãã
ãããã®èª²é¡ã«å¯ŸåŠããããã«ã¯ãå æ¬çãªããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ãããŸããŸãªèŠå ãèæ ®ããè€æ°ã®æè¡ãçµã¿åãããå¿ èŠããããŸãã
ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ€åºã®æè¡
ãã©ãŠã¶ã§ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³èœåãæ€åºããããã«äœ¿çšã§ããããã€ãã®æè¡ããããŸã:
1. `MediaCapabilities` APIã䜿çšããæ©èœæ€åº
MediaCapabilities APIã¯ãã¡ãã£ã¢ã®ãã³ãŒãã£ã³ã°ããã³ãšã³ã³ãŒãã£ã³ã°èœåã«ã€ããŠãã©ãŠã¶ã«åãåãããããã®æšæºåãããæ¹æ³ãæäŸããŸãããã®APIã䜿çšãããšãç¹å®ã®ã³ãŒããã¯ãããŒããŠã§ã¢ã§ãµããŒããããŠããããã©ã®ãããªèšå®ãããã¡ã€ã«ãå©çšå¯èœãã確èªã§ããŸãã
äŸ:
asynction checkHardwareAccelerationSupport(codec, width, height, bitrate) {
if (!navigator.mediaCapabilities) {
console.warn('MediaCapabilities APIã¯ãµããŒããããŠããŸããã');
return false;
}
const configuration = {
type: 'decoding',
video: {
contentType: codec,
width: width,
height: height,
bitrate: bitrate
}
};
try {
const support = await navigator.mediaCapabilities.decodingInfo(configuration);
return support.supported && support.powerEfficient;
} catch (error) {
console.error('ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãµããŒãã®ç¢ºèªäžã«ãšã©ãŒãçºçããŸãã:', error);
return false;
}
}
// 䜿çšäŸ: AV1ãã³ãŒãã£ã³ã°ã®ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãµããŒãã確èª
checkHardwareAccelerationSupport('video/av01', 1920, 1080, 5000000)
.then(isSupported => {
if (isSupported) {
console.log('AV1ã®ããŒããŠã§ã¢ãã³ãŒãã£ã³ã°ã¯ãµããŒããããŠãããé»åå¹çãé«ãã§ãã');
} else {
console.log('AV1ã®ããŒããŠã§ã¢ãã³ãŒãã£ã³ã°ã¯ãµããŒããããŠããªãããé»åå¹çãé«ããããŸããã');
}
});
説æ:
- `checkHardwareAccelerationSupport`颿°ã¯ãã³ãŒããã¯ã®çš®é¡ãå¹ ãé«ãããããã¬ãŒããå ¥åãšããŠåãåããŸãã
- ãã©ãŠã¶ã`navigator.mediaCapabilities` APIããµããŒãããŠãããã©ããã確èªããŸãã
- ãã³ãŒãã£ã³ã°ãã©ã¡ãŒã¿ãæå®ãã`configuration`ãªããžã§ã¯ããäœæããŸãã
- `navigator.mediaCapabilities.decodingInfo()`ãåŒã³åºããæå®ãããèšå®ã§ã®ãã³ãŒãã£ã³ã°èœåã«ã€ããŠãã©ãŠã¶ã«åãåãããŸãã
- ã³ãŒããã¯ããµããŒããããŠããããã€é»åå¹çãé«ãå ŽåïŒããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã瀺åïŒã«`true`ãè¿ããŸãããã以å€ã®å Žåã¯`false`ãè¿ããŸãã
åœéçãªèæ ®äºé :
ç¹å®ã®ã³ãŒããã¯ã«å¯ŸããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®å¯çšæ§ã¯ãå°åãããã€ã¹ã«ãã£ãŠç°ãªãå ŽåããããŸããäŸãã°ãAV1ã®ããŒããŠã§ã¢ãã³ãŒãã£ã³ã°ãµããŒãã¯ãæ°ããããã€ã¹ãå é²çãªã€ã³ãã©ãæã€å°åã§ããæ®åããŠããå¯èœæ§ããããŸããã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹å šäœã§äžè²«ããããã©ãŒãã³ã¹ã確ä¿ããããã«ãããŸããŸãªããã€ã¹ããã©ãããã©ãŒã ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããããšãéèŠã§ããäžçäžã®ããŸããŸãªãããã¯ãŒã¯æ¡ä»¶ãããã€ã¹æ§æãã·ãã¥ã¬ãŒãã§ããã¯ã©ãŠãããŒã¹ã®ãã¹ããã©ãããã©ãŒã ã®äœ¿çšãæ€èšããŠãã ããã
2. ã³ãŒããã¯åºæã®æ©èœæ€åº
äžéšã®ã³ãŒããã¯ã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãµããŒããæ€åºããããã«äœ¿çšã§ããç¹å®ã®APIããã©ã°ãæäŸããŸããäŸãã°ãH.264ã³ãŒããã¯ã¯ãããŒããŠã§ã¢ãã³ãŒãã£ã³ã°ãæå¹ãã©ããã瀺ããã©ã°ãå ¬éããŠããå ŽåããããŸãã
äŸ (æŠå¿µ):
// ããã¯æŠå¿µçãªäŸã§ããããã¹ãŠã®H.264å®è£
ã«çŽæ¥é©çšã§ãããšã¯éããŸããã
function isH264HardwareAccelerated() {
// ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã瀺ãç¹å®ã®ãã©ãŠã¶ãŸãã¯ãã©ãããã©ãŒã åºæã®ãã©ã°ã確èªããŸãã
if (/* ãã©ãŠã¶åºæã®H.264ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãã§ã㯠*/) {
return true;
} else if (/* ãã©ãããã©ãŒã åºæã®H.264ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãã§ã㯠*/) {
return true;
} else {
return false;
}
}
if (isH264HardwareAccelerated()) {
console.log('H.264ã®ããŒããŠã§ã¢ãã³ãŒãã£ã³ã°ãæå¹ã§ãã');
} else {
console.log('H.264ã®ããŒããŠã§ã¢ãã³ãŒãã£ã³ã°ã¯æå¹ã§ã¯ãããŸããã');
}
説æ:
ãã®äŸã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãµããŒãã瀺ãã³ãŒããã¯åºæã®ãã©ã°ãAPIã確èªãããšããäžè¬çãªæŠå¿µã瀺ããŠããŸããå ·äœçãªå®è£ ã¯ã䜿çšããã³ãŒããã¯ããã©ãŠã¶/ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªããŸããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæ€åºããããã®é©åãªæ¹æ³ã決å®ããã«ã¯ãç¹å®ã®ã³ãŒããã¯ãšãã©ãŠã¶ã®ããã¥ã¡ã³ããåç §ããå¿ èŠããããããããŸããã
ã°ããŒãã«ãªããã€ã¹ã®æçå:
ç¹ã«Androidããã€ã¹ã¯ãããŒããŠã§ã¢èœåãã³ãŒããã¯ãµããŒãã®ç¹ã§èããæçåã瀺ããŠããŸããã¡ãŒã«ãŒã«ãã£ãŠH.264ã®ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®å®è£ ãç°ãªããããããã¯å šãå®è£ ãããŠããªãå ŽåããããŸããã¢ããªã±ãŒã·ã§ã³ãå šäœçã«è¯å¥œãªããã©ãŒãã³ã¹ãçºæ®ããããšã確èªããããã«ã¯ãããŸããŸãªå°åã®ä»£è¡šçãªAndroidããã€ã¹ã®ãµã³ãã«ã§ãã¹ãããããšãäžå¯æ¬ ã§ããåºç¯å²ã®å®éã®Androidããã€ã¹ãžã®ã¢ã¯ã»ã¹ãæäŸããããã€ã¹ãã¡ãŒã ãµãŒãã¹ã®äœ¿çšãæ€èšããŠãã ããã
3. ããã©ãŒãã³ã¹ãã³ãããŒãã³ã°
ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšãããŠãããã©ããã倿ããæãä¿¡é Œæ§ã®é«ãæ¹æ³ã®1ã€ã¯ãããã©ãŒãã³ã¹ãã³ãããŒã¯ãå®è¡ããããšã§ããããã«ã¯ãWebCodecsã䜿çšããŠåç»ããšã³ã³ãŒããŸãã¯ãã³ãŒãããã®ã«ãããæéãæž¬å®ãããã®çµæãããŒã¹ã©ã€ã³ã®ããã©ãŒãã³ã¹ãšæ¯èŒããããšãå«ãŸããŸãããšã³ã³ãŒã/ãã³ãŒãæéãããŒã¹ã©ã€ã³ãããå€§å¹ ã«éãå ŽåãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšãããŠããå¯èœæ§ãé«ãã§ãã
äŸ:
async function benchmarkDecodingPerformance(codec, videoData) {
const decoder = new VideoDecoder({
config: {
codec: codec,
codedWidth: 1920,
codedHeight: 1080
},
output: frame => {
// ãã³ãŒãããããã¬ãŒã ãåŠç
},
error: e => {
console.error('ãã³ãŒãã£ã³ã°ãšã©ãŒ:', e);
}
});
// åç»ããŒã¿ãè€æ°åãã³ãŒãããå¹³åãã³ãŒãæéãæž¬å®
const numIterations = 10;
let totalDecodingTime = 0;
for (let i = 0; i < numIterations; i++) {
const startTime = performance.now();
decoder.decode(videoData);
const endTime = performance.now();
totalDecodingTime += (endTime - startTime);
}
const averageDecodingTime = totalDecodingTime / numIterations;
return averageDecodingTime;
}
async function detectHardwareAcceleration(codec, videoData) {
const softwareDecodingTime = await benchmarkDecodingPerformance(codec, videoData);
console.log(`${codec}ã®ãœãããŠã§ã¢ãã³ãŒãã£ã³ã°æé: ${softwareDecodingTime} ms`);
// ãã³ãŒãã£ã³ã°æéãäºåã«å®çŸ©ãããããå€ãšæ¯èŒ
const hardwareAccelerationThreshold = 50; // äŸ: ããªç§åäœã®ãããå€
if (softwareDecodingTime < hardwareAccelerationThreshold) {
console.log('ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã§ããå¯èœæ§ãé«ãã§ãã');
return true;
} else {
console.log('ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã§ãªãå¯èœæ§ãé«ãã§ãã');
return false;
}
}
// 䜿çšäŸ: AV1ãã³ãŒãã£ã³ã°ã®ããã©ãŒãã³ã¹ããã³ãããŒã¯
// 'av1VideoData'ãå®éã®åç»ããŒã¿ã«çœ®ãæããŠãã ãã
detectHardwareAcceleration('av01.0.04M.08', av1VideoData);
説æ:
- `benchmarkDecodingPerformance`颿°ã¯ãWebCodecsã䜿çšããŠåç»ãè€æ°åãã³ãŒãããå¹³åãã³ãŒãæéãæž¬å®ããŸãã
- `detectHardwareAcceleration`颿°ã¯ããã³ãŒãæéãäºåã«å®çŸ©ãããããå€ãšæ¯èŒããŸãããã³ãŒãæéããããå€ãäžåãå ŽåãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã§ããå¯èœæ§ãé«ãã§ãã
ãããã¯ãŒã¯é å»¶ãšã°ããŒãã«é ä¿¡:
ããã©ãŒãã³ã¹ãã³ãããŒã¯ãå®è¡ããéã¯ãç¹ã«ãªã¢ãŒããµãŒããŒããåç»ããŒã¿ãæäŸããå Žåããããã¯ãŒã¯é å»¶ã®åœ±é¿ãèæ ®ããããšãäžå¯æ¬ ã§ãããããã¯ãŒã¯é å»¶ã¯ã枬å®ããããã³ãŒãæéã«å€§ããªåœ±é¿ãäžããäžæ£ç¢ºãªçµæã«ã€ãªããå¯èœæ§ããããŸãããã®åé¡ã軜æžããããã«ãäžçäžã®ããŸããŸãªå°åã«ãšããžãµãŒããŒãæã€ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã§ãã¹ãçšã®åç»ããŒã¿ããã¹ãããããšãæ€èšããŠãã ãããããã«ããããããã¯ãŒã¯é å»¶ãæå°éã«æãããã³ãããŒã¯ãç°ãªãå°ççãªå Žæã®ãŠãŒã¶ãŒãå®éã«äœéšããããã©ãŒãã³ã¹ã代衚ãããã®ãšãªããŸãã
4. ãã©ãŠã¶åºæã®APIæ€åº
äžéšã®ãã©ãŠã¶ã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³èœåãæ€åºããããã«äœ¿çšã§ããç¹å®ã®APIãããããã£ãå ¬éããŠããå ŽåããããŸãããããã®APIã¯éæšæºã§ãããç¹å®ã®ãã©ãŠã¶ã«åºæã§ããå¯èœæ§ããããŸãããäžè¬çãªæ©èœæ€åºæè¡ãããæ£ç¢ºãªæ å ±ãæäŸããããšããããŸãã
äŸ (仮説):
// ããã¯ä»®èª¬çãªäŸã§ãããå®éã®ãã©ãŠã¶ã«ã¯é©çšã§ããªãå ŽåããããŸãã
function isHardwareAccelerated() {
if (navigator.webkitIsHardwareAccelerated) {
return navigator.webkitIsHardwareAccelerated;
} else if (navigator.mozIsHardwareAccelerated) {
return navigator.mozIsHardwareAccelerated;
} else {
return false;
}
}
if (isHardwareAccelerated()) {
console.log('ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã§ãïŒãã©ãŠã¶åºæAPIïŒã');
} else {
console.log('ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã¯æå¹ã§ã¯ãããŸããïŒãã©ãŠã¶åºæAPIïŒã');
}
説æ:
ãã®äŸã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãµããŒãã瀺ããã©ãŠã¶åºæã®APIãããããã£ã確èªãããšããäžè¬çãªæŠå¿µã瀺ããŠããŸããç¹å®ã®APIãããããã£ã¯ã䜿çšãããã©ãŠã¶ã«ãã£ãŠç°ãªããŸããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæ€åºããããã®é©åãªæ¹æ³ãç¹å®ããã«ã¯ããã©ãŠã¶ã®ããã¥ã¡ã³ãããœãŒã¹ã³ãŒããåç §ããå¿ èŠããããããããŸããã
ãã©ã€ãã·ãŒã«é¢ããèæ ®äºé ãšãŠãŒã¶ãŒã®åæ:
ãã©ãŠã¶åºæã®APIãããã©ãŒãã³ã¹ãã³ãããŒã¯æè¡ã䜿çšããŠããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæ€åºããéã¯ããŠãŒã¶ãŒã®ãã©ã€ãã·ãŒã«é æ ®ããããšãéèŠã§ãããããã®æè¡ã®äžã«ã¯ãå人ãç¹å®ã§ããå¯èœæ§ã®ãããŠãŒã¶ãŒã®ããã€ã¹ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«é¢ããæ å ±ãæããã«ãããã®ããããŸããæœåšçã«æ©å¯æ§ã®é«ãæ å ±ãåéãŸãã¯äœ¿çšããåã«ããŠãŒã¶ãŒã®åæãåŸãããšãäžå¯æ¬ ã§ãããŸãããŠãŒã¶ãŒãåžæããå Žåã«ã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ€åºããªããã¢ãŠãããéžæè¢ãæäŸãã¹ãã§ãã
å ç¢ãªããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ã®æ§ç¯
å ç¢ãªããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ã¯ãäžèšã§èª¬æããæè¡ãçµã¿åãããå¿ èŠããããŸãããŸãããã©ãŠã¶ã®å®è£ ãããŒããŠã§ã¢ãµããŒãã®å€æŽã«æè»ã«å¯Ÿå¿ã§ããããã«èšèšãããã¹ãã§ãã
以äžã¯æšå¥šãããã¢ãããŒãã§ã:
- æ©èœæ€åºããå§ãã: `MediaCapabilities` APIã䜿çšããŠãé¢é£ããã³ãŒããã¯ã®åºæ¬çãªããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãµããŒãã確èªããŸãã
- ã³ãŒããã¯åºæã®ãã§ãã¯ãå®è£ ãã: å©çšå¯èœã§ããã°ãã³ãŒããã¯åºæã®APIããã©ã°ã䜿çšããŠãæ€åºãããã«çµã蟌ã¿ãŸãã
- ããã©ãŒãã³ã¹ãã³ãããŒãã³ã°ãå®è¡ãã: ããã©ãŒãã³ã¹ãã³ãããŒã¯ã䜿çšããŠãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãå®éã«äœ¿çšãããŠãããã確èªãããã®å¹æã枬å®ããŸãã
- ãœãããŠã§ã¢ã³ãŒããã¯ãžã®ãã©ãŒã«ããã¯: ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãå©çšã§ããªãããŸãã¯ããã©ãŒãã³ã¹ãè¯ããªãå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ãåŒãç¶ãæ©èœããããã«ãœãããŠã§ã¢ã³ãŒããã¯ã«ãã©ãŒã«ããã¯ããŸãã
- ãã©ãŠã¶åºæã®ãã§ãã¯ãå®è£ ãã: ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³èœåãæ€åºããããã®æåŸã®ææ®µãšããŠããã©ãŠã¶åºæã®APIãïŒæ³šææ·±ãããã©ã€ãã·ãŒãèæ ®ããŠïŒäœ¿çšããŸãã
- ãŠãŒã¶ãŒãšãŒãžã§ã³ãã®åæ: 確å®ã§ã¯ãããŸãããããŠãŒã¶ãŒãšãŒãžã§ã³ãæååãåæããŠããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã©ãŠã¶ãããã€ã¹ã«é¢ãããã³ããåŸãŸããããã¯ãç¹å®ã®ãã§ãã¯ã察象ã«ããããæ¢ç¥ã®åé¿çãé©çšãããããã®ã«åœ¹ç«ã¡ãŸãããŠãŒã¶ãŒãšãŒãžã§ã³ãæååã¯åœè£ ãããå¯èœæ§ãããããããã®æ å ±ã¯æççã«æ±ãå¿ èŠããããŸãã
- ã¢ã«ãŽãªãºã ã宿çã«æŽæ°ãã: WebCodecs APIãšãã©ãŠã¶ã®å®è£ ã¯çµ¶ããé²åããŠããŸããããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ãæ£ç¢ºãã€å¹æçã§ããç¶ããããã«ã宿çã«æŽæ°ããããšãéèŠã§ãã
- ç£èŠã·ã¹ãã ãå®è£ ãã: ç°ãªãããã€ã¹ããã©ãããã©ãŒã ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã远跡ããããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ€åºã«é¢ããåé¡ãç¹å®ããŸãã
ã°ããŒãã«ãŠãŒã¶ãŒåãã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã®æé©å
å ç¢ãªããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ãå°å ¥ããããããã䜿çšããŠã°ããŒãã«ãŠãŒã¶ãŒåãã«ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæé©åã§ããŸãã以äžã«ããã€ãã®æŠç¥ã瀺ããŸã:
- ã¢ãããã£ãã¹ããªãŒãã³ã°: ãŠãŒã¶ãŒã®ãããã¯ãŒã¯åž¯åå¹ ãšããã€ã¹ã®èœåã«åºã¥ããŠãããªå質ãåçã«èª¿æŽããããã«ãã¢ãããã£ãã¹ããªãŒãã³ã°æè¡ã䜿çšããŸãã
- ã³ãŒããã¯ã®éžæ: ãŠãŒã¶ãŒã®ããã€ã¹ãšãããã¯ãŒã¯æ¡ä»¶ã«æãé©ããã³ãŒããã¯ãéžæããŸããäŸãã°ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ããµããŒãããæ°ããããã€ã¹ã«ã¯AV1ãè¯ãéžæãããããŸããããå€ãããã€ã¹ã«ã¯H.264ãé©ããŠããå ŽåããããŸãã
- è§£å床ã®ã¹ã±ãŒãªã³ã°: ãŠãŒã¶ãŒã®ç»é¢ãµã€ãºãšããã€ã¹ã®èœåã«åãããŠãããªã®è§£å床ã調æŽããŸãã
- ãã¬ãŒã ã¬ãŒãå¶åŸ¡: ããŒãšã³ãããã€ã¹ã§ã®ããã©ãŒãã³ã¹ãæé©åããããã«ããããªã®ãã¬ãŒã ã¬ãŒãã調æŽããŸãã
- ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒ: CDNã䜿çšããŠããŠãŒã¶ãŒã«è¿ãå Žæã«ãããµãŒããŒãããããªã³ã³ãã³ããé ä¿¡ããé å»¶ãæžãããŠããã©ãŒãã³ã¹ãåäžãããŸãã
- ããŒã«ãªãŒãŒã·ã§ã³: ç°ãªãå°åã®ãŠãŒã¶ãŒã«å¯Ÿå¿ããããã«ãã¢ããªã±ãŒã·ã§ã³ãšã³ã³ãã³ãã®ããŒã«ã©ã€ãºçãæäŸããŸããããã«ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®ç¿»èš³ãå°ååºæã®ã³ã³ãã³ãã®æäŸãçŸå°é貚ã®ãµããŒããªã©ãå«ãŸããŸãã
- ã¢ã¯ã»ã·ããªãã£: ã¢ããªã±ãŒã·ã§ã³ãé害ãæã€ãŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸããããã«ã¯ããããªã«ãã£ãã·ã§ã³ãæäŸããããšãããŒããŒãããã²ãŒã·ã§ã³ããµããŒãããããšãã¹ã¯ãªãŒã³ãªãŒããŒã®äºææ§ãåäžãããããã«ARIA屿§ã䜿çšããããšãªã©ãå«ãŸããŸãã
ã°ããŒãã«ãªã±ãŒã¹ã¹ã¿ãã£ãšäºäŸ
以äžã¯ãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ€åºã䜿çšããŠãç°ãªãå°åã®ãŠãŒã¶ãŒåãã«ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæé©åããæ¹æ³ã«é¢ãã仮説çãªäŸã§ã:
- åç±³ã®ã¹ããªãŒãã³ã°ãµãŒãã¹: ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒãå°çšGPUãæèŒãããã€ãšã³ãã®ãã¹ã¯ãããã³ã³ãã¥ãŒã¿ã䜿çšããŠããããšãæ€åºããŸãããããªãAV1ã³ãŒããã¯ã䜿çšããŠ4Kè§£å床ã§ã¹ããªãŒãã³ã°ããŸãã
- ãšãŒãããã®ãããªäŒè°ã¢ããªã±ãŒã·ã§ã³: ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒãçµ±åã°ã©ãã£ãã¯ã¹ãæèŒãããããã¬ã³ãžã®ã©ãããããã䜿çšããŠããããšãæ€åºããŸãããããªãH.264ã³ãŒããã¯ã䜿çšããŠ1080pè§£å床ã§ã¹ããªãŒãã³ã°ããŸãã
- ã¢ãžã¢ã®ãªã³ã©ã€ã³æè²ãã©ãããã©ãŒã : ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒãåŠçèœåã®éãããããŒãšã³ãã®ã¢ãã€ã«ããã€ã¹ã䜿çšããŠããããšãæ€åºããŸãããããªãVP9ã³ãŒããã¯ã䜿çšããŠ480pè§£å床ã§ã¹ããªãŒãã³ã°ããŸãã
- åç±³ã®ãœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããª: ã¢ããªã±ãŒã·ã§ã³ã¯äžå®å®ãªãããã¯ãŒã¯ç¶æ ãæ€åºããŸãããããªå質ãç©æ¥µçã«äœäžãããå®å®ããæ¥ç¶ãå©çšå¯èœã«ãªã£ããšãã«ãªãã©ã€ã³è¡šç€ºçšã«ãããªãããŠã³ããŒãããããšãææ¡ããŸãã
çµè«
ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ€åºã¯ãäžçäžã®ãŠãŒã¶ãŒã«æé©ãªããã©ãŒãã³ã¹ãšäžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããWebCodecsããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããäžã§éèŠãªåŽé¢ã§ããé¢é£ãã課é¡ãçè§£ããæè¡ãçµã¿åãããŠäœ¿çšããããšã§ãéçºè ã¯ã°ããŒãã«ãªèŠèŽè ã®å€æ§ãªããŒããŠã§ã¢ããã³ãœãããŠã§ã¢æ§æã«é©å¿ããå ç¢ãªããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ãäœæã§ããŸããæ€åºãããããŒããŠã§ã¢èœåã«åºã¥ããŠã¢ããªã±ãŒã·ã§ã³ãæé©åããããšã§ãå Žæãããã€ã¹ã«é¢ä¿ãªãããã¹ãŠã®ãŠãŒã¶ãŒãã¹ã ãŒãºã§é åçãªäœéšã楜ãããããã«ãªããŸãã
WebCodecs APIãé²åãç¶ããã«ã€ããŠãææ°ã®ãã©ãŠã¶å®è£ ãšããŒããŠã§ã¢ãµããŒããåžžã«ææ¡ããŠããããšãéèŠã§ããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããããã«å¿ããŠããŒããŠã§ã¢æ€åºã¢ã«ãŽãªãºã ãé©å¿ãããããšã§ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãã°ããŒãã«ãªèŠèŽè åãã«æé©åããç¶ããããšãä¿èšŒã§ããŸãã