Protokolování klienta (Microsoft Media Foundation)
Zdroj sítě podporuje protokolování klienta, které umožňuje serveru médií sledovat aktivitu klientů, kteří se k němu připojují. Protokoly klientů umožňují serveru zaznamenávat statistiky připojení, vykreslování a streamování. Tyto protokoly můžou používat poskytovatelé obsahu v různých scénářích, například ke sledování využití mediálního serveru a generování fakturace nebo k doručování vhodného kvalitního obsahu v závislosti na rychlosti sítě klienta.
Soubor protokolu obsahuje několik položek událostí klienta. Každá položka protokolu obsahuje několik polí oddělených mezerami. Existují dva typy protokolů klienta: vykreslování (přehrávání) a streamování (příjem). Vzhledem k tomu, že obsah lze přehrávat a streamovat současně, klient může odeslat kombinaci obou typů dat protokolu. V některých případech mohou existovat dvě položky protokolu pro stejnou relaci. Když je například povolená rychlá mezipaměť, klient může dokončit příjem streamovaného obsahu před dokončením jeho vykreslení. V takovém případě by byl protokol streamování odeslán před protokolem vykreslování.
Klient odešle data protokolu o vykreslování na server, když se klient změní z jakéhokoli stavu přehrávání (přehrávání, přetáčení vpřed nebo převinutí zpět) do stavu bez přehrávání (zastavení, pozastavení, konec streamu nebo začátek streamu). Když se odesílají data pro vykreslovací protokol, vytvoří se připojení přímo k serveru médií nebo nakonfigurovanému proxy serveru.
Pokud je obsah uložený v dočasném souboru místní mezipaměti v počítači, na kterém je klient spuštěný, může klient číst soubor z místní mezipaměti a odesílat data protokolu vykreslování, aby indikoval, že přehrával obsah. V tomto případě klient načte soubor ze své lokální mezipaměti, záznam o vykreslování neobsahuje žádné síťové statistiky a protokol je nastaven na mezipaměť.
Klient odešle na server protokol streamovaného logu, aby ukázal, jak přijal obsah, ale ne způsob jeho zobrazení. Klient může protokol streamování odeslat dlouho, než klient dokončí vykreslování obsahu.
Toto téma neposkytuje informace o všech polích protokolu. Pro úplný přehled viz struktura dat protokolu Windows Media.
Konfigurace polí protokolu
Služba Media Foundation umožňuje klientovi konfigurovat zdroj sítě pomocí vlastností. Aplikace musí nastavit příslušné vlastnosti v úložišti vlastností a předat je do jedné z metod řešení zdrojů. Zdrojový překladač vytvoří požadovaný zdroj sítě a otevře připojení k serveru. Pokud je připojení úspěšné, klient odešle informace o sobě.
Následující tabulka popisuje pole protokolu a odpovídající vlastnosti, které může aplikace nastavit prostřednictvím překladače zdroje. Tyto informace se během relace nezmění.
Pole protokolace | Popis |
---|---|
c-playerid | Jedinečná identifikace hráče. Tyto informace se odesílají na začátku připojení. Obvykle se jedná o GUID, což je identifikátor klienta. Klient může tyto informace odeslat na server ve vlastnosti MFNETSOURCE_PLAYERID. Klient odešle tyto informace na server na začátku připojení. Ukázková hodnota: {c579d042-cecc-11d1-bb31-00a0c9603954}" |
c-playerversion | Číslo verze přehrávače, který je odeslán na začátku připojení. Klient může tyto informace odeslat na server ve vlastnosti MFNETSOURCE_PLAYERVERSION. Klient odešle tyto informace na server na začátku připojení. |
cs(User-Agent) | Typ prohlížeče použitý, pokud byl přehrávač vložen do prohlížeče. Tuto hodnotu může nastavit klient ve vlastnosti MFNETSOURCE_BROWSERUSERAGENT. Pokud přehrávač nebyl vložen, toto pole odkazuje na uživatelského agenta klienta, který protokol vygeneroval. V tomto případě musí klient nastavit vlastnost MFNETSOURCE_PLAYERUSERAGENT. Klient odešle tyto informace na server na začátku připojení. Ukázková hodnota: "Mozilla/4.0_(kompatibilní;_MSIE_4.01;_Windows_98)" |
cs(Odkazující) | Adresa URL webové stránky, ve které byl přehrávač vložen (pokud byl vložen). Klient může tyto informace odeslat na server ve vlastnosti MFNETSOURCE_BROWSERWEBPAGE. Klient odešle tyto informace na server na konci připojení. Ukázková hodnota: "https://www.example.microsoft.com" |
c-hostexe | Pro hráčské záznamy v protokolu byl spuštěn hostitelský program (.exe). Například webová stránka v prohlížeči, aplet Microsoft Visual Basic nebo samostatný přehrávač. Klient může tyto informace odeslat na server ve vlastnosti MFNETSOURCE_HOSTEXE. Klient odešle tyto informace na server na konci připojení. Ukázkové hodnoty:
|
c-hostexever | Číslo verze hostitelského programu (.exe). Klient může tyto informace odeslat na server ve vlastnosti MFNETSOURCE_HOSTVERSION. Klient odešle tyto informace na server na konci připojení. |
Následující příklad kódu ukazuje, jak klientská aplikace konfiguruje zdroj sítě. Tento příklad nastaví pole logu "c-hostexe".
// Creates a media source from a URL.
//
// This example demonstrates how to set the MFNETSOURCE_HOSTEXE
// configuration property on the network source.
HRESULT CreateMediaSourceWithLogParams(
PCWSTR pszURL,
IMFMediaSource **ppSource
)
{
IPropertyStore *pConfig = NULL;
// Configure the property store.
HRESULT hr = PSCreateMemoryPropertyStore(IID_PPV_ARGS(&pConfig));
if (SUCCEEDED(hr))
{
PROPERTYKEY key;
key.fmtid = MFNETSOURCE_HOSTEXE;
key.pid = 0;
PROPVARIANT var;
var.vt = VT_LPWSTR;
var.pwszVal = L"MyPlayer.exe";
hr = pConfig->SetValue(key, var);
}
// Create the source media source.
if (SUCCEEDED(hr))
{
hr = CreateMediaSource(pszURL, pConfig, ppSource);
}
SafeRelease(&pConfig);
return hr;
}
Načítání statistiky sítě
Když aplikace volá jednu ze zdrojových metod překladače, vytvoří síťový zdroj, nastaví vlastnosti zadané v úložišti vlastností a otevře relaci se serverem médií. Kromě konfigurovatelných informací popsaných v předchozí části se mezi serverem a klientem během streamování a při zavření relace přenášejí další data.
Aplikace může načíst síťové statistiky pomocí identifikátoru služby MFNETSOURCE_STATISTICS_SERVICE. Chcete-li použít tuto službu, může aplikace volat funkci MFGetService k získání úložiště vlastností, které obsahuje síťové statistiky v rámci vlastnosti MFNETSOURCE_STATISTICS. Konkrétní hodnoty lze načíst zadáním odpovídajícího identifikátoru definovaného v MFNETSOURCE_STATISTICS_IDS výčtu.
Následující příklad kódu ukazuje, jak pomocí služby získat počet paketů přijatých klientem.
HRESULT GetPacketsReceived(IMFMediaSession *pSession, DWORD *pcPackets)
{
IPropertyStore *pProp = NULL;
PROPVARIANT var;
// Get the property store from the media session.
HRESULT hr = MFGetService(
pSession,
MFNETSOURCE_STATISTICS_SERVICE,
IID_PPV_ARGS(&pProp)
);
// Get the number of packets received by the client.
if (SUCCEEDED(hr))
{
PROPERTYKEY key;
key.fmtid = MFNETSOURCE_STATISTICS;
key.pid = MFNETSOURCE_RECVPACKETS_ID;
hr = pProp->GetValue(key, &var);
}
if (SUCCEEDED(hr))
{
*pcPackets = var.lVal;
}
PropVariantClear(&var);
SafeRelease(&pProp);
return hr;
}
Následující seznam popisuje některé identifikátory statistiky sítě definované v MFNETSOURCE_STATISTICS_IDS.
Identifikátor statistiky sítě | Popis |
---|---|
MFNETSOURCE_AVGBANDWIDTHBPS_ID | Průměrná šířka pásma (v bitech za sekundu), při které byl klient připojen k serveru. Hodnota se vypočítá po celou dobu trvání připojení. |
MFNETSOURCE_BUFFERINGCOUNT_ID | Počet případů, kdy klient ukládal do vyrovnávací paměti při přehrávání streamu. |
MFNETSOURCE_BYTESRECEIVED_ID | Počet bajtů přijatých klientem ze serveru Hodnota nezahrnuje žádnou režii přidanou zásobníkem sítě. Stejný obsah streamovaný pomocí různých protokolů může mít za následek různé hodnoty. |
MFNETSOURCE_LINKBANDWIDTH_ID | Maximální dostupná šířka pásma klienta v bitech za sekundu. |
MFNETSOURCE_LOSTPACKETS_ID | Počet paketů odesílaných serverem, ale během přenosu došlo ke ztrátě a klient ho nikdy nepřehrával. Hodnota neobsahuje pakety TCP ani UDP. |
MFNETSOURCE_RECVPACKETS_ID | Počet paketů přijatých ze serveru Hodnota nezahrnuje pakety TCP ani UDP. |
MFNETSOURCE_RECOVEREDBYECCPACKETS_ID | Pakety se ztratily v síti, které byly opraveny a obnoveny v klientské vrstvě. Tato hodnota neobsahuje pakety TCP ani UDP. |
MFNETSOURCE_RESENDSREQUESTED_ID | Počet požadavků, které klient provedl, aby přijal nové pakety. Tato hodnota neobsahuje pakety TCP ani UDP. |
MFNETSOURCE_RECOVEREDPACKETS_ID | Počet obnovených paketů, protože byly znovu odesílány prostřednictvím protokolu UDP. Tato hodnota neobsahuje pakety TCP ani UDP. Toto pole obsahuje nulu, pokud klient nepoužívá opětovné odeslání UDP. |
MFNETSOURCE_BUFFERPROGRESS_ID | Procento přehrávacího bufferu naplněného během ukládání do vyrovnávací paměti. |
MFNETSOURCE_PROTOCOL_ID | Protokol používaný pro přístup ke streamu. Může se lišit od protokolu požadovaného klientem. |
MFNETSOURCE_TRANSPORT_ID | Přenosový protokol používaný k přenesení datového proudu. Musí to být UDP nebo TCP. |