Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии. Функции в предварительной версии общедоступны и могут использоваться всеми новыми и существующими клиентами Майкрософт.
Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или могут быть ограничены.
Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
Обзор
API ограничений видео позволяет разработчикам управлять качеством видео из своих видеозвонков. В этом кратком руководстве показано, как использовать API для задания ограничений.
Предварительные условия
См. краткое руководство по настройке примера приложения с голосовыми звонками.
Классы
| Имя | Описание |
|---|---|
| Видеоограничения | Используется для хранения как входящих ограничений видео, так и исходящих ограничений видео. |
| ОграниченияИсходящегоВидео | Используется для указания ограничений (MaxWidth \| MaxHeight \| MaxFrameRate) для исходящих потоков видео. |
| ОграниченияВходящегоВидео | Используется для указания ограничений (MaxWidth \| MaxHeight) для входящих видеопотоков. |
Использование ограничений видео
В следующих разделах объясняется, как ограничения видео могут быть заданы для входящих и /или исходящих видеопотоков в разное время вызова.
Настройка ограничений видео перед началом вызова
Для входящих видеопотоков необходимо добавить IncomingVideoConstraints в объект IncomingVideoOptions.
var IncomingVideoOptions = new IncomingVideoOptions()
{
Constraints = new IncomingVideoConstraints()
{
MaxWidth = /*value*/,
MaxHeight = /*value*/
},
// other options
// ...
}
Для исходящих видеопотоков необходимо добавить OutgoingVideoConstraints в объект OutgoingVideoOptions.
var OutgoingVideoOptions = new OutgoingVideoOptions()
{
Constraints = new OutgoingVideoConstraints()
{
MaxWidth = /*value*/,
MaxHeight = /*value*/,
MaxFrameRate = /*value*/
},
// other options
// ...
}
Так как параметры используются для запуска и присоединения вызова, ограничения можно применить к потокам автоматически. Например:
var joinCallOptions = new JoinCallOptions()
{
IncomingVideoOptions = new IncomingVideoOptions()
{
Constraints = new IncomingVideoConstraints()
{
MaxWidth = /*value*/,
MaxHeight = /*value*/
},
// other options
// ...
},
OutgoingVideoOptions = new OutgoingVideoOptions()
{
Constraints = new OutgoingVideoConstraints()
{
MaxWidth = /*value*/,
MaxHeight = /*value*/,
MaxFrameRate = /*value*/
},
// other options
// ...
}
};
await callAgent.JoinAsync(locator, joinCallOptions);
Настройка ограничений видео во время вызова
Вместо настройки ограничений видео перед началом вызова можно также динамически настраивать ограничения видео во время звонка. Необходимо вызвать SetVideoConstraints для класса типа Call и указать ограничения.
OutgoingVideoConstraints outgoingVideoConstraints = new OutgoingVideoConstraints()
{
outgoingVideoConstraints.MaxWidth = /*value*/ ;
outgoingVideoConstraints.MaxHeight = /*value*/ ;
outgoingVideoConstraints.MaxFrameRate = /*value*/ ;
};
IncomingVideoConstraints incomingVideoConstraints = new IncomingVideoConstraints()
{
incomingVideoConstraints.MaxWidth = /*value*/ ;
incomingVideoConstraints.MaxHeight = /*value*/ ;
};
VideoConstraints constraints = new VideoConstraints();
constraints.OutgoingVideoConstraints = outgoingVideoConstraints;
constraints.IncomingVideoConstraints = incomingVideoConstraints;
call.SetVideoConstraints(constraints);
Чтобы сбросить или удалить ранее заданные ограничения видео, необходимо следовать предыдущему шаблону и указать 0 значение ограничения. Предоставление значений для IncomingVideoConstraints или OutgoingVideoConstraints не сбрасывает и не удаляет ограничения, и ограничения со значением null игнорируются.
Ограничения
Примечание.
Помните об этих ограничениях при использовании API ограничений видео. Некоторые ограничения следует устранить в будущих выпусках.
Существуют некоторые известные ограничения для текущего API ограничений видео.
Ограничение — это максимальное ограничение, что означает, что возможное ограничение может быть указанным значением или меньшим. Нет никакой гарантии, что фактическое значение остается таким же, как и указанное пользователем.
Если пользователь задает слишком малое значение ограничения, пакет SDK использует наименьшее доступное значение, поддерживаемое.
Для настройки
OutgoingVideoConstraintsво время вызова текущий видеопоток не выбирает указанные ограничения самостоятельно. Чтобы ограничения вступили в силу, необходимо остановить и перезапустить исходящее видео.IncomingVideoConstraintsВ настоящее время является ограничением, предпочитаемым пользователем, а не жестким, что означает, что в зависимости от сети и оборудования фактическое значение, полученное, может по-прежнему превышать набор ограничений.
Статистика мультимедиа
Чтобы оценить и сравнить качество видео после применения ограничений видео, вы можете получить доступ к API MediaStats для получения сведений о разрешении видео и скорости потока. Статистика мультимедиа также включает другие детализированные статистические данные, связанные с потоками, такими как дрожь, потеря пакетов, время кругового пути и т. д.
Внимание
Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии. Функции в предварительной версии общедоступны и могут использоваться всеми новыми и существующими клиентами Майкрософт.
Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или могут быть ограничены.
Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
Обзор
API ограничений видео позволяет разработчикам управлять качеством видео из своих видеозвонков. В этой статье показано, как использовать API для задания ограничений.
Предварительные условия
См. краткое руководство по настройке примера приложения с голосовыми звонками.
Классы
| Имя | Описание |
|---|---|
| Видеоограничения | Используется для хранения как входящих ограничений видео, так и исходящих ограничений видео. |
| ОграниченияИсходящегоВидео | Используется для указания ограничений (maxWidth \| maxHeight \| maxFrameRate) для исходящих потоков видео. |
| ОграниченияВходящегоВидео | Используется для указания ограничений (maxWidth \| maxHeight) для входящих видеопотоков. |
Использование ограничений видео
В следующих разделах объясняется, как ограничения видео могут быть заданы для входящих и /или исходящих видеопотоков в разное время вызова.
Настройка ограничений видео перед началом вызова
Для входящих видеопотоков необходимо добавить IncomingVideoConstraints в IncomingVideoOptions.
IncomingVideoConstraints incomingVideoConstraints = new IncomingVideoConstraints();
incomingVideoConstraints.setMaxWidth(/*value*/);
incomingVideoConstraints.setMaxHeight(/*value*/);
// ...
IncomingVideoOptions incomingVideoOptions = new IncomingVideoOptions();
incomingVideoOptions.setConstraints(incomingVideoConstraints);
Для исходящих видеопотоков добавьте OutgoingVideoConstraints в OutgoingVideoOptions.
OutgoingVideoConstraints outgoingVideoConstraints = new OutgoingVideoConstraints()
outgoingVideoConstraints.setMaxWidth(/*value*/);
outgoingVideoConstraints.setMaxHeight(/*value*/);
outgoingVideoConstraints.setMaxFrameRate(/*value*/);
// ...
OutgoingVideoOptions outgoingVideoOptions = new OutgoingVideoOptions();
outgoingVideoOptions.setConstraints(outgoingVideoConstraints);
Так как параметры используются для запуска и присоединения вызова, вы можете автоматически применять ограничения к потокам. Например:
JoinCallOptions joinCallOptions = new JoinCallOptions();
joinCallOptions.setIncomingVideoOptions(incomingVideoOptions);
joinCallOptions.setOutgoingVideoOptions(outgoingVideoOptions);
callAgent.Join(context, locator, joinCallOptions);
Настройка ограничений видео во время вызова
Вместо настройки ограничений видео перед началом вызова можно также динамически настраивать ограничения видео во время звонка. Необходимо вызвать setVideoConstraints для класса типа Call и указать ограничения.
OutgoingVideoConstraints outgoingVideoConstraints = new OutgoingVideoConstraints();
outgoingVideoConstraints.setMaxWidth(/*value*/);
outgoingVideoConstraints.setMaxHeight(/*value*/);
outgoingVideoConstraints.setMaxFrameRate(/*value*/);
IncomingVideoConstraints incomingVideoConstraints = new IncomingVideoConstraints();
incomingVideoConstraints.setMaxWidth(/*value*/);
incomingVideoConstraints.setMaxHeight(/*value*/);
VideoConstraints constraints = new VideoConstraints();
constraints.setOutgoingVideoConstraints(outgoingVideoConstraints);
constraints.setIncomingVideoConstraints(incomingVideoConstraints);
call.setVideoConstraints(constraints);
Чтобы сбросить или удалить ранее заданные ограничения видео, следуйте приведенному выше шаблону и укажите 0 значение ограничения. Предоставление значений для IncomingVideoConstraints или OutgoingVideoConstraints не сбрасывает и не удаляет ограничения, а ограничения со значением null игнорируются.
Ограничения
Примечание.
Помните об этих ограничениях при использовании API ограничений видео. Некоторые ограничения следует устранить в будущих выпусках.
Существуют некоторые известные ограничения для текущего API ограничений видео.
Ограничение — это максимальное ограничение, что означает, что возможное ограничение может быть указанным значением или меньшим. Нет никакой гарантии, что фактическое значение остается таким же, как и указанное пользователем.
Если пользователь задает слишком малое значение ограничения, пакет SDK использует наименьшее доступное значение, поддерживаемое.
Для настройки
OutgoingVideoConstraintsво время вызова текущий видеопоток не выбирает указанные ограничения самостоятельно. Чтобы ограничения вступили в силу, необходимо остановить и перезапустить исходящее видео.IncomingVideoConstraintsВ настоящее время является ограничением, предпочитаемым пользователем, а не жестким, что означает, что в зависимости от сети и оборудования фактическое значение, полученное, может по-прежнему превышать набор ограничений.
Статистика мультимедиа
Чтобы оценить и сравнить качество видео после применения ограничений видео, вы можете получить доступ к API MediaStats для получения сведений о разрешении видео и скорости потока. Статистика мультимедиа также включает другие детализированные статистические данные, связанные с потоками, такими как дрожь, потеря пакетов, время кругового пути и т. д.
Внимание
Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии. Функции в предварительной версии общедоступны и могут использоваться всеми новыми и существующими клиентами Майкрософт.
Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или могут быть ограничены.
Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
Обзор
API ограничений видео позволяет разработчикам управлять качеством видео из своих видеозвонков. В этом кратком руководстве показано, как использовать API для задания ограничений.
Предварительные условия
См. краткое руководство по настройке примера приложения с голосовыми звонками.
Классы
| Имя | Описание |
|---|---|
| Видеоограничения | Используется для хранения как входящих ограничений видео, так и исходящих ограничений видео. |
| ОграниченияИсходящегоВидео | Используется для указания ограничений (maxWidth \| maxHeight \| maxFrameRate) для исходящих потоков видео. |
| ОграниченияВходящегоВидео | Используется для указания ограничений (maxWidth \| maxHeight) для входящих видеопотоков. |
Использование ограничений видео
В следующих разделах объясняется, как ограничения видео могут быть заданы для входящих и /или исходящих видеопотоков в разное время вызова.
Настройка ограничений видео перед началом вызова
Для входящих видеопотоков необходимо добавить IncomingVideoConstraints в IncomingVideoOptions.
let incomingVideoConstraints = IncomingVideoConstraints()
incomingVideoConstraints.maxWidth = /*value*/
incomingVideoConstraints.maxHeight = /*value*/
// ...
let incomingVideoOptions = IncomingVideoOptions()
incomingVideoOptions.constraints = incomingVideoConstraints
Для исходящих видеопотоков необходимо добавить OutgoingVideoConstraints в объект OutgoingVideoOptions.
let outgoingVideoConstraints = OutgoingVideoConstraints()
outgoingVideoConstraints.maxWidth = /*value*/
outgoingVideoConstraints.maxHeight = /*value*/
outgoingVideoConstraint.maxFrameRate = /*value*/
// ...
let outgoingVideoOptions = OutgoingVideoOptions()
outgoingVideoOptions.constraints = outgoingVideoConstraints
Так как параметры используются для запуска и присоединения вызова, ограничения можно применить к потокам автоматически. Например:
let incomingVideoConstraints = IncomingVideoConstraints()
incomingVideoConstraints.maxWidth = /*value*/
incomingVideoConstraints.maxHeight = /*value*/
let incomingVideoOptions = IncomingVideoOptions()
incomingVideoOptions.constraints = incomingVideoConstraints
let outgoingVideoConstraints = OutgoingVideoConstraints()
outgoingVideoConstraints.maxWidth = /*value*/
outgoingVideoConstraints.maxHeight = /*value*/
outgoingVideoConstraint.maxFrameRate = /*value*/
let outgoingVideoOptions = OutgoingVideoOptions()
outgoingVideoOptions.constraints = outgoingVideoConstraints
let joinCallOptions = new JoinCallOptions()
joinCallOptions.incomingVideoOptions = incomingVideoOptions
joinCallOptions.outgoingVideoOptions = outgoingVideoOptions
callAgent.join(with: locator, joinCallOptions: joinCallOptions);
Настройка ограничений видео во время вызова
Вместо настройки ограничений видео перед началом вызова можно динамически настраивать ограничения видео во время вызова. Необходимо вызвать set(videoConstraints) для класса типа Call и указать ограничения.
let outgoingVideoConstraints = OutgoingVideoConstraints()
outgoingVideoConstraints.maxWidth = /*value*/
outgoingVideoConstraints.maxHeight = /*value*/
outgoingVideoConstraint.maxFrameRate = /*value*/
let incomingVideoConstraints = IncomingVideoConstraints()
incomingVideoConstraints.maxWidth = /*value*/
incomingVideoConstraints.maxHeight = /*value*/
let videoConstraints = VideoConstraints()
videoConstraints.outgoingVideoConstraints = outgoingVideoConstraints
videoConstraints.incomingVideoConstraints = incomingVideoConstraints
call?.set(videoConstraints: videoConstraints)
Чтобы сбросить или удалить ранее заданные ограничения видео, следуйте приведенному выше шаблону и укажите 0 значение ограничения. Предоставление значений для IncomingVideoConstraints или OutgoingVideoConstraints не сбрасывает и не удаляет ограничения, а ограничения со значением null игнорируются.
Ограничения
Примечание.
Помните об этих ограничениях при использовании API ограничений видео. Некоторые ограничения следует устранить в будущих выпусках.
Существуют некоторые известные ограничения для текущего API ограничений видео.
Ограничение — это максимальное ограничение, что означает, что возможное ограничение может быть указанным значением или меньшим. Нет никакой гарантии, что фактическое значение остается таким же, как и указанное пользователем.
Если пользователь задает слишком малое значение ограничения, пакет SDK использует наименьшее доступное значение, поддерживаемое.
Для настройки
OutgoingVideoConstraintsво время вызова текущий видеопоток не выбирает указанные ограничения самостоятельно. Чтобы ограничения вступили в силу, необходимо остановить и перезапустить исходящее видео.IncomingVideoConstraintsВ настоящее время является ограничением, предпочитаемым пользователем, а не жестким, что означает, что в зависимости от сети и оборудования фактическое значение, полученное, может по-прежнему превышать набор ограничений.
Статистика мультимедиа
Чтобы оценить и сравнить качество видео после применения ограничений видео, вы можете получить доступ к API MediaStats для получения сведений о разрешении видео и скорости потока. Статистика мультимедиа также включает другие детализированные статистические данные, связанные с потоками, такими как дрожь, потеря пакетов, время кругового пути и т. д.
Вы можете задать ограничения для видео в видеозвонках, чтобы управлять его качеством на основе разрешения, частоты кадров или битрейта. В этом кратком руководстве показано, как задать ограничения видео в начале вызова и как использовать наш setConstraints метод в объекте вызова для динамического задания ограничений видео во время вызова.
Отправить ограничения для видео
пакет SDK для веб-звонков Службы коммуникации Azure поддерживает настройку максимального разрешения видео, кадра или скорости отправки клиентом. Ограничения видео отправителя поддерживаются в настольных браузерах (Chrome, Microsoft Edge, Firefox) и при использовании мобильных браузеров iOS Safari и Android Chrome.
| Поддерживаемые ограничения |
|---|
|
Входящее видео: разрешение Исходящее видео: разрешение, частота кадров, скорость передачи данных |
Настройка ограничений видео в начале вызова — исходящее видео (отправка)
Параметр ограничений видео реализован в интерфейсе Call . Чтобы использовать ограничения видео, можно указать ограничения внутри CallOptions при вызове, принять звонок или присоединиться к вызову. Необходимо указать localVideoStreams в videoOptions.
Ограничения не работают, если вы присоединяетесь к вызову только с функцией аудио и включите камеру позже. В этом случае можно динамически задать ограничения видео с помощью setConstraints метода в интерфейсе Call .
const callOptions = {
videoOptions: {
localVideoStreams: [...],
constraints: {
send: {
bitrate: {
max: 575000
},
frameHeight: {
max: 240
},
frameRate: {
max: 20
}
}
}
},
audioOptions: {
muted: false
}
};
// make a call
this.callAgent.startCall(identitiesToCall, callOptions);
// join a group call
this.callAgent.join({ groupId }, callOptions);
// accept an incoming call
this.incomingCall.accept(callOptions)
Типы ограничений видео описаны следующим образом:
export declare interface VideoOptions {
localVideoStreams?: LocalVideoStream[];
//video constraint when call starts
constraints?: VideoConstraints;
};
export declare type VideoConstraints = {
send?: VideoSendConstraints;
};
export type VideoSendConstraints = {
/**
* Resolution constraint
*/
frameHeight?: MediaConstraintRange;
/**
* FrameRate constraint
*/
frameRate?: MediaConstraintRange;
/**
* Bitrate constraint
*/
bitrate?: MediaConstraintRange;
};
export declare type MediaConstraintRange = {
max?: number;
};
При настройке видео ограничений пакет SDK выбирает ближайшее значение, которое входит в набор ограничений, чтобы значения разрешения, частоты кадров и скорости передачи данных не превышали максимальные значения ограничений. Кроме того, если значение ограничения разрешения слишком мало, пакет SDK выбирает наименьшее доступное разрешение. В этом случае высота выбранного разрешения может быть больше, чем значение ограничения.
Примечание.
Для всех bitrate, frameHeight и frameRate значение ограничения является max ограничением, что означает, что реальное значение в вызове может быть определенным значением или меньше.
Нет никакой гарантии, что разрешение отправленного видео остается в указанном разрешении.
frameHeight в VideoSendConstraints имеет другое значение, если мобильное устройство находится в вертикальном режиме. В портретном режиме это значение указывает на более короткую сторону устройства. Например, указав значение frameHeight.max 240 на устройстве 1080(W) x 1920(H) в портретной ориентации, ограничение высоты находится на стороне 1080(W). Если то же устройство находится в альбомном режиме (1920(W) x 1080(H)), ограничение находится на стороне 1080(H).
Если вы используете API MediaStats для отслеживания разрешения отправленных видео, вы можете узнать, что разрешение отправлено может измениться во время вызова. Он может идти вверх и вниз, но должен быть равен или меньше заданного значения ограничения. Это изменение разрешения является ожидаемым поведением. Браузер также имеет правило снижения качества, чтобы регулировать разрешение отправляемых данных в зависимости от условий процессора или сети.
Настройка ограничений видео во время вызова — исходящее видео (отправка)
Вы можете задать ограничения видео во время вызова с помощью setConstraints метода в объекте Call .
// For eg, when you've started a call,
const currentCall = this.callAgent.startCall(identitiesToCall, callOptions);
// To set constraints during the call,
await currentCall.setConstraints({
video: {
send: {
frameHeight: {
max: 360
},
frameRate: {
max: 15
}
}
}
});
// To set only a particular constraint (the others will stay as what they were set before, if they were set)
await currentCall.setConstraints({
video: {
send: {
bitrate: {
max: 400000
}
}
}
});
// To unset any constraint,
await currentCall.setConstraints({
video: {
send: {
frameHeight: {
max: 0
}
}
}
});
Примечание.
Установка значения ограничения как 0 отменяет все ранее установленные ограничения. Этот способ можно использовать для сброса или удаления ограничений.
Примите ограничения для видео
Управление качеством видео для входящих потоков предполагает понимание шкалы разрешений Azure Communication Services, которая является предопределенным списком видеоразрешений с предполагаемыми границами верхнего и нижнего битрейта. Когда клиент запрашивает определенное разрешение, webJS и внутренний сервер обращаются к лестнице разрешения, чтобы выделить соответствующую скорость видео, учитывая как сетевые условия, так и возможности устройства.
Определение размера отрисовки видео является важным шагом для разработчиков, направленных на управление скоростью скорости и частотой кадров входящего видеопотока. Начальное качество и разрешение видеопотока определяется размером созданного и размещенного на веб-странице рендера. Например, если отрисовщик мал, пакет SDK WebJS запрашивает меньшее разрешение. И наоборот, если отрисовщик большой, пакет SDK ACS стремится к оптимальному разрешению с сервера. Этот процесс гарантирует, что качество видео оптимизировано на основе требований и возможностей клиента. Когда клиент запрашивает определенное разрешение, сервер обращается к лестнице разрешения, чтобы выделить соответствующую скорость видео, учитывая как сетевые условия, так и возможности устройства.
Столбец разрешения в таблице показывает, из чего состоит лестница разрешения в SDK вызовов WebJS, включая предполагаемые скорости входящего видео для различных разрешений. Эти сведения помогают разработчикам понять связь между разрешением, скоростью передачи и частотой кадров и приблизительной пропускной способностью конкретного входящего видеопотока. Например, разрешение 1280x720 потоков при 30 FPS, когда клиент использует приблизительную минимальную скорость в 1 Мбит/с и приблизительную максимальную скорость в 2,5 Мбит/с.
Пакет SDK для вызовов WebJS Службы коммуникации Azure настраивает размер видео на основе доступной пропускной способности, чтобы обеспечить согласованный обмен данными. Пакет SDK для вызовов WebJS настраивает размер видео на основе алгоритмов, отслеживающих сетевые условия. Если пропускная способность сети достаточна, пакет SDK увеличивает разрешение видео до максимального уровня на основе размера отрисовки, определенного на веб-странице. И наоборот, если пропускная способность ограничена, она уменьшает разрешение видео, чтобы предотвратить буферизацию и поддерживать стабильное подключение.
В следующей таблице представлена лестница разрешений и предполагаемые битрейты для каждого разрешения и связанной частоты кадров (FPS), обеспеченной при этом разрешении.
| Высота | Ширина | кадры в секунду (FPS) | Минимальный битрейт (Мбит/с) | Максимальная скорость (MBps) |
|---|---|---|---|---|
| 1080 | 1920 | 30 | 1,75 | 10 |
| 720 | 1280 | 30 | 1 | 2,5 |
| 540 | 960 | 30 | 0,5 | 1,125 |
| 360 | 640 | 30 | 0,4 | 0,57 |
| 240 | 426 | 15 | 0,125 | 0,5 |
| 240 | 320 | 15 | 0,2 | 0,175 |
Использование статики мультимедиа для понимания влияния на ограничения видео
Чтобы оценить и сравнить качество видео после применения ограничений видео, можно получить доступ к API MediaStats для получения сведений о разрешении видео и скорости потока отправки. Статистика мультимедиа также включает другие детализированные статистические данные, связанные с потоками, такими как дрожь, потеря пакетов, время кругового пути и т. д.
const mediaStatsFeature = call.feature(Features.MediaStats);
const mediaStatsCollector = mediaStatsFeature.createCollector();
mediaStatsCollector.on('sampleReported', (sample: SDK.MediaStatsReportSample) => {
// process the stats for the call.
console.log(sample);
});
Следующие шаги
- Сведения о концептуальном документе о ограничениях видео
- Дополнительные сведения о возможностях пакета SDK для вызовов