Snabbstart: Ange videobegränsningar i din samtalsapp

Viktigt!

Funktioner som beskrivs i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Översikt

API:et för videobegränsningar gör det möjligt för utvecklare att styra videokvaliteten inifrån sina videosamtal. I den här snabbstartsguiden visar vi hur du använder API:et för att ange begränsningarna.

Förutsättningar

Gå till snabbstarten för röstsamtal för att konfigurera en exempelapp med röstsamtal.

Klasser

Name beskrivning
VideoConstraints Används för att lagra både inkommande videobegränsningar och utgående videobegränsningar.
UtgåendeVideoConstraints Används för att ange begränsningar (MaxWidth | MaxHeight | MaxFrameRate) för utgående videoströmmar.
IncomingVideoConstraints Används för att ange begränsningar (MaxWidth | MaxHeight) för inkommande videoströmmar.

Använda videobegränsningar

I följande avsnitt förklaras hur videobegränsningarna kan ställas in för inkommande och/eller utgående videoströmmar vid olika tidpunkter för ett samtal.

Ange videobegränsningar innan du startar ett anrop

För inkommande videoströmmar måste ett IncomingVideoConstraints läggas till i IncomingVideoOptions.

    var IncomingVideoOptions = new IncomingVideoOptions()
    {
        Constraints = new IncomingVideoConstraints() 
        { 
            MaxWidth = /*value*/, 
            MaxHeight = /*value*/ 
        },
        // other options
        // ...
    }

För utgående videoströmmar måste ett OutgoingVideoConstraints läggas till i OutgoingVideoOptions.

    var OutgoingVideoOptions = new OutgoingVideoOptions()
    {
        Constraints = new OutgoingVideoConstraints() 
        { 
            MaxWidth = /*value*/, 
            MaxHeight = /*value*/, 
            MaxFrameRate = /*value*/ 
        },
        // other options
        // ...
    }

Eftersom alternativen används för att starta/ansluta ett anrop kan begränsningarna sedan tillämpas på strömmarna automatiskt. Till exempel:

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

Ange videobegränsningar under ett anrop

I stället för att ställa in videobegränsningarna innan du startar ett anrop kan du också dynamiskt justera videobegränsningarna under ett anrop. Du måste anropa SetVideoConstraints din Call typklass och ange begränsningarna.


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

Om du vill återställa/ta bort de videobegränsningar som du tidigare angett måste du följa ovanstående mönster och ange 0 som ett villkorsvärde. Om du anger null värden för antingen IncomingVideoConstraints eller OutgoingVideoConstraints inte återställs/tar du bort begränsningarna och begränsningarna med ett null värde ignoreras.

Begränsningar

Kommentar

Se till att du är medveten om dessa begränsningar när du använder API:et för videobegränsningar. Vissa av begränsningarna tas bort i framtida versioner.

Det finns några kända begränsningar för det aktuella API:et för videobegränsningar.

  • Villkoret är en maxbegränsning , vilket innebär att det möjliga begränsningsvärdet kan vara det angivna värdet eller mindre. Det finns ingen garanti för att det faktiska värdet förblir detsamma som angivet av användaren.

  • När användaren anger ett villkorsvärde som är för litet använder SDK det minsta tillgängliga värdet som stöds.

  • För att ställa in OutgoingVideoConstraints under ett anrop hämtar den aktuella pågående videoströmmen inte automatiskt de angivna begränsningarna. För att begränsningarna ska börja gälla måste du stoppa och starta om den utgående videon.

  • IncomingVideoConstraints för närvarande är ett användarförvalt villkor i stället för en hård begränsning, vilket innebär att det faktiska värdet som tas emot fortfarande kan överskrida begränsningsuppsättningen beroende på ditt nätverk och maskinvara.

Mediestatistik

Om du vill utvärdera och jämföra videokvaliteten efter att du har tillämpat videobegränsningarna kan du komma åt MediaStats-API :et för att hämta videoupplösning och bithastighetsinformation om strömmen. Mediestatistiken innehåller också annan detaljerad statistik som rör strömmarna, till exempel jitter, paketförlust, tur och retur-tid osv.

Viktigt!

Funktioner som beskrivs i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Översikt

API:et för videobegränsningar gör det möjligt för utvecklare att styra videokvaliteten inifrån sina videosamtal. I den här snabbstartsguiden visar vi hur du använder API:et för att ange begränsningarna.

