ym88659208ym87991671
Работа с источниками медиаданных | Документация для разработчиков

Работа с источниками медиаданных

Обновлено 9 ноября 2023

Для работы с устройствами ввода-вывода медиаданных (микрофон, динамики, камера, экран) 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 вы можете передать идентификатор устройства, которое пользователь выбрал раньше. Если этого не сделать, то будет выбрано первое устройство из списка доступных.

Подключение выбранного пользователем устройства

Если у пользователя есть устройства с переданными идентификаторами, то они будут выбраны по умолчанию.

Для подключения выбранного пользователем устройства:

  1. Подпишитесь на изменение идентификатора устройства.
  2. Сохраните новые значения идентификаторов устройств в произвольном хранилище, например, в localStorage.
  3. При инициализации 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'),
});

Работа с динамическими потоками медиаданных

SberJazz 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);

Справка

Методы

Псевдонимы типов

Переменные

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.