Share via


Guida introduttiva: Impostare vincoli video nell'app chiamante

Importante

La funzionalità descritta in questo articolo è attualmente disponibile in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto non è consigliabile usarla per carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Panoramica

L'API Vincoli video consente agli sviluppatori di controllare la qualità video dalle loro videochiamate. In questa guida introduttiva viene illustrato come usare l'API per impostare i vincoli.

Prerequisiti

Per configurare un'app di esempio con chiamate vocali, vedere Avvio rapido per chiamate vocali.

Classi

Nome Descrizione
VideoConstraints Usato per contenere vincoli video in ingresso e vincoli video in uscita.
OutgoingVideoConstraints Consente di specificare vincoli (MaxWidth | MaxHeight | MaxFrameRate) per i flussi video in uscita.
IncomingVideoConstraints Consente di specificare vincoli (MaxWidth | MaxHeight) per i flussi video in ingresso.

Uso dei vincoli video

Le sezioni seguenti illustrano come impostare i vincoli video per i flussi video in ingresso e/o in uscita in momenti diversi di una chiamata.

Impostare vincoli video prima di avviare una chiamata

Per i flussi video in ingresso , è necessario aggiungere un IncomingVideoConstraints oggetto a IncomingVideoOptions.

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

Per i flussi video in uscita , è necessario aggiungere un OutgoingVideoConstraints oggetto a OutgoingVideoOptions.

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

Poiché le opzioni vengono usate per avviare/unire una chiamata, i vincoli possono quindi essere applicati automaticamente ai flussi. Ad esempio:

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

Impostare vincoli video durante una chiamata

Anziché impostare i vincoli video prima di avviare una chiamata, è anche possibile regolare dinamicamente i vincoli video durante una chiamata. È necessario chiamare SetVideoConstraints la Call classe di tipo e fornire i vincoli.


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

Per reimpostare o rimuovere i vincoli video impostati in precedenza, è necessario seguire il modello precedente e fornire 0 come valore di vincolo. Specificare null i valori per IncomingVideoConstraints o OutgoingVideoConstraints non reimpostare o rimuovere i vincoli e i vincoli con un null valore verranno ignorati.

Limiti

Nota

Assicurarsi di conoscere queste limitazioni quando si usa l'API Vincoli video. Alcune delle limitazioni verranno rimosse nelle versioni future.

Esistono alcune limitazioni note per l'API vincoli video correnti.

  • Il vincolo è un vincolo max , il che significa che il valore del vincolo possibile può essere il valore specificato o minore. Non esiste alcuna garanzia che il valore effettivo rimanga uguale a quello specificato dall'utente.

  • Quando l'utente imposta un valore di vincolo troppo piccolo, l'SDK userà il valore disponibile più piccolo supportato.

  • Per l'impostazione OutgoingVideoConstraints durante una chiamata, il flusso video corrente in corso non rileva automaticamente i vincoli specificati. Per rendere effettivi i vincoli, è necessario arrestare e riavviare il video in uscita.

  • IncomingVideoConstraints attualmente è un vincolo preferito dall'utente anziché un vincolo rigido, il che significa che, a seconda della rete e dell'hardware, il valore effettivo ricevuto può comunque superare il set di vincoli.

Statistiche multimediali

Per valutare e confrontare la qualità del video dopo aver applicato i vincoli video, è possibile accedere all'API MediaStats per ottenere informazioni sulla risoluzione video e sulla velocità in bit del flusso. Le statistiche multimediali includono anche altre statistiche granulari correlate ai flussi, ad esempio jitter, perdita di pacchetti, tempo di round trip e così via.

Importante

La funzionalità descritta in questo articolo è attualmente disponibile in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto non è consigliabile usarla per carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Panoramica

L'API Vincoli video consente agli sviluppatori di controllare la qualità video dalle loro videochiamate. In questa guida introduttiva viene illustrato come usare l'API per impostare i vincoli.

Prerequisiti

Per configurare un'app di esempio con chiamate vocali, vedere Avvio rapido per chiamate vocali.

Classi

Nome Descrizione
VideoConstraints Usato per contenere vincoli video in ingresso e vincoli video in uscita.
OutgoingVideoConstraints Consente di specificare vincoli (maxWidth | maxHeight | maxFrameRate) per i flussi video in uscita.
IncomingVideoConstraints Consente di specificare vincoli (maxWidth | maxHeight) per i flussi video in ingresso.

Uso dei vincoli video

Le sezioni seguenti illustrano come impostare i vincoli video per i flussi video in ingresso e/o in uscita in momenti diversi di una chiamata.

Impostare vincoli video prima di avviare una chiamata

Per i flussi video in ingresso , è necessario aggiungere un IncomingVideoConstraints oggetto a IncomingVideoOptions.

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

    // ...

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

Per i flussi video in uscita , è necessario aggiungere un OutgoingVideoConstraints oggetto a OutgoingVideoOptions.

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

Poiché le opzioni vengono usate per avviare/unire una chiamata, i vincoli possono quindi essere applicati automaticamente ai flussi. Ad esempio:

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

Impostare vincoli video durante una chiamata