Förutsättningar

Gå till snabbstarten för röstsamtal för att konfigurera en exempelapp med röstsamtal.

Klasser

Name beskrivning
VideoConstraints Används för att lagra både inkommande videobegränsningar och utgående videobegränsningar.
UtgåendeVideoConstraints Används för att ange begränsningar (maxWidth | maxHeight | maxFrameRate) för utgående videoströmmar.
IncomingVideoConstraints Används för att ange begränsningar (maxWidth | maxHeight) för inkommande videoströmmar.

Använda videobegränsningar

I följande avsnitt förklaras hur videobegränsningarna kan ställas in för inkommande och/eller utgående videoströmmar vid olika tidpunkter för ett samtal.

Ange videobegränsningar innan du startar ett anrop

För inkommande videoströmmar måste ett IncomingVideoConstraints läggas till i IncomingVideoOptions.

    IncomingVideoConstraints incomingVideoConstraints = new IncomingVideoConstraints();
    incomingVideoConstraints.setMaxWidth(/*value*/);
    incomingVideoConstraints.setMaxHeight(/*value*/);

    // ...

    IncomingVideoOptions incomingVideoOptions = new IncomingVideoOptions();
    incomingVideoOptions.setConstraints(incomingVideoConstraints);

För utgående videoströmmar måste ett OutgoingVideoConstraints läggas till i OutgoingVideoOptions.

    OutgoingVideoConstraints outgoingVideoConstraints = new OutgoingVideoConstraints() 
    outgoingVideoConstraints.setMaxWidth(/*value*/); 
    outgoingVideoConstraints.setMaxHeight(/*value*/); 
    outgoingVideoConstraints.setMaxFrameRate(/*value*/); 
   
    // ...
    
    OutgoingVideoOptions outgoingVideoOptions = new OutgoingVideoOptions();
    outgoingVideoOptions.setConstraints(outgoingVideoConstraints);

Eftersom alternativen används för att starta/ansluta ett anrop kan begränsningarna sedan tillämpas på strömmarna automatiskt. Till exempel:

    JoinCallOptions joinCallOptions = new JoinCallOptions();
    joinCallOptions.setIncomingVideoOptions(incomingVideoOptions);
    joinCallOptions.setOutgoingVideoOptions(outgoingVideoOptions);
    callAgent.Join(context, locator, joinCallOptions);

Ange videobegränsningar under ett anrop

I stället för att ställa in videobegränsningarna innan du startar ett anrop kan du också dynamiskt justera videobegränsningarna under ett anrop. Du måste anropa setVideoConstraints din Call typklass och ange begränsningarna.


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

Om du vill återställa/ta bort de videobegränsningar som du tidigare angett måste du följa ovanstående mönster och ange 0 som ett villkorsvärde. Om du anger null värden för antingen IncomingVideoConstraints eller OutgoingVideoConstraints inte återställs/tar du bort begränsningarna och begränsningarna med ett null värde ignoreras.

Begränsningar

Kommentar

Se till att du är medveten om dessa begränsningar när du använder API:et för videobegränsningar. Vissa av begränsningarna tas bort i framtida versioner.

Det finns några kända begränsningar för det aktuella API:et för videobegränsningar.

  • Villkoret är en maxbegränsning , vilket innebär att det möjliga begränsningsvärdet kan vara det angivna värdet eller mindre. Det finns ingen garanti för att det faktiska värdet förblir detsamma som angivet av användaren.

  • När användaren anger ett villkorsvärde som är för litet använder SDK det minsta tillgängliga värdet som stöds.

  • För att ställa in OutgoingVideoConstraints under ett anrop hämtar den aktuella pågående videoströmmen inte automatiskt de angivna begränsningarna. För att begränsningarna ska börja gälla måste du stoppa och starta om den utgående videon.

  • IncomingVideoConstraints för närvarande är ett användarförvalt villkor i stället för en hård begränsning, vilket innebär att det faktiska värdet som tas emot fortfarande kan överskrida begränsningsuppsättningen beroende på ditt nätverk och maskinvara.

Mediestatistik

Om du vill utvärdera och jämföra videokvaliteten efter att du har tillämpat videobegränsningarna kan du komma åt MediaStats-API :et för att hämta videoupplösning och bithastighetsinformation om strömmen. Mediestatistiken innehåller också annan detaljerad statistik som rör strömmarna, till exempel jitter, paketförlust, tur och retur-tid osv.

