Avvio rapido: Impostare vincoli video nell'app chiamante
Importante
Attualmente la funzionalità descritta in questo articolo è disponibile in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i 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 la Guida introduttiva alle 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
Attualmente la funzionalità descritta in questo articolo è disponibile in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i 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 la Guida introduttiva alle 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
Attualmente la funzionalità descritta in questo articolo è disponibile in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i 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 la Guida introduttiva alle 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 constraint
*/
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 , bitrate
frameHeight
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'è alcuna garanzia 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:
- Informazioni sul concetto di vincoli video
- Altre informazioni sulle funzionalità di Calling SDK