Anziché impostare i vincoli video prima di avviare una chiamata, è anche possibile regolare dinamicamente i vincoli video durante una chiamata. È necessario chiamare setVideoConstraints la Call classe di tipo e fornire i vincoli.


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

Per reimpostare o rimuovere i vincoli video impostati in precedenza, è necessario seguire il modello precedente e fornire 0 come valore di vincolo. Specificare null i valori per IncomingVideoConstraints o OutgoingVideoConstraints non reimpostare o rimuovere i vincoli e i vincoli con un null valore verranno ignorati.

Limiti

Nota

Assicurarsi di conoscere queste limitazioni quando si usa l'API Vincoli video. Alcune delle limitazioni verranno rimosse nelle versioni future.

Esistono alcune limitazioni note per l'API vincoli video correnti.

  • Il vincolo è un vincolo max , il che significa che il valore del vincolo possibile può essere il valore specificato o minore. Non esiste alcuna garanzia che il valore effettivo rimanga uguale a quello specificato dall'utente.

  • Quando l'utente imposta un valore di vincolo troppo piccolo, l'SDK userà il valore disponibile più piccolo supportato.

  • Per l'impostazione OutgoingVideoConstraints durante una chiamata, il flusso video corrente in corso non rileva automaticamente i vincoli specificati. Per rendere effettivi i vincoli, è necessario arrestare e riavviare il video in uscita.

  • IncomingVideoConstraints attualmente è un vincolo preferito dall'utente anziché un vincolo rigido, il che significa che, a seconda della rete e dell'hardware, il valore effettivo ricevuto può comunque superare il set di vincoli.

Statistiche multimediali

Per valutare e confrontare la qualità del video dopo aver applicato i vincoli video, è possibile accedere all'API MediaStats per ottenere informazioni sulla risoluzione video e sulla velocità in bit del flusso. Le statistiche multimediali includono anche altre statistiche granulari correlate ai flussi, ad esempio jitter, perdita di pacchetti, tempo di round trip e così via.

Importante

La funzionalità descritta in questo articolo è attualmente disponibile in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto non è consigliabile usarla per carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Panoramica

L'API Vincoli video consente agli sviluppatori di controllare la qualità video dalle loro videochiamate. In questa guida introduttiva viene illustrato come usare l'API per impostare i vincoli.

Prerequisiti

Per configurare un'app di esempio con chiamate vocali, vedere Avvio rapido per chiamate vocali.

Classi

Nome Descrizione
VideoConstraints Usato per contenere vincoli video in ingresso e vincoli video in uscita.
OutgoingVideoConstraints Consente di specificare vincoli (maxWidth | maxHeight | maxFrameRate) per i flussi video in uscita.
IncomingVideoConstraints Consente di specificare vincoli (maxWidth | maxHeight) per i flussi video in ingresso.

Uso dei vincoli video

Le sezioni seguenti illustrano come impostare i vincoli video per i flussi video in ingresso e/o in uscita in momenti diversi di una chiamata.

Impostare vincoli video prima di avviare una chiamata

Per i flussi video in ingresso , è necessario aggiungere un IncomingVideoConstraints oggetto a IncomingVideoOptions.

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

Per i flussi video in uscita , è necessario aggiungere un OutgoingVideoConstraints oggetto a OutgoingVideoOptions.

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

    let outgoingVideoOptions = OutgoingVideoOptions()
    outgoingVideoOptions.constraints = outgoingVideoConstraints

Poiché le opzioni vengono usate per avviare/unire una chiamata, i vincoli possono quindi essere applicati automaticamente ai flussi. Ad esempio:

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

Impostare vincoli video durante una chiamata

Anziché impostare i vincoli video prima di avviare una chiamata, è anche possibile regolare dinamicamente i vincoli video durante una chiamata. È necessario chiamare set(videoConstraints) la Call classe di tipo e fornire i vincoli.


    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)

Per reimpostare o rimuovere i vincoli video impostati in precedenza, è necessario seguire il modello precedente e fornire 0 come valore di vincolo. Specificare null i valori per IncomingVideoConstraints o OutgoingVideoConstraints non reimpostare o rimuovere i vincoli e i vincoli con un null valore verranno ignorati.

Limiti

Nota

Assicurarsi di conoscere queste limitazioni quando si usa l'API Vincoli video. Alcune delle limitazioni verranno rimosse nelle versioni future.

Esistono alcune limitazioni note per l'API vincoli video correnti.

  • Il vincolo è un vincolo max , il che significa che il valore del vincolo possibile può essere il valore specificato o minore. Non esiste alcuna garanzia che il valore effettivo rimanga uguale a quello specificato dall'utente.

  • Quando l'utente imposta un valore di vincolo troppo piccolo, l'SDK userà il valore disponibile più piccolo supportato.

  • Per l'impostazione OutgoingVideoConstraints durante una chiamata, il flusso video corrente in corso non rileva automaticamente i vincoli specificati. Per rendere effettivi i vincoli, è necessario arrestare e riavviare il video in uscita.

  • IncomingVideoConstraints attualmente è un vincolo preferito dall'utente anziché un vincolo rigido, il che significa che, a seconda della rete e dell'hardware, il valore effettivo ricevuto può comunque superare il set di vincoli.

