Dela via


Klientloggning (Microsoft Media Foundation)

Nätverkskällan stöder klientloggning, vilket ger medieservern ett sätt att spåra aktiviteten för de klienter som ansluter till den. Med klientloggar kan en server registrera anslutnings-, återgivnings- och strömningsstatistik. Dessa loggar kan användas av innehållsleverantörer i olika scenarier, till exempel för att spåra medieserveranvändning och generera fakturering, eller för att leverera innehåll av lämplig kvalitet beroende på hastigheten i klientens nätverk.

En loggfil innehåller flera klienthändelseposter. Varje loggpost innehåller ett antal fält som avgränsas av mellanslag. Det finns två typer av klientloggar: återgivning (spelas upp) och strömning (mottagning). Eftersom innehåll kan spelas upp och strömmas samtidigt kan klienten skicka en kombination av båda typerna av loggdata. I vissa fall kan det finnas två loggposter för samma session. När snabb cache till exempel är aktiverad kan klienten slutföra mottagandet av det strömmade innehållet innan återgivningen är klar. I så fall skulle strömmande loggdata skickas före återgivningsloggdata.

Klienten skickar återgivningsloggdata till servern när klienten ändras från ett uppspelningstillstånd (spela upp, snabbspola framåt eller spola tillbaka) till ett icke-spelande tillstånd (stopp, paus, slut på strömmen och början av strömmen). När data för en återgivningslogg skickas görs en anslutning direkt till medieservern eller till en konfigurerad proxyserver.

Om innehållet lagras i en tillfällig lokal cachefil på den dator som kör klienten kan klienten läsa en fil från sin lokala cache och skicka återgivningsloggdata för att indikera att innehållet har spelats upp. I det här fallet läser klienten en fil från sin lokala cache, återgivningsloggposten innehåller ingen nätverksstatistik och protokollet är inställt på Cache.

Klienten skickar strömmande loggdata till servern för att ange hur klienten tog emot innehållet, men inte hur det renderades. Klienten kan skicka direktuppspelningsloggen långt innan klienten är klar med återgivningen av innehållet.

Det här avsnittet innehåller inte information om alla loggfält. En fullständig referens finns i Windows Media Log Data Structure.

Konfigurera loggfält

Med Media Foundation kan klienten konfigurera nätverkskällan med hjälp av egenskaper. Applikationen måste ange lämpliga egenskaper i ett egenskapslager och passera det till en av källlösarmetoderna. Källlösaren skapar nätverkskällan på begäran och öppnar en anslutning till servern. Om anslutningen lyckas skickar klienten information om sig själv.

I följande tabell beskrivs loggfälten och motsvarande egenskaper som ett program kan ange via källlösaren. Den här informationen ändras inte under sessionen.

Loggningsfält Beskrivning
c-playerid Unik identifiering av spelaren. Den här informationen skickas i början av anslutningen. Detta är vanligtvis ett GUID för klienten. Klienten kan skicka den här informationen till servern i egenskapen MFNETSOURCE_PLAYERID.
Klienten skickar den här informationen till servern i början av anslutningen.
Exempelvärde: "{c579d042-cecc-11d1-bb31-00a0c9603954}"
c-playerversion Versionsnumret för spelaren som skickas i början av anslutningen. Klienten kan skicka den här informationen till servern i egenskapen MFNETSOURCE_PLAYERVERSION.
Klienten skickar den här informationen till servern i början av anslutningen.
cs(User-Agent) Webbläsartyp som används om spelaren var inbäddad i en webbläsare. Det här värdet kan anges av klienten i egenskapen MFNETSOURCE_BROWSERUSERAGENT.
Om spelaren inte var inbäddad refererar det här fältet till användaragenten för klienten som genererade loggen. I det här fallet måste klienten ange egenskapen MFNETSOURCE_PLAYERUSERAGENT.
Klienten skickar den här informationen till servern i början av anslutningen.
Exempelvärde: "Mozilla/4.0_(compatible;_MSIE_4.01;_Windows_98)"
cs(Referer) URL för webbsidan där spelaren var inbäddad (om den var inbäddad). Klienten kan skicka den här informationen till servern i egenskapen MFNETSOURCE_BROWSERWEBPAGE.
Klienten skickar den här informationen till servern i slutet av anslutningen.
Exempelvärde: "https://www.example.microsoft.com"
c-hostexe För spelarloggposter, värdprogrammet (.exe) som kördes. Till exempel en webbsida i en webbläsare, en Microsoft Visual Basic-applet eller en fristående spelare. Klienten kan skicka den här informationen till servern i egenskapen MFNETSOURCE_HOSTEXE.
Klienten skickar den här informationen till servern i slutet av anslutningen.
Exempelvärden:
  • "iexplore.exe"
  • "myplayer.exe"
c-hostexever Värdprogram (.exe) versionsnummer. Klienten kan skicka den här informationen till servern i egenskapen MFNETSOURCE_HOSTVERSION.
Klienten skickar den här informationen till servern i slutet av anslutningen.

Följande kodexempel visar hur ett klientprogram konfigurerar nätverkskällan. I det här exemplet anges loggfältet "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;
}

Hämtar nätverksstatistik

När programmet anropar någon av källlösarmetoderna skapar det nätverkskällan, anger de egenskaper som anges i egenskapsarkivet och öppnar en session med medieservern. Utöver den konfigurerbara information som beskrivs i föregående avsnitt överförs ytterligare data mellan servern och klienten i början av sessionen, under strömning och när sessionen stängs.

Programmet kan hämta nätverksstatistik med hjälp av MFNETSOURCE_STATISTICS_SERVICE tjänstidentifierare. Om du vill använda den här tjänsten kan programmet anropa funktionen MFGetService för att hämta egenskapsarkivet som innehåller nätverksstatistik i egenskapen MFNETSOURCE_STATISTICS. Specifika värden kan hämtas genom att ange motsvarande identifierare som definierats i MFNETSOURCE_STATISTICS_IDS uppräkning.

I följande kodexempel visas hur du använder tjänsten för att hämta antalet paket som tas emot av klienten.

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

I följande lista beskrivs några av nätverksstatistikidentifierarna som definierats i MFNETSOURCE_STATISTICS_IDS.

Identifierare för nätverksstatistik Beskrivning
MFNETSOURCE_AVGBANDWIDTHBPS_ID Genomsnittlig bandbredd (i bitar per sekund) där klienten var ansluten till servern. Värdet beräknas under hela anslutningens varaktighet.
MFNETSOURCE_BUFFERINGCOUNT_ID Antal gånger klienten buffrade när strömmen spelades upp.
MFNETSOURCE_BYTESRECEIVED_ID Antal byte som tas emot av klienten från servern. Värdet innehåller inte några omkostnader som läggs till av nätverksstacken. Samma innehåll som strömmas med hjälp av olika protokoll kan resultera i olika värden.
MFNETSOURCE_LINKBANDWIDTH_ID Maximal tillgänglig bandbredd för klienten i bitar per sekund.
MFNETSOURCE_LOSTPACKETS_ID Antal paket som skickats av servern men förlorats under överföringen och aldrig spelats upp av klienten. Värdet innehåller inte TCP- eller UDP-paket.
MFNETSOURCE_RECVPACKETS_ID Antal paket som tas emot från servern Värdet inkluderar inte TCP- eller UDP-paket.
MFNETSOURCE_RECOVEREDBYECCPACKETS_ID Paket som förlorats i nätverket som reparerades och återställdes på klientlagret. Det här värdet inkluderar inte TCP- eller UDP-paket.
MFNETSOURCE_RESENDSREQUESTED_ID Antalet begäranden som görs av klienten för att ta emot nya paket. Det här värdet inkluderar inte TCP- eller UDP-paket.
MFNETSOURCE_RECOVEREDPACKETS_ID Antal paket som har återhämtats eftersom de har återsänts via UDP. Det här värdet inkluderar inte TCP- eller UDP-paket. Det här fältet innehåller en nolla om inte klienten använder UDP-återsänd.
MFNETSOURCE_BUFFERPROGRESS_ID Procentandelen av uppspelningsbufferten som fyllts under buffring.
MFNETSOURCE_PROTOCOL_ID Protokoll som används för att komma åt strömmen. Detta kan skilja sig från det protokoll som begärs av klienten.
MFNETSOURCE_TRANSPORT_ID Transportprotokoll som används för att leverera strömmen. Detta måste vara antingen UDP eller TCP.

Nätverkskällans funktioner

Nätverksteknik i Media Foundation