Viktigt!

Funktioner som beskrivs i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Översikt

API:et för videobegränsningar gör det möjligt för utvecklare att styra videokvaliteten inifrån sina videosamtal. I den här snabbstartsguiden visar vi hur du använder API:et för att ange begränsningarna.

Förutsättningar

Gå till snabbstarten för röstsamtal för att konfigurera en exempelapp med röstsamtal.

Klasser

Name beskrivning
VideoConstraints Används för att lagra både inkommande videobegränsningar och utgående videobegränsningar.
UtgåendeVideoConstraints Används för att ange begränsningar (maxWidth | maxHeight | maxFrameRate) för utgående videoströmmar.
IncomingVideoConstraints Används för att ange begränsningar (maxWidth | maxHeight) för inkommande videoströmmar.

Använda videobegränsningar

I följande avsnitt förklaras hur videobegränsningarna kan ställas in för inkommande och/eller utgående videoströmmar vid olika tidpunkter för ett samtal.

Ange videobegränsningar innan du startar ett anrop

För inkommande videoströmmar måste ett IncomingVideoConstraints läggas till i IncomingVideoOptions.

    let incomingVideoConstraints = IncomingVideoConstraints()
    incomingVideoConstraints.maxWidth = /*value*/ 
    incomingVideoConstraints.maxHeight = /*value*/ 
    
    // ...
    
    let incomingVideoOptions = IncomingVideoOptions()
    incomingVideoOptions.constraints = incomingVideoConstraints

För utgående videoströmmar måste ett OutgoingVideoConstraints läggas till i OutgoingVideoOptions.

    let outgoingVideoConstraints = OutgoingVideoConstraints()
    outgoingVideoConstraints.maxWidth = /*value*/ 
    outgoingVideoConstraints.maxHeight = /*value*/
    outgoingVideoConstraint.maxFrameRate = /*value*/ 
    
    // ...

    let outgoingVideoOptions = OutgoingVideoOptions()
    outgoingVideoOptions.constraints = outgoingVideoConstraints

Eftersom alternativen används för att starta/ansluta ett anrop kan begränsningarna sedan tillämpas på strömmarna automatiskt. Till exempel:

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

Ange videobegränsningar under ett anrop

I stället för att ställa in videobegränsningarna innan du startar ett anrop kan du också dynamiskt justera videobegränsningarna under ett anrop. Du måste anropa set(videoConstraints) din Call typklass och ange begränsningarna.


    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)

Om du vill återställa/ta bort de videobegränsningar som du tidigare angett måste du följa ovanstående mönster och ange 0 som ett villkorsvärde. Om du anger null värden för antingen IncomingVideoConstraints eller OutgoingVideoConstraints inte återställs/tar du bort begränsningarna och begränsningarna med ett null värde ignoreras.

Begränsningar

Kommentar

Se till att du är medveten om dessa begränsningar när du använder API:et för videobegränsningar. Vissa av begränsningarna tas bort i framtida versioner.

Det finns några kända begränsningar för det aktuella API:et för videobegränsningar.

  • Villkoret är en maxbegränsning , vilket innebär att det möjliga begränsningsvärdet kan vara det angivna värdet eller mindre. Det finns ingen garanti för att det faktiska värdet förblir detsamma som angivet av användaren.

  • När användaren anger ett villkorsvärde som är för litet använder SDK det minsta tillgängliga värdet som stöds.

  • För att ställa in OutgoingVideoConstraints under ett anrop hämtar den aktuella pågående videoströmmen inte automatiskt de angivna begränsningarna. För att begränsningarna ska börja gälla måste du stoppa och starta om den utgående videon.

  • IncomingVideoConstraints för närvarande är ett användarförvalt villkor i stället för en hård begränsning, vilket innebär att det faktiska värdet som tas emot fortfarande kan överskrida begränsningsuppsättningen beroende på ditt nätverk och maskinvara.

Mediestatistik

Om du vill utvärdera och jämföra videokvaliteten efter att du har tillämpat videobegränsningarna kan du komma åt MediaStats-API :et för att hämta videoupplösning och bithastighetsinformation om strömmen. Mediestatistiken innehåller också annan detaljerad statistik som rör strömmarna, till exempel jitter, paketförlust, tur och retur-tid osv.