Statistiche multimediali

Per valutare e confrontare la qualità del video dopo aver applicato i vincoli video, è possibile accedere all'API MediaStats per ottenere informazioni sulla risoluzione video e sulla velocità in bit del flusso. Le statistiche multimediali includono anche altre statistiche granulari correlate ai flussi, ad esempio jitter, perdita di pacchetti, tempo di round trip e così via.

È possibile impostare vincoli video nelle chiamate per controllare la qualità del video in base alla risoluzione o alla frequenza dei fotogrammi o alla velocità in bit nelle chiamate video. In questa guida di avvio rapido viene illustrato come impostare vincoli video all'inizio di una chiamata e come usare il setConstraints metodo sull'oggetto chiamata per impostare i vincoli video in modo dinamico durante la chiamata.

Inviare vincoli video

Servizi di comunicazione di Azure Web Calling SDK supporta l'impostazione della risoluzione massima del video, della frequenza dei fotogrammi o della velocità in bit inviata da un client. I vincoli video del mittente sono supportati nei browser desktop (Chrome, Edge, Firefox) e quando si usano browser per dispositivi mobili iOS Safari o browser per dispositivi mobili Android Chrome.

Vincoli supportati
Video in ingresso: risoluzione
Video in uscita: risoluzione, frequenza dei fotogrammi, velocità in bit

Impostazione dei vincoli video all'inizio di una chiamata - Video in uscita (invio)

L'impostazione dei vincoli video viene implementata nell'interfaccia Call . Per usare i vincoli video, è possibile specificare i vincoli dall'interno CallOptions quando si effettua una chiamata, si accetta una chiamata o si partecipa a una chiamata. È necessario specificare localVideoStreams in videoOptions.
Tieni presente che i vincoli non funzionano se unissi una chiamata con l'opzione solo audio e attiva la fotocamera in un secondo momento. In questo caso, è possibile impostare vincoli video in modo dinamico usando il setConstraints metodo sull'interfaccia 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)

I tipi di vincoli video sono descritti di seguito:

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

Quando si impostano vincoli video, l'SDK sceglie il valore più vicino che rientra nel vincolo impostato per impedire che i valori per risoluzione, frameRate e velocità in bit non superino i valori massimi impostati. Inoltre, quando il valore del vincolo di risoluzione è troppo piccolo, l'SDK sceglie la risoluzione più piccola disponibile. In questo caso, l'altezza della risoluzione scelta può essere maggiore del valore del vincolo.

Nota

Per tutti , bitrateframeHeight e frameRate, il valore del vincolo è un max vincolo, il che significa che il valore effettivo nella chiamata può essere il valore specificato o minore. Non c'è alcun gurantee che la risoluzione video inviata rimarrà alla risoluzione specificata.

L'oggetto frameHeight in VideoSendConstraints ha un significato diverso quando un dispositivo mobile è in modalità verticale. In modalità verticale, questo valore indica il lato più breve del dispositivo. Ad esempio, specificando frameHeight.max il valore con 240 su un dispositivo 1080(W) x 1920(H) in modalità verticale, l'altezza del vincolo si trova sul lato 1080(W). Quando lo stesso dispositivo è in modalità orizzontale (1920(W) x 1080(H),il vincolo si trova sul lato 1080(H).

Se si usa l'API MediaStats per tenere traccia della risoluzione video inviata, è possibile che la risoluzione inviata possa cambiare durante la chiamata. Può andare verso l'alto e verso il basso, ma deve essere uguale o minore del valore del vincolo specificato. Questa modifica di risoluzione è un comportamento previsto. Il browser ha anche una regola di riduzione delle prestazioni per regolare la risoluzione inviata in base alle condizioni di cpu o di rete.

Impostazione dei vincoli video durante la chiamata - Video in uscita (invio)

È possibile impostare vincoli video durante la chiamata usando il setConstraints metodo sull'oggetto 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
            }
        }
    }
});

Nota

Impostando il valore del vincolo come 0 verranno annullati tutti i vincoli impostati in precedenza. È possibile usare questo modo per reimpostare o rimuovere vincoli.


Ricevere vincoli video

Per controllare la risoluzione sul lato ricevitore usando Servizi di comunicazione di Azure Web Calling SDK, è possibile regolare le dimensioni del renderer del video. L'SDK chiamante regola automaticamente la risoluzione ricevuta in base alle dimensioni del renderer. L'SDK non richiederà un flusso video in ingresso (larghezza e altezza) che può rientrare nella finestra video del renderer.

Uso di statici multimediali per comprendere l'impatto dei vincoli video

Per valutare e confrontare la qualità del video dopo aver applicato i vincoli video, è possibile accedere all'API MediaStats per ottenere informazioni sulla risoluzione video e sulla velocità in bit del flusso di invio. Le statistiche multimediali includono anche altre statistiche granulari correlate ai flussi, ad esempio jitter, perdita di pacchetti, tempo di round trip e così via.

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

Passaggi successivi

Per altre informazioni, vedere gli articoli seguenti: