MediaDevices: selectAudioOutput() 方法

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

MediaDevices 介面的 selectAudioOutput() 方法會提示使用者選擇一個音訊輸出裝置,例如揚聲器或耳機。如果使用者選擇了裝置,該方法將授予使用者使用所選裝置作為音訊輸出目標的許可權。

選擇後,如果裝置可用,可以使用 MediaDevices.enumerateDevices() 列舉該裝置,並使用 HTMLMediaElement.setSinkId() 將其設定為音訊輸出目標。

成功時,返回的 Promise 會以描述所選裝置的 MediaDeviceInfo 物件解析。

語法

js
selectAudioOutput()
selectAudioOutput(options)

引數

options 可選

一個配置可以在使用者提示中提供哪些裝置的物件。

deviceId 可選

一個代表先前已暴露/已授權的單個裝置的 ID 的字串。如果未設定,將顯示一個包含所有可用音訊輸出裝置的提示。

此選項旨在供應用程式儲存裝置 ID,以便在將來的會話中預設使用相同的裝置。請注意,該方法可能會為同一裝置返回新的 ID,並且持久化的 ID 必須透過 selectAudioOutput() 成功傳遞後才能與 setSinkId() 一起使用。

注意: 如果使用者代理在之前的會話中已透過 selectAudioOutput() 向用戶暴露了指定的非空 ID,使用者代理可以選擇跳過提示使用者。在這種情況下,使用者代理可能會直接以該裝置 ID 解析,或者如果裝置 ID 已更改,則以該裝置的新 ID 解析。如果先前已授予指定裝置的許可權但後來已被撤銷,使用者代理可能會顯示所有允許的裝置,並突出顯示具有指定 ID 的裝置。

返回值

一個 Promise,它會以一個描述使用者所選音訊輸出裝置的 MediaDeviceInfo 物件fulfilled。

異常

NotAllowedError DOMException

如果使用了 speaker-selection 許可權策略來阻止使用音訊輸出(此外,用於選擇音訊輸出的彈出視窗也不會顯示),或者使用者在未選擇裝置的情況下關閉了選擇提示,則返回此值。

NotFoundError DOMException

如果沒有可用的音訊輸出裝置,則返回此值。

InvalidStateError DOMException

如果沒有 瞬時啟用(必須從某種 UI 事件觸發),則返回此值。

安全要求

API 的訪問受以下約束:

可以使用 Permissions API 方法 navigator.permissions.query() 查詢許可權狀態,傳遞一個包含 speaker-selection 許可權的許可權描述符。

示例

以下是一個使用 selectAudioOutput() 的示例,該函式在按鈕點選時觸發。它會輸出所選裝置的 裝置 ID 和標籤(如果可用),或者錯誤訊息。

js
document.querySelector("#myButton").addEventListener("click", () => {
  if (!navigator.mediaDevices.selectAudioOutput) {
    console.log("selectAudioOutput() not supported.");
    return;
  }

  // Display prompt and log selected device or error
  navigator.mediaDevices
    .selectAudioOutput()
    .then((device) => {
      console.log(`${device.kind}: ${device.label} id = ${device.deviceId}`);
    })
    .catch((err) => {
      console.error(`${err.name}: ${err.message}`);
    });
});

選擇輸出後,可能會產生以下結果:

bash
audiooutput: Realtek Digital Output (Realtek(R) Audio) id = 0wE6fURSZ20H0N2NbxqgowQJLWbwo+5ablCVVJwRM3k=

規範

規範
音訊輸出裝置 API
# dom-mediadevices-selectaudiooutput

瀏覽器相容性

另見