Работа с источниками медиаданных
Для работы с устройствами ввода-вывода медиаданных (микрофон, динамики, камера, экран) SDK предоставляет интерфейс localDevices
.
Медиаданные обрабатываются в потоках (MediaStream
), которые имеют следующие особенности:
- Один
MediaStream
можно подключить только к одной комнате, даже если их открыто несколько. MediaStream
можно подключать к комнате в любой момент конференции.- При первом создании
MediaStream
нужно получить от пользователя разрешение на доступ к устройствам ввода. - После завершения использования нужно прекращать работу всех созданных
MediaStream
. - Устройства вывода звука (АudioOutput) доступны в ограниченном списке браузеров, основанных на Chromium.
Запрос разрешения на использование микрофона и камеры
Разрешение пользователя на доступ к устройствам ввода нужно получать при первом создании MediaStream
.
При получении MediaStream
вызывается метод requestUserMediaPermissions
:
import { getLocalDevices, MEDIA_PERMISSION } from '@salutejs/jazz-sdk-web';
const localDevices = getLocalDevices(sdk);
const { audio, video } = await localDevices.requestUserMediaPermissions(
'audio',
'video',
);
if (audio === MEDIA_PERMISSION.GRANTED) {
// Доступ к записи аудио с микрофона предоставлен
}
if (audio === MEDIA_PERMISSION.DENIED) {
// Доступ к записи аудио с микрофона ограничен
}
if (video === MEDIA_PERMISSION.GRANTED) {
// Доступ к записи видео с камеры предоставлен
}
if (video === MEDIA_PERMISSION.DENIED) {
// Доступ к записи видео с камеры ограничен
}
Проверка разрешения пользователя
Проверка наличия прав доступа к устройствам ввода выполняется с помощью метода localDevices.userMediaPermissions.get()
.
Если приложение не запрашивало доступ к устройствам, то в ответ по умолчанию возвращается MEDIA_PERMISSION.UNKNOWN
:
import { getLocalDevices, MEDIA_PERMISSION } from '@salutejs/jazz-sdk-web';
const localDevices = getLocalDevices(sdk);
const { audio, video } = localDevices.userMediaPermissions.get();
if (audio === MEDIA_PERMISSION.UNKNOWN) {
// Доступ к записи аудио с микрофона не запрошен
}
if (video === MEDIA_PERMISSION.UNKNOWN) {
// Доступ к записи видео с камеры не запрошен
}
Получение списка доступных устройств
Список устройств становится доступен автоматически после получения разрешения пользователя:
import { getLocalDevices } from '@salutejs/jazz-sdk-web';
const localDevices = getLocalDevices(sdk);
const audioInputDevices = localDevices.audioInputDevices.get();
const audioOutputDevices = localDevices.audioOutputDevices.get();
const videoInputDevices = localDevices.audioOutputDevices.get();
Получение установленных устройств
Пример получения списка установленных устройств:
import { getLocalDevices } from '@salutejs/jazz-sdk-web';
const localDevices = getLocalDevices(sdk);
const audioInput = localDevices.audioInput.get();
const audioOutput = localDevices.audioOutput.get();
const videoInput = localDevices.videoInput.get();
При инициализации JazzSdk
вы можете передать идентификатор устройства, которое пользователь выбрал раньше.
Если этого не сделать, то будет выбрано первое устройство из списка доступных.
Подключение выбранного пользователем устройства
Если у пользователя есть устройства с переданными идентификаторами, то они будут выбраны по умолчанию.
Для подключения выбранного пользователем устройства:
- Подпишитесь на изменение идентификатора устройства.
- Сохраните новые значения идентификаторов устройств в произвольном хранилище, например, в localStorage.
- При инициализации
JazzSdk
передайте в аргументах начальное состояние идентификаторов устройств.
Пример:
import { createJazzWebSdk, JazzSdk } from '@salutejs/jazz-sdk-web';
const jazzSdk: JazzSdk = await createJazzWebSdk({
audioInputDeviceId: localStorage.getItem('audioInputDeviceId'),
audioOutputDeviceId: localStorage.getItem('audioOutputDeviceId'),
videoInputDeviceId: localStorage.getItem('videoInputDeviceId'),
});
Работа с динамическими потоками медиаданных
SaluteJazz SDK для Web предоставляет возможность автоматически изменять потоки медиаданных при смене идентификатора устройства.
Получение динамических потоков медиаданных:
import { getLocalDevices } from '@salutejs/jazz-sdk-web';
const localDevices = getLocalDevices(sdk);
const selectedAudioInputMediaStream =
await localDevices.getSelectedAudioInputStream();
const selectedVideoInputMediaStream =
await localDevices.getSelectedVideoInputStream();
Выбор нового устройства для работы с медиаданными:
import { getLocalDevices } from '@salutejs/jazz-sdk-web';
const localDevices = getLocalDevices(sdk);
await localDevices.selectAudioInput(audioDevice);
await localDevices.selectVideoInput(videoDevice);
await localDevices.selectAudioOutput(audioOutputDevice);
Получение потока медиаданных с помощью идентификатора устройства
import { getLocalDevices } from '@salutejs/jazz-sdk-web';
const localDevices = getLocalDevices(sdk);
const audioInputMediaStream = await localDevices.getAudioInputStream(
audioDevice,
);
const videoInputMediaStream = await localDevices.getVideoInputStream(
videoDevice,
);
Завершение работы потока медиаданных
Созданные потоки медиаданных подключены к устройствам ввода-вывода, что ведет к расходу ресурсов.
Для экономии ресурсов своевременно завершайте работу потоков:
import { getLocalDevices } from '@salutejs/jazz-sdk-web';
const localDevices = getLocalDevices(sdk);
await localDevices.releaseMediaStream(someMediaStream);
Справка
Методы
Псевдонимы типов
- LocalAudioInputDevice
- LocalAudioOutputDevice
- LocalDevicesEvent
- LocalDevicesEventAddTrack
- LocalDevicesEventAudioAGCChanged
- LocalDevicesEventAudioInputChanged
- LocalDevicesEventAudioOutputChanged
- LocalDevicesEventDisposeTrack
- LocalDevicesEventLocalTrackUpdated
- LocalDevicesEventMediaDevicesChanged
- LocalDevicesEventMuteTrackChanged
- LocalDevicesEventPermissionsChanged
- LocalDevicesEventRemoveTrack
- LocalDevicesEventVideoInputChanged
- LocalDevicesManager
- LocalMediaDevice
- LocalMediaDeviceId
- LocalMediaDeviceKind
- LocalVideoInputDevice
- UserMediaPermissionState
- UserMediaType