Udostępnij przez


Logowanie klienta (Microsoft Media Foundation)

Źródło sieci obsługuje rejestrowanie klientów, co umożliwia serwerowi multimediów śledzenie aktywności klientów łączących się z nim. Dzienniki klienta umożliwiają serwerowi rejestrowanie połączenia, renderowania i statystyk przesyłania strumieniowego. Te dzienniki mogą być używane przez dostawców zawartości w różnych scenariuszach, takich jak śledzenie użycia serwera multimediów i generowanie rozliczeń lub dostarczanie odpowiedniej jakości zawartości w zależności od szybkości sieci klienta.

Plik dziennika zawiera kilka wpisów zdarzeń klienta. Każdy wpis dziennika zawiera wiele pól rozdzielanych spacjami. Istnieją dwa typy dzienników klienta: renderowania (odtwarzanie) i przesyłania strumieniowego (odbieranie). Ponieważ zawartość może być odtwarzana i przesyłana strumieniowo jednocześnie, klient może wysyłać kombinację obu typów danych dziennika. W niektórych przypadkach dla tej samej sesji mogą istnieć dwa wpisy dziennika. Na przykład po włączeniu szybkiej pamięci podręcznej klient może zakończyć odbieranie przesyłanej strumieniowo zawartości przed zakończeniem renderowania. W takim przypadku dane dziennika przesyłania strumieniowego zostaną wysłane przed danymi dziennika renderowania.

Klient wysyła dane dziennika renderowania do serwera, gdy przechodzi ze stanu odtwarzania (odtwarzanie, przewijanie do przodu, przewijanie do tyłu) do stanu braku odtwarzania (stop, pauza, koniec strumienia, początek strumienia). Po przesłaniu danych dziennika renderowania połączenie jest wykonywane bezpośrednio z serwerem multimediów lub skonfigurowanym serwerem proxy.

Jeśli zawartość jest przechowywana w tymczasowym lokalnym pliku pamięci podręcznej na komputerze, na którym działa klient, klient może odczytać plik ze swojej lokalnej pamięci podręcznej i przesłać dane dziennika renderowania, aby wskazać, że odtworzył zawartość. W takim przypadku klient odczytuje plik z lokalnej pamięci podręcznej, wpis dziennika renderowania nie zawiera żadnych statystyk sieciowych, a protokół ma wartość Pamięć podręczna.

Klient wysyła dane dziennika przesyłania strumieniowego do serwera, aby wskazać, w jaki sposób klient odebrał zawartość, ale nie sposób jego renderowania. Klient może wysłać dziennik przesyłania strumieniowego na długo przed zakończeniem renderowania zawartości przez klienta.

Ten temat nie zawiera informacji o wszystkich dostępnych polach dziennika. Aby uzyskać kompletne odniesienie, zobacz Struktura danych dziennika usługi Windows Media.

Konfigurowanie pól dziennika

Program Media Foundation umożliwia klientowi skonfigurowanie źródła sieci przy użyciu właściwości. Aplikacja musi ustawić odpowiednie właściwości w składzie właściwości i przekazać go do jednej z metod rozpoznawania źródła. Program rozpoznawania źródła tworzy źródło sieci zgodnie z żądaniem i otwiera połączenie z serwerem. Jeśli połączenie zakończy się pomyślnie, klient wysyła informacje o sobie.

W poniższej tabeli opisano pola dziennika i odpowiednie właściwości, które aplikacja może ustawić za pośrednictwem narzędzia rozpoznawania źródła. Te informacje nie zmieniają się podczas sesji.

Pole rejestrowania Opis
c-playerid Unikatowa identyfikacja zawodnika. Te informacje są wysyłane na początku połączenia. Zazwyczaj jest to identyfikator GUID klienta. Klient może wysłać te informacje na serwer we właściwości MFNETSOURCE_PLAYERID.
Klient wysyła te informacje do serwera na początku połączenia.
Przykładowa wartość: "{c579d042-cecc-11d1-bb31-00a0c9603954}"
c-playerversion Numer wersji odtwarzacza, który jest wysyłany na początku połączenia. Klient może wysłać te informacje na serwer we właściwości MFNETSOURCE_PLAYERVERSION.
Klient wysyła te informacje do serwera na początku połączenia.
cs(User-Agent) Używany typ przeglądarki, jeśli odtwarzacz został osadzony w przeglądarce. Tę wartość można ustawić przez klienta we właściwości MFNETSOURCE_BROWSERUSERAGENT.
Jeśli odtwarzacz nie został osadzony, to pole odwołuje się do agenta użytkownika klienta, który wygenerował dziennik. W takim przypadku klient musi ustawić właściwość MFNETSOURCE_PLAYERUSERAGENT.
Klient wysyła te informacje do serwera na początku połączenia.
Przykładowa wartość: "Mozilla/4.0_(compatible;_MSIE_4.01;_Windows_98)"
cs(Referer) Adres URL strony internetowej, w której odtwarzacz został osadzony (jeśli został osadzony). Klient może wysłać te informacje na serwer we właściwości MFNETSOURCE_BROWSERWEBPAGE.
Klient wysyła te informacje do serwera na końcu połączenia.
Przykładowa wartość: "https://www.example.microsoft.com"
c-hostexe W przypadku wpisów w dzienniku gracza program hosta (.exe), który został uruchomiony. Na przykład strona internetowa w przeglądarce, apletu Microsoft Visual Basic lub autonomicznego odtwarzacza. Klient może wysłać te informacje na serwer we właściwości MFNETSOURCE_HOSTEXE.
Klient wysyła te informacje do serwera na końcu połączenia.
Przykładowe wartości:
  • "iexplore.exe"
  • "myplayer.exe"
c-hostexever Numer wersji programu hosta (.exe). Klient może wysłać te informacje do serwera we właściwości MFNETSOURCE_HOSTVERSION.
Klient wysyła te informacje do serwera na końcu połączenia.

Poniższy przykład kodu pokazuje, jak aplikacja kliencka konfiguruje źródło sieci. W tym przykładzie ustawiane jest pole dziennika "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;
}

Pobieranie statystyk sieci

Gdy aplikacja wywołuje jedną z metod rozpoznawania źródła, tworzy źródło sieci, ustawia właściwości określone w magazynie właściwości i otwiera sesję z serwerem multimediów. Oprócz konfigurowalnych informacji opisanych w poprzedniej sekcji dodatkowe dane są przesyłane między serwerem a klientem na początku sesji, podczas przesyłania strumieniowego i po zamknięciu sesji.

Aplikacja może pobierać statystyki sieci przy użyciu identyfikatora usługi MFNETSOURCE_STATISTICS_SERVICE. Aby użyć tej usługi, aplikacja może wywołać funkcję MFGetService w celu uzyskania repozytorium właściwości zawierającego statystyki sieciowe we właściwości MFNETSOURCE_STATISTICS. Określone wartości można pobrać, podając odpowiedni identyfikator zdefiniowany w enumeracji MFNETSOURCE_STATISTICS_IDS.

Poniższy przykład kodu pokazuje, jak za pomocą usługi uzyskać liczbę pakietów odebranych przez klienta.

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

Poniższa lista zawiera opis niektórych identyfikatorów statystyk sieci zdefiniowanych w MFNETSOURCE_STATISTICS_IDS.

Identyfikator statystyk sieci Opis
MFNETSOURCE_AVGBANDWIDTHBPS_ID Średnia przepustowość (w bitach na sekundę), w której klient był połączony z serwerem. Wartość jest obliczana przez cały czas trwania połączenia.
MFNETSOURCE_BUFFERINGCOUNT_ID Ile razy klient buforował podczas odtwarzania strumienia.
MFNETSOURCE_BYTESRECEIVED_ID Liczba bajtów odebranych przez klienta z serwera. Wartość nie zawiera żadnych obciążeń dodawanych przez stos sieciowy. Ta sama zawartość przesyłana strumieniowo przy użyciu różnych protokołów może powodować różne wartości.
MFNETSOURCE_LINKBANDWIDTH_ID Maksymalna dostępna przepustowość klienta w bitach na sekundę.
MFNETSOURCE_LOSTPACKETS_ID Liczba pakietów wysyłanych przez serwer, ale utraconych podczas transmisji i nigdy nie odtwarzanych przez klienta. Wartość nie obejmuje pakietów TCP ani UDP.
MFNETSOURCE_RECVPACKETS_ID Liczba pakietów odebranych z serwera Wartość nie obejmuje pakietów TCP ani UDP.
MFNETSOURCE_RECOVEREDBYECCPACKETS_ID Pakiety utracone w sieci, które zostały naprawione i odzyskane w warstwie klienta. Ta wartość nie obejmuje pakietów TCP ani UDP.
MFNETSOURCE_RESENDSREQUESTED_ID Liczba żądań wysyłanych przez klienta do odbierania nowych pakietów. Ta wartość nie obejmuje pakietów TCP ani UDP.
MFNETSOURCE_RECOVEREDPACKETS_ID Liczba odzyskanych pakietów, ponieważ były one ponownie przekazywane za pośrednictwem protokołu UDP. Ta wartość nie obejmuje pakietów TCP ani UDP. To pole zawiera zero, chyba że klient używa ponownego wysyłania UDP.
MFNETSOURCE_BUFFERPROGRESS_ID Procent zapełnienia bufora odtwarzania podczas buforowania.
MFNETSOURCE_PROTOCOL_ID Protokół używany do uzyskiwania dostępu do strumienia. Może się to różnić od protokołu żądanego przez klienta.
MFNETSOURCE_TRANSPORT_ID Protokół transportu używany do dostarczania strumienia. Musi to być protokół UDP lub TCP.

funkcje źródła sieci

Sieci w Media Foundation