Поделиться через


Краткое руководство. Настройка ограничений видео в вызывающем приложении

Внимание

Функции, описанные в этой статье, в настоящее время находятся в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Обзор

API ограничений видео позволяет разработчикам управлять качеством видео из своих видеозвонков. В этом кратком руководстве показано, как использовать API для задания ограничений.

Необходимые компоненты

См. краткое руководство по настройке примера приложения с голосовыми звонками.

Классы

Имя Описание
VideoConstraints Используется для хранения как входящих ограничений видео, так и исходящих ограничений видео.
ИсходящиеVideoConstraints Используется для указания ограничений (MaxWidth | MaxHeight | MaxFrameRate) для исходящих потоков видео.
ВходящиеVideoConstraints Используется для указания ограничений (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);

Настройка ограничений видео во время вызова

Вместо настройки ограничений видео перед началом вызова можно также динамически настраивать ограничения видео во время звонка. Необходимо вызвать SetVideoConstraintsCall класс типа и указать ограничения.


    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 значение ограничения. Предоставление null значений для любого IncomingVideoConstraints или не OutgoingVideoConstraints будет сбрасывать или удалять ограничения, а ограничения со null значением будут игнорироваться.

Ограничения

Примечание.

Убедитесь, что вы знаете об этих ограничениях при использовании API ограничений видео. Некоторые ограничения будут удалены в будущих выпусках.

Существуют некоторые известные ограничения для текущего API ограничений видео.

  • Ограничение — это максимальное ограничение, что означает, что возможное ограничение может быть указанным значением или меньшим. Нет никакой гарантии, что фактическое значение остается таким же, как и указанное пользователем.

  • Если пользователь задает слишком небольшое значение ограничения, пакет SDK будет использовать наименьшее доступное значение, поддерживаемое.

  • Для настройки OutgoingVideoConstraints во время вызова текущий текущий видеопоток не автоматически выбирает указанные ограничения. Чтобы сделать ограничения вступили в силу, необходимо остановить и перезапустить исходящее видео.

  • IncomingVideoConstraints В настоящее время является ограничением, предпочитаемым пользователем, а не жестким, что означает, что в зависимости от сети и оборудования фактическое значение, полученное, может по-прежнему превышать набор ограничений.

Статистика мультимедиа

Чтобы оценить и сравнить качество видео после применения ограничений видео, вы можете получить доступ к API MediaStats для получения сведений о разрешении видео и скорости потока. Статистика мультимедиа также включает другие детализированные статистические данные, связанные с потоками, такими как дрожь, потеря пакетов, время кругового пути и т. д.

Внимание

Функции, описанные в этой статье, в настоящее время находятся в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Обзор

API ограничений видео позволяет разработчикам управлять качеством видео из своих видеозвонков. В этом кратком руководстве показано, как использовать API для задания ограничений.

Необходимые компоненты

См. краткое руководство по настройке примера приложения с голосовыми звонками.

Классы

Имя Описание
VideoConstraints Используется для хранения как входящих ограничений видео, так и исходящих ограничений видео.
ИсходящиеVideoConstraints Используется для указания ограничений (maxWidth | maxHeight | maxFrameRate) для исходящих потоков видео.
ВходящиеVideoConstraints Используется для указания ограничений (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);

Настройка ограничений видео во время вызова

Вместо настройки ограничений видео перед началом вызова можно также динамически настраивать ограничения видео во время звонка. Необходимо вызвать setVideoConstraintsCall класс типа и указать ограничения.


    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 значение ограничения. Предоставление null значений для любого IncomingVideoConstraints или не OutgoingVideoConstraints будет сбрасывать или удалять ограничения, а ограничения со null значением будут игнорироваться.

Ограничения

Примечание.

Убедитесь, что вы знаете об этих ограничениях при использовании API ограничений видео. Некоторые ограничения будут удалены в будущих выпусках.

Существуют некоторые известные ограничения для текущего API ограничений видео.

  • Ограничение — это максимальное ограничение, что означает, что возможное ограничение может быть указанным значением или меньшим. Нет никакой гарантии, что фактическое значение остается таким же, как и указанное пользователем.

  • Если пользователь задает слишком небольшое значение ограничения, пакет SDK будет использовать наименьшее доступное значение, поддерживаемое.

  • Для настройки OutgoingVideoConstraints во время вызова текущий текущий видеопоток не автоматически выбирает указанные ограничения. Чтобы сделать ограничения вступили в силу, необходимо остановить и перезапустить исходящее видео.

  • IncomingVideoConstraints В настоящее время является ограничением, предпочитаемым пользователем, а не жестким, что означает, что в зависимости от сети и оборудования фактическое значение, полученное, может по-прежнему превышать набор ограничений.

Статистика мультимедиа

