API устройств вывода звука
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в производстве тщательно проверьте таблицу совместимости браузеров.
API устройств вывода звука позволяет веб-приложениям запросить у пользователя, какое устройство вывода звука следует использовать для воспроизведения аудио.
Концепции и использование
Операционные системы обычно позволяют пользователям указывать, что звук должен воспроизводиться с динамиков, Bluetooth-гарнитуры или другого устройства вывода звука. Этот API позволяет приложениям предоставить ту же функциональность с веб-страницы.
Даже если политика разрешений это допускает, доступ к конкретному устройству вывода звука по-прежнему требует явного разрешения пользователя, так как пользователь может находиться в месте, где воспроизведение звука через некоторые устройства вывода нежелательно.
API предоставляет метод MediaDevices.selectAudioOutput(), который позволяет пользователям выбрать желаемое устройство вывода звука из тех, которые разрешены директивой speaker-selection заголовка HTTP Permissions-Policy для документа. Выбранное устройство затем имеет разрешение пользователя, позволяя перечислить его с помощью MediaDevices.enumerateDevices() и установить в качестве устройства вывода звука с помощью HTMLMediaElement.setSinkId().
Устройства аудио могут произвольно подключаться и отключаться. Приложения, которые хотят реагировать на такие изменения, могут слушать событие devicechange и использовать enumerateDevices(), чтобы определить, есть ли sinkId в возвращенных устройствах. Это может, например, вызвать приостановку или возобновление воспроизведения.
Интерфейсы
Расширения других интерфейсов
API устройств вывода звука расширяет следующие API, добавляя указанные функции:
MediaDevices
MediaDevices.selectAudioOutput()-
Этот метод запрашивает у пользователя выбор конкретного устройства вывода звука, например, динамиков или гарнитуры. Выбор устройства предоставляет разрешение пользователя на использование этого устройства и возвращает информацию об устройстве, включая его идентификатор.
HTMLMediaElement
HTMLMediaElement.setSinkId()-
Этот метод задаёт идентификатор устройства аудио для вывода, который будет использоваться, если разрешено.
HTMLMediaElement.sinkId-
Это свойство возвращает уникальный идентификатор устройства аудио, используемого для вывода, или пустую строку, если используется устройство по умолчанию пользователя.
Требования безопасности
Доступ к API ограничен следующими условиями:
-
Все методы и свойства могут быть вызваны только в безопасном контексте.
-
MediaDevices.selectAudioOutput()предоставляет пользователю разрешение на использование выбранного устройства в качестве источника вывода звука:- Доступ может быть ограничен заголовком HTTP
speaker-selectionПолитики разрешений. - Требуется временная активация пользователя. Пользователь должен взаимодействовать со страницей или элементом пользовательского интерфейса для вызова метода.
- Доступ может быть ограничен заголовком HTTP
-
HTMLMediaElement.setSinkId()устанавливает разрешённый идентификатор в качестве устройства вывода звука:- Доступ может быть ограничен заголовком HTTP
speaker-selectionПолитики разрешений. - Требуется разрешение пользователя для установки нестандартного идентификатора устройства.
- Это может произойти при выборе в запросе, запущенном
MediaDevices.selectAudioOutput() - Разрешение пользователя на установку устройства вывода также подразумевается, если пользователь уже предоставил разрешение на использование устройства ввода медиа в той же группе с помощью
MediaDevices.getUserMedia().
- Это может произойти при выборе в запросе, запущенном
- Доступ может быть ограничен заголовком HTTP
Примеры
Вот пример использования selectAudioOutput(), внутри функции, которая запускается при нажатии кнопки, а затем установка выбранного устройства в качестве устройства вывода звука.
Код сначала проверяет, поддерживается ли selectAudioOutput(), и если поддерживается, использует его для выбора вывода и возвращает идентификатор устройства device ID. Затем мы воспроизводим звук с помощью устройства вывода по умолчанию, а затем вызываем setSinkId() для переключения на выбранное устройство вывода.
document.querySelector("#myButton").addEventListener("click", async () => {
if (!navigator.mediaDevices.selectAudioOutput) {
console.log("selectAudioOutput() not supported or not in secure context.");
return;
}
// Display prompt to select device
const audioDevice = await navigator.mediaDevices.selectAudioOutput();
// Create an audio element and start playing audio on the default device
const audio = document.createElement("audio");
audio.src = "https://example.com/audio.mp3";
audio.play();
// Change the sink to the selected audio output device.
audio.setSinkId(audioDevice.deviceId);
});
Обратите внимание, что если вы выведете подробности вывода, они могут выглядеть примерно так:
console.log(
`${audioDevice.kind}: ${audioDevice.label} id = ${audioDevice.deviceId}`,
);
// audiooutput: Realtek Digital Output (Realtek(R) Audio) id = 0wE6fURSZ20H0N2NbxqgowQJLWbwo+5ablCVVJwRM3k=
Спецификации
| Спецификация |
|---|
| API устройств вывода звука |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Audio_Output_Devices_API |
49 | 17 | 116 | 36 | Нет | НетНедоступно из-за ограничения в Android, см. ошибку 41276355. |
НетНедоступно из-за ограничения в Android, см. ошибку 1473346. |
НетНедоступно из-за ограничения в Android, см. ошибку 41276355. |
Нет | НетНедоступно из-за ограничения в Android, см. ошибку 41276355. |
НетНедоступно из-за ограничения в Android, см. ошибку 41276355. |
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Audio_Output_Devices_API |
49 | 17 | 116 | 36 | Нет | НетНедоступно из-за ограничения в Android, см. ошибку 41276355. |
НетНедоступно из-за ограничения в Android, см. ошибку 1473346. |
НетНедоступно из-за ограничения в Android, см. ошибку 41276355. |
Нет | НетНедоступно из-за ограничения в Android, см. ошибку 41276355. |
НетНедоступно из-за ограничения в Android, см. ошибку 41276355. |
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Audio_Output_Devices_API |
Нет | Нет | 116 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
api.MediaDevices.selectAudioOutput
Таблицы BCD загружаются только в браузере
api.HTMLMediaElement.setSinkId
Таблицы BCD загружаются только в браузере
api.HTMLMediaElement.sinkId
Таблицы BCD загружаются только в браузере
http.headers.Permissions-Policy.speaker-selection
Таблицы BCD загружаются только в браузере
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Audio_Output_Devices_API