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 frameHeight
VideoSendConstraints
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:
- Läs mer om konceptdokument för videobegränsningar
- Läs mer om funktioner för samtals-SDK