Чтобы оценить и сравнить качество видео после применения ограничений видео, вы можете получить доступ к API MediaStats для получения сведений о разрешении видео и скорости потока. Статистика мультимедиа также включает другие детализированные статистические данные, связанные с потоками, такими как дрожь, потеря пакетов, время кругового пути и т. д.

Внимание

Функции, описанные в этой статье, в настоящее время находятся в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Обзор

API ограничений видео позволяет разработчикам управлять качеством видео из своих видеозвонков. В этом кратком руководстве показано, как использовать API для задания ограничений.

Необходимые компоненты

См. краткое руководство по настройке примера приложения с голосовыми звонками.

Классы

Имя Описание
VideoConstraints Используется для хранения как входящих ограничений видео, так и исходящих ограничений видео.
ИсходящиеVideoConstraints Используется для указания ограничений (maxWidth | maxHeight | maxFrameRate) для исходящих потоков видео.
ВходящиеVideoConstraints Используется для указания ограничений (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 значение ограничения. Предоставление null значений для любого IncomingVideoConstraints или не OutgoingVideoConstraints будет сбрасывать или удалять ограничения, а ограничения со null значением будут игнорироваться.

Ограничения

Примечание.

Убедитесь, что вы знаете об этих ограничениях при использовании API ограничений видео. Некоторые ограничения будут удалены в будущих выпусках.

Существуют некоторые известные ограничения для текущего API ограничений видео.

  • Ограничение — это максимальное ограничение, что означает, что возможное ограничение может быть указанным значением или меньшим. Нет никакой гарантии, что фактическое значение остается таким же, как и указанное пользователем.

  • Если пользователь задает слишком небольшое значение ограничения, пакет SDK будет использовать наименьшее доступное значение, поддерживаемое.

  • Для настройки OutgoingVideoConstraints во время вызова текущий текущий видеопоток не автоматически выбирает указанные ограничения. Чтобы сделать ограничения вступили в силу, необходимо остановить и перезапустить исходящее видео.

  • IncomingVideoConstraints В настоящее время является ограничением, предпочитаемым пользователем, а не жестким, что означает, что в зависимости от сети и оборудования фактическое значение, полученное, может по-прежнему превышать набор ограничений.

Статистика мультимедиа

Чтобы оценить и сравнить качество видео после применения ограничений видео, вы можете получить доступ к API MediaStats для получения сведений о разрешении видео и скорости потока. Статистика мультимедиа также включает другие детализированные статистические данные, связанные с потоками, такими как дрожь, потеря пакетов, время кругового пути и т. д.

Вы можете задать ограничения видео в вызовах для управления качеством видео на основе разрешения или кадровой скорости или скорости в видеозвонках. В этом кратком руководстве показано, как задать ограничения видео в начале вызова и как использовать наш setConstraints метод в объекте вызова для динамического задания ограничений видео во время вызова.

Отправка ограничений видео

пакет SDK для веб-звонков Службы коммуникации Azure поддерживает настройку максимального разрешения видео, кадра или скорости отправки клиентом. Ограничения видео отправителя поддерживаются в браузерах классических приложений (Chrome, 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 constriant
     */
    bitrate?: MediaConstraintRange;
};

export declare type MediaConstraintRange = {
    max?: number;
};

При настройке ограничений видео пакет SDK выбирает ближайшее значение, которое входит в набор ограничений, чтобы предотвратить значения разрешения, кадра и скорости, чтобы не превышать максимальный набор значений ограничений. Кроме того, если значение ограничения разрешения слишком мало, пакет SDK выбирает наименьшее доступное разрешение. В этом случае высота выбранного разрешения может быть больше, чем значение ограничения.

Примечание.

Для всех bitrate, frameHeight и frameRateзначение ограничения является max ограничением, что означает фактическое значение в вызове может быть указанным значением или меньше. Отсутствует gurantee, что разрешение отправленного видео останется в указанном разрешении.

VideoSendConstraints Он frameHeight имеет другое значение, если мобильное устройство находится в книжном режиме. В книжном режиме это значение указывает на более короткую сторону устройства. Например, указывая 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 и отмена настройки всех ранее заданных ограничений. Этот способ можно использовать для сброса или удаления ограничений.


Получение ограничений видео

Чтобы управлять разрешением на стороне получателя с помощью пакета SDK для веб-вызовов Службы коммуникации Azure, можно настроить размер отрисовщика этого видео. Вызывающий пакет SDK автоматически настраивает полученное разрешение на основе измерений отрисовщика. Пакет SDK не запрашивает входящие видеопотоки (ширину и высоту), который может помещаться в окно видео отрисовщика.

Использование статики мультимедиа для понимания влияния на ограничения видео

Чтобы оценить и сравнить качество видео после применения ограничений видео, можно получить доступ к 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);
});

Следующие шаги

Дополнительные сведения см. в следующих статьях: