Rychlý start: Nastavení omezení videa ve volající aplikaci

Důležité

Funkce popsané v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Přehled

Rozhraní API omezení videa umožňuje vývojářům řídit kvalitu videa v rámci videohovorů. V této příručce pro rychlý start si ukážeme, jak pomocí rozhraní API nastavit omezení.

Požadavky

Informace o nastavení ukázkové aplikace s hlasovým voláním najdete v rychlém startu hlasového volání.

Třídy

Název Popis
Omezení videa Používá se k blokování příchozích omezení videa i omezení odchozích videí.
Odchozí omezeníVideo Slouží k určení omezení (MaxWidth | MaxHeight | MaxFrameRate) pro odchozí streamy videa.
Příchozí omezeníVideo Slouží k určení omezení (MaxWidth | MaxHeight) pro příchozí streamy videa.

Použití omezení videa

Následující části popisují, jak se dají omezení videa nastavit pro příchozí a odchozí video streamy v různých časech volání.

Nastavení omezení videa před zahájením hovoru

U příchozích video streamů IncomingVideoConstraints je potřeba přidat do souboru IncomingVideoOptions.

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

Pro odchozí video streamy je OutgoingVideoConstraints nutné přidat do souboru OutgoingVideoOptions.

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

Vzhledem k tomu, že se možnosti používají ke spuštění nebo připojení ke volání, lze omezení použít u datových proudů automaticky. Příklad:

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

Nastavení omezení videa během volání

Namísto nastavení omezení videa před zahájením hovoru můžete také dynamicky upravit omezení videa během hovoru. Potřebujete volat SetVideoConstraints třídu Call typu a zadat omezení.


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

Pokud chcete obnovit nebo odebrat omezení videa, která jste dříve nastavili, musíte postupovat podle výše uvedeného vzoru a zadat 0 jako hodnotu omezení. Poskytnutí null hodnot pro buď IncomingVideoConstraints nebo OutgoingVideoConstraints neobnoví nebo neodebere omezení a omezení s null hodnotou budou ignorována.

Omezení

Poznámka:

Při používání rozhraní API omezení videa se ujistěte, že o těchto omezeních víte. Některá omezení budou v budoucích verzích odebrána.

Aktuální rozhraní API omezení videa má několik známých omezení.

  • Omezení je maximální omezení, což znamená, že možnou hodnotou omezení může být zadaná hodnota nebo menší. Neexistuje žádná záruka, že skutečná hodnota zůstane stejná jako zadaná uživatelem.

  • Když uživatel nastaví hodnotu omezení, která je příliš malá, sada SDK použije nejmenší dostupnou hodnotu, která se podporuje.

  • V případě nastavení OutgoingVideoConstraints během hovoru aktuální stream videa automaticky nevybírá zadaná omezení. Aby se omezení projevila, musíte zastavit a restartovat odchozí video.

  • IncomingVideoConstraints aktuálně je omezení upřednostňované uživatelem místo pevného omezení, což znamená, že v závislosti na vaší síti a hardwaru může přijatá skutečná hodnota stále překročit sadu omezení.

Statistiky médií

Pokud chcete vyhodnotit a porovnat kvalitu videa po použití omezení videa, můžete získat přístup k rozhraní MEDIAStats API a získat informace o rozlišení videa a přenosové rychlosti datového proudu. Statistiky médií zahrnují také další podrobné statistiky související s datovými proudy, jako je zadržování, ztráta paketů, doba odezvy atd.

Důležité

Funkce popsané v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Přehled

Rozhraní API omezení videa umožňuje vývojářům řídit kvalitu videa v rámci videohovorů. V této příručce pro rychlý start si ukážeme, jak pomocí rozhraní API nastavit omezení.

Požadavky

Informace o nastavení ukázkové aplikace s hlasovým voláním najdete v rychlém startu hlasového volání.

Třídy

Název Popis
Omezení videa Používá se k blokování příchozích omezení videa i omezení odchozích videí.
Odchozí omezeníVideo Slouží k určení omezení (maxWidth | maxHeight | maxFrameRate) pro odchozí streamy videa.
Příchozí omezeníVideo Slouží k určení omezení (maxWidth | maxHeight) pro příchozí streamy videa.

Použití omezení videa

Následující části popisují, jak se dají omezení videa nastavit pro příchozí a odchozí video streamy v různých časech volání.

Nastavení omezení videa před zahájením hovoru

U příchozích video streamů IncomingVideoConstraints je potřeba přidat do souboru IncomingVideoOptions.

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

    // ...

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

Pro odchozí video streamy je OutgoingVideoConstraints nutné přidat do souboru OutgoingVideoOptions.

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

Vzhledem k tomu, že se možnosti používají ke spuštění nebo připojení ke volání, lze omezení použít u datových proudů automaticky. Příklad:

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

Nastavení omezení videa během volání

Namísto nastavení omezení videa před zahájením hovoru můžete také dynamicky upravit omezení videa během hovoru. Potřebujete volat setVideoConstraints třídu Call typu a zadat omezení.


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

Pokud chcete obnovit nebo odebrat omezení videa, která jste dříve nastavili, musíte postupovat podle výše uvedeného vzoru a zadat 0 jako hodnotu omezení. Poskytnutí null hodnot pro buď IncomingVideoConstraints nebo OutgoingVideoConstraints neobnoví nebo neodebere omezení a omezení s null hodnotou budou ignorována.

Omezení

Poznámka:

Při používání rozhraní API omezení videa se ujistěte, že o těchto omezeních víte. Některá omezení budou v budoucích verzích odebrána.

Aktuální rozhraní API omezení videa má několik známých omezení.

  • Omezení je maximální omezení, což znamená, že možnou hodnotou omezení může být zadaná hodnota nebo menší. Neexistuje žádná záruka, že skutečná hodnota zůstane stejná jako zadaná uživatelem.

  • Když uživatel nastaví hodnotu omezení, která je příliš malá, sada SDK použije nejmenší dostupnou hodnotu, která se podporuje.

  • V případě nastavení OutgoingVideoConstraints během hovoru aktuální stream videa automaticky nevybírá zadaná omezení. Aby se omezení projevila, musíte zastavit a restartovat odchozí video.

  • IncomingVideoConstraints aktuálně je omezení upřednostňované uživatelem místo pevného omezení, což znamená, že v závislosti na vaší síti a hardwaru může přijatá skutečná hodnota stále překročit sadu omezení.

Statistiky médií

Pokud chcete vyhodnotit a porovnat kvalitu videa po použití omezení videa, můžete získat přístup k rozhraní MEDIAStats API a získat informace o rozlišení videa a přenosové rychlosti datového proudu. Statistiky médií zahrnují také další podrobné statistiky související s datovými proudy, jako je zadržování, ztráta paketů, doba odezvy atd.

Důležité

Funkce popsané v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Přehled

Rozhraní API omezení videa umožňuje vývojářům řídit kvalitu videa v rámci videohovorů. V této příručce pro rychlý start si ukážeme, jak pomocí rozhraní API nastavit omezení.

Požadavky

Informace o nastavení ukázkové aplikace s hlasovým voláním najdete v rychlém startu hlasového volání.

Třídy

Název Popis
Omezení videa Používá se k blokování příchozích omezení videa i omezení odchozích videí.
Odchozí omezeníVideo Slouží k určení omezení (maxWidth | maxHeight | maxFrameRate) pro odchozí streamy videa.
Příchozí omezeníVideo Slouží k určení omezení (maxWidth | maxHeight) pro příchozí streamy videa.

Použití omezení videa

Následující části popisují, jak se dají omezení videa nastavit pro příchozí a odchozí video streamy v různých časech volání.

Nastavení omezení videa před zahájením hovoru

U příchozích video streamů IncomingVideoConstraints je potřeba přidat do souboru IncomingVideoOptions.

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

Pro odchozí video streamy je OutgoingVideoConstraints nutné přidat do souboru OutgoingVideoOptions.

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

    let outgoingVideoOptions = OutgoingVideoOptions()
    outgoingVideoOptions.constraints = outgoingVideoConstraints

Vzhledem k tomu, že se možnosti používají ke spuštění nebo připojení ke volání, lze omezení použít u datových proudů automaticky. Příklad:

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

Nastavení omezení videa během volání

Namísto nastavení omezení videa před zahájením hovoru můžete také dynamicky upravit omezení videa během hovoru. Potřebujete volat set(videoConstraints) třídu Call typu a zadat omezení.


    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)

Pokud chcete obnovit nebo odebrat omezení videa, která jste dříve nastavili, musíte postupovat podle výše uvedeného vzoru a zadat 0 jako hodnotu omezení. Poskytnutí null hodnot pro buď IncomingVideoConstraints nebo OutgoingVideoConstraints neobnoví nebo neodebere omezení a omezení s null hodnotou budou ignorována.

Omezení

Poznámka:

Při používání rozhraní API omezení videa se ujistěte, že o těchto omezeních víte. Některá omezení budou v budoucích verzích odebrána.

Aktuální rozhraní API omezení videa má několik známých omezení.

  • Omezení je maximální omezení, což znamená, že možnou hodnotou omezení může být zadaná hodnota nebo menší. Neexistuje žádná záruka, že skutečná hodnota zůstane stejná jako zadaná uživatelem.

  • Když uživatel nastaví hodnotu omezení, která je příliš malá, sada SDK použije nejmenší dostupnou hodnotu, která se podporuje.

  • V případě nastavení OutgoingVideoConstraints během hovoru aktuální stream videa automaticky nevybírá zadaná omezení. Aby se omezení projevila, musíte zastavit a restartovat odchozí video.

  • IncomingVideoConstraints aktuálně je omezení upřednostňované uživatelem místo pevného omezení, což znamená, že v závislosti na vaší síti a hardwaru může přijatá skutečná hodnota stále překročit sadu omezení.

Statistiky médií

Pokud chcete vyhodnotit a porovnat kvalitu videa po použití omezení videa, můžete získat přístup k rozhraní MEDIAStats API a získat informace o rozlišení videa a přenosové rychlosti datového proudu. Statistiky médií zahrnují také další podrobné statistiky související s datovými proudy, jako je zadržování, ztráta paketů, doba odezvy atd.

Omezení videa ve voláních můžete nastavit tak, aby se kvalita videa řídila na základě rozlišení nebo frameRate nebo přenosové rychlosti ve vašich videohovorech. V této příručce pro rychlý start si ukážeme, jak nastavit omezení videa na začátku volání a jak použít metodu setConstraints u objektu volání k dynamickému nastavení omezení videa během volání.

Odesílání omezení videa

Sada SDK pro webové volání ve službě Azure Communication Services podporuje nastavení maximálního rozlišení videa, snímkové rychlosti nebo přenosové rychlosti, kterou klient odesílá. Omezení videa odesílatele jsou podporována v desktopových prohlížečích (Chrome, Edge, Firefox) a při používání mobilního prohlížeče iOS Safari nebo mobilního prohlížeče Android Chrome.

Podporovaná omezení
Příchozí video: rozlišení
Odchozí video: rozlišení, přenosová rychlost, přenosová rychlost

Nastavení omezení videa na začátku hovoru – odchozí (send) video

Nastavení omezení videa se implementuje v Call rozhraní. Pokud chcete použít omezení videa, můžete určit omezení z CallOptions volání, přijmout hovor nebo se připojit k hovoru. Je nutné zadat localVideoStreams v videoOptions.
Mějte na paměti, že omezení nefungují, pokud se připojíte k hovoru s možností pouze zvuku a později kameru zapnete. V tomto případě můžete nastavit omezení videa dynamicky pomocí setConstraints metody v Call rozhraní.

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)

Typy omezení videa jsou popsány takto:

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

Při nastavování omezení videa sada SDK zvolí nejbližší hodnotu, která spadá do sady omezení, aby zabránila hodnotám pro rozlišení, frameRate a přenosovou rychlost, aby nepřekročila maximální nastavené hodnoty omezení. Pokud je hodnota omezení rozlišení příliš malá, sada SDK také zvolí nejmenší dostupné rozlišení. V tomto případě může být výška zvoleného rozlišení větší než hodnota omezení.

Poznámka:

Pro všechny bitrateframeHeight a frameRate, omezení hodnota je max omezení, což znamená, že skutečná hodnota ve volání může být zadaná nebo menší. Neexistuje žádná gurantee, že odeslané rozlišení videa zůstane v zadaném rozlišení.

VideoSendConstraints In frameHeight má jiný význam, když je mobilní zařízení v režimu na výšku. V režimu na výšku označuje tato hodnota kratší stranu zařízení. Například zadáním frameHeight.max hodnoty 240 na zařízení 1080 (W) x 1920(H) v režimu na výšku je výška omezení na straně 1080(W). Pokud je stejné zařízení v režimu na šířku (1920(W) x 1080(H)), omezení je na straně 1080(H).

Pokud ke sledování odesílaných rozlišení videa používáte rozhraní MediaStats API, můžete zjistit, že se odeslané rozlišení může během hovoru změnit. Může jít nahoru a dolů, ale měla by být rovna nebo menší než hodnota omezení, kterou zadáte. Tato změna řešení představuje očekávané chování. Prohlížeč má také určité pravidlo snížení výkonu pro úpravu odesílaných překladů na základě procesoru nebo podmínek sítě.

Nastavení omezení videa během hovoru – odchozí (odesílání) videa

Omezení videa během volání můžete nastavit pomocí setConstraints metody objektu 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
            }
        }
    }
});

Poznámka:

Nastavení hodnoty omezení tak, jak 0 zruší nastavení dříve nastavených omezení. Tímto způsobem můžete obnovit nebo odebrat omezení.


Příjem omezení videa

Pokud chcete řídit rozlišení na straně příjemce pomocí sady SDK webového volání služeb Azure Communication Services, můžete upravit velikost rendereru daného videa. Volající sada SDK automaticky upraví přijaté rozlišení na základě dimenzí rendereru. Sada SDK nebude požadovat příchozí stream videa (šířku a výšku), který se vejde do okna videa rendereru.

Použití statických médií k pochopení dopadu omezení videa

Pokud chcete vyhodnotit a porovnat kvalitu videa po použití omezení videa, můžete získat přístup k rozhraní MediaStats API a získat informace o rozlišení videa a přenosové rychlosti odesílajícího datového proudu. Statistiky médií zahrnují také další podrobné statistiky související s datovými proudy, jako je zadržování, ztráta paketů, doba odezvy atd.

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

Další kroky

Další informace najdete v následujících článcích: