MediaDevicesï¼selectAudioOutput() æ¹æ³
å®å ¨ä¸ä¸æ: æ¤ç¹æ§ä» å¨ä¸äºæ¯æçæµè§å¨çå®å ¨ä¸ä¸æï¼HTTPSï¼ä¸å¯ç¨ã
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
MediaDevices æ¥å£ç selectAudioOutput() æ¹æ³ä¼æç¤ºç¨æ·éæ©ä¸ä¸ªé³é¢è¾åºè®¾å¤ï¼ä¾å¦æ¬å£°å¨æè³æºãå¦æç¨æ·éæ©äºè®¾å¤ï¼è¯¥æ¹æ³ä¼æäºç¨æ·æéï¼ä½¿éå®çè®¾å¤æä¸ºé³é¢è¾åºçç®æ ã
éæ©è®¾å¤åï¼å¦æè¯¥è®¾å¤å¯ç¨ï¼å¯ä»¥ä½¿ç¨ MediaDevices.enumerateDevices() ååºå®ï¼å¹¶ä½¿ç¨ HTMLMediaElement.setSinkId() å°å
¶è®¾ç½®ä¸ºé³é¢è¾åºç®æ ã
æåæ¶ï¼è¿åç Promise ä¼å
ç°ä¸ä¸ªæè¿°æé设å¤ç MediaDeviceInfo 对象ã
è¯æ³
selectAudioOutput()
selectAudioOutput(options)
åæ°
optionså¯é-
对象ï¼ç¨äºé ç½®å¯ä»¥å¨ç¨æ·æç¤ºä¸æä¾ç设å¤ã
deviceIdå¯é-
表示å个å åå ¬å¼æå 许设å¤ç ID çå符串ã妿æªè®¾ç½®ï¼å伿¾ç¤ºå 嫿æå¯ç¨é³é¢è¾åºè®¾å¤çæç¤ºã
该é项éç¨äºå¸æåå¨è®¾å¤ ID ä»¥ä¾¿å°æ¥ä¼è¯ä¸é»è®¤ä½¿ç¨åä¸è®¾å¤çåºç¨ç¨åºã注æï¼æ¹æ³å¯è½ä¼è¿ååä¸è®¾å¤çæ° IDï¼å¹¶ä¸æä¹ åç ID å¿ é¡»å¨
setSinkId()æåå°éè¿selectAudioOutput()ä¼ éåæè½ä½¿ç¨ã夿³¨ï¼å¦æå¨å åä¼è¯ä¸éè¿
selectAudioOutput()åç¨æ·æ¾ç¤ºäºæå®çé空 IDï¼åç¨æ·ä»£çå¯è½ä¼éæ©è·³è¿æç¤ºç¨æ·çæ¥éª¤ã å¨è¿ç§æ åµä¸ï¼ç¨æ·ä»£çå¯è½ä¼ç®åå°è§£æä¸ºæ¤è®¾å¤ IDï¼æè å¦æè®¾å¤ ID å·²æ´æ¹ï¼åè§£æä¸ºåä¸è®¾å¤çæ° IDã 妿å åæäºäºæå®è®¾å¤çæéï¼ä½æ¤å被æ¤éï¼ç¨æ·ä»£çå¯è½ä¼æ¾ç¤ºææå 许ç设å¤ï¼å¹¶çªåºæ¾ç¤ºå ·ææå® ID ç设å¤ã
è¿åå¼
Promiseï¼å
¶ä¼å
ç°ä¸ä¸ªæè¿°ç¨æ·éæ©çé³é¢è¾åºè®¾å¤ç MediaDeviceInfo 对象ã
å¼å¸¸
NotAllowedErrorDOMException-
å¦æä½¿ç¨
speaker-selectionæéçç¥æ¥é»æ¢ä½¿ç¨é³é¢è¾åºï¼æ¤å¤ä¸ä¼æ¾ç¤ºç¨äºéæ©é³é¢è¾åºçå¼¹åºçªå£ï¼ï¼æè ç¨æ·å ³ééæ©æç¤ºè没æéæ©è®¾å¤æ¶ï¼åä¼è¿åæ¤é误ã NotFoundErrorDOMException-
å¦ææ²¡æå¯ç¨çé³é¢è¾åºè®¾å¤ï¼åä¼è¿åæ¤é误ã
InvalidStateErrorDOMException-
å¦ææ²¡æåçç¬ææ¿æ´»ï¼ä½ å¿ é¡»ä»æç§ UI äºä»¶ä¸è§¦åå®ï¼ï¼åä¼è¿åæ¤é误ã
å®å ¨è¦æ±
å¯¹æ¤ API ç访é®å以ä¸çº¦æï¼
- æ¹æ³å¿ é¡»å¨å®å ¨ä¸ä¸æä¸è°ç¨ã
- éè¦ç¬æç¨æ·æ¿æ´»ã ç¨æ·å¿ é¡»ä¸é¡µé¢æ UI å ç´ è¿è¡äº¤äºï¼æè½ä½¿ç¨æ¤ç¹æ§ã
- 访é®å¯è½å
speaker-selectionHTTP æéçç¥çæ§å¶ã
æéç¶æå¯ä»¥éè¿ Permissions API ç navigator.permissions.query() æ¹æ³è¿è¡æ¥è¯¢ï¼ä¼ éä¸ä¸ªå¸¦æ speaker-selection æéçæéæè¿°ç¬¦ï¼ã
示ä¾
以䏿¯ä½¿ç¨ selectAudioOutput() ç示ä¾ï¼å®å¨æé®ç¹å»æ¶è§¦åãå®ä¼è¾åºæéçè®¾å¤ ID åæ ç¾ï¼å¦æå¯ç¨ï¼ï¼æè
éè¯¯æ¶æ¯ã
document.querySelector("#myButton").addEventListener("click", () => {
if (!navigator.mediaDevices.selectAudioOutput) {
console.log("䏿¯æ selectAudioOutput()ã");
return;
}
// æ¾ç¤ºæç¤ºå¹¶è®°å½æéè®¾å¤æé误
navigator.mediaDevices
.selectAudioOutput()
.then((device) => {
console.log(`${device.kind}: ${device.label} id = ${device.deviceId}`);
})
.catch((err) => {
console.error(`${err.name}: ${err.message}`);
});
});
éæ©è¾åºè®¾å¤åï¼å¯è½ä¼äº§çå¦ä¸è¾åºï¼
audiooutput: Realtek Digital Output (Realtek(R) Audio) id = 0wE6fURSZ20H0N2NbxqgowQJLWbwo+5ablCVVJwRM3k=
è§è
| è§è |
|---|
| Audio Output Devices API > # dom-mediadevices-selectaudiooutput > |
æµè§å¨å ¼å®¹æ§
åè§
HTMLMediaElement.setSinkId()HTMLMediaElement.sinkId- WebRTC API çä»ç»é¡µé¢