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 constraint
*/
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 bitrate
frameHeight
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á záruka, ž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:
- Další informace o konceptu omezení videa
- Další informace o možnostech volání sady SDK