Du kan ange videobegränsningar i dina anrop för att styra videokvaliteten baserat på upplösning eller frameRate eller bithastighet i dina videosamtal. I den här snabbstartsguiden visar vi hur du ställer in videobegränsningar i början av ett anrop och hur du använder vår setConstraints metod för anropsobjektet för att ange videobegränsningar dynamiskt under anropet.

Skicka videobegränsningar

Azure Communication Services Web Calling SDK stöder inställning av maximal videoupplösning, ramhastighet eller bithastighet som en klient skickar. Avsändarvideobegränsningar stöds i Skrivbordswebbläsare (Chrome, Edge, Firefox) och när du använder iOS Safari mobile browser eller Android Chrome mobile browser.

Begränsningar som stöds
Inkommande video: upplösning
Utgående video: upplösning, ramhastighet, bithastighet

Ställa in videobegränsningar i början av ett samtal – utgående (skicka) video

Inställningen för videobegränsningar implementeras i Call gränssnittet. Om du vill använda videobegränsningarna kan du ange begränsningarna inifrån CallOptions när du ringer ett anrop, accepterar ett samtal eller ansluter till ett samtal. Du måste ange localVideoStreams i videoOptions.
Observera att begränsningar inte fungerar om du ansluter ett samtal med alternativet endast ljud och aktiverar kameran senare. I det här fallet kan du ange videobegränsningar dynamiskt med hjälp av setConstraints -metoden i Call gränssnittet.

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)

Typer av videobegränsningar beskrivs på följande sätt:

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;
};

När du ställer in videobegränsningar väljer SDK:n det närmaste värde som omfattas av villkorsuppsättningen för att förhindra att värdena för upplösning, frameRate och bithastighet inte överskrider de högsta villkorsvärdena. När upplösningsbegränsningsvärdet är för litet väljer SDK den minsta tillgängliga upplösningen. I det här fallet kan den valda upplösningens höjd vara större än begränsningsvärdet.

Kommentar

För alla bitrate, frameHeight och frameRate, är villkorsvärdet en max begränsning, vilket innebär att det faktiska värdet i anropet kan vara det angivna värdet eller mindre. Det finns ingen gurantee att den skickade videoupplösningen kommer att ligga kvar på den angivna upplösningen.

In frameHeightVideoSendConstraints har en annan betydelse när en mobil enhet är i stående läge. I stående läge anger det här värdet den kortare sidan av enheten. Om du frameHeight.max till exempel anger värdet med 240 på en 1080(W) x 1920(H) enhet i stående läge, är begränsningshöjden på sidan 1080(W). När samma enhet är i liggande läge (1920(W) x 1080(H)) är begränsningen på 1080(H)-sidan.

Om du använder MediaStats API för att spåra den skickade videoupplösningen kan du få reda på att den skickade upplösningen kan ändras under samtalet. Den kan gå upp och ned, men bör vara lika med eller mindre än det villkorsvärde som du anger. Den här lösningsändringen är ett förväntat beteende. Webbläsaren har också en viss nedbrytningsregel för att justera den skickade upplösningen baserat på cpu- eller nätverksförhållanden.

Ställa in videobegränsningar under samtalet – utgående (skicka) video

Du kan ange videobegränsningar under anropet med hjälp setConstraints av -metoden för Call objektet.

// 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
            }
        }
    }
});

Kommentar

Ange villkorsvärde som 0 om du vill ta bort tidigare angivna begränsningar. Du kan använda det här sättet för att återställa eller ta bort begränsningar.


Ta emot videobegränsningar

Om du vill kontrollera upplösningen på mottagarsidan med hjälp av Azure Communication Services Web Calling SDK kan du justera storleken på återgivningen av videon. Det anropande SDK:et justerar automatiskt mottagen upplösning baserat på renderarens dimensioner. SDK:t begär inte någon inkommande videoström (bredd och höjd) som får plats i videofönstret för renderaren.

Använda mediastatik för att förstå påverkan på videobegränsningar

Om du vill utvärdera och jämföra videokvaliteten efter att du har tillämpat videobegränsningarna kan du komma åt MediaStats-API :et för att hämta videoupplösning och bithastighetsinformation för den sändande strömmen. Mediestatistiken innehåller också annan detaljerad statistik som rör strömmarna, till exempel jitter, paketförlust, tur och retur-tid osv.

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

Nästa steg

Mer information finns i följande artiklar: