Registrazione client (Microsoft Media Foundation)

L'origine di rete supporta la registrazione client, che consente al server multimediale di tenere traccia dell'attività dei client che si connettono. I log client consentono a un server di registrare le statistiche di connessione, rendering e streaming. Questi log possono essere usati dai provider di contenuto in diversi scenari, ad esempio, per tracciare l'utilizzo del server multimediale e generare la fatturazione o per offrire contenuti di qualità appropriati a seconda della velocità della rete del client.

Un file di log contiene diverse voci di evento client. Ogni voce di log contiene un numero di campi delimitati da spazio. Esistono due tipi di log client: rendering (riproduzione) e streaming (ricezione). Poiché il contenuto può essere riprodotto e trasmesso contemporaneamente, il client può inviare una combinazione di entrambi i tipi di dati di log. In alcuni casi, due voci di log possono esistere per la stessa sessione. Ad esempio, quando la cache rapida è abilitata, il client può completare la ricezione del contenuto trasmesso prima di completare il rendering. In tal caso, i dati del log di streaming verranno inviati prima dei dati del log di rendering.

Il client invia i dati del log di rendering al server quando il client cambia da qualsiasi stato di riproduzione (riproduzione, inoltro rapido o riavvolgimento) a uno stato non riprodotto (arresto, sospensione, fine del flusso e inizio del flusso). Quando vengono inviati dati per un log di rendering, viene eseguita una connessione direttamente al server multimediale o a un server proxy configurato.

Se il contenuto viene archiviato in un file di cache locale temporaneo nel computer che esegue il client, il client può leggere un file dalla cache locale e inviare i dati del log di rendering per indicare che ha riprodotto il contenuto. In questo caso, il client legge un file dalla cache locale, la voce del log di rendering non contiene statistiche di rete e il protocollo è impostato su Cache.

Il client invia i dati del log di streaming al server per indicare come il client ha ricevuto il contenuto, ma non come è stato eseguito il rendering. Il client può inviare il log di streaming a lungo prima del completamento del rendering del contenuto.

Questo argomento non fornisce informazioni su tutti i campi di log. Per un riferimento completo, vedere Struttura dei dati dei log di Windows Media.

Configurazione dei campi di log

Media Foundation consente al client di configurare l'origine di rete usando le proprietà. L'applicazione deve impostare le proprietà appropriate in un archivio delle proprietà e passarla a uno dei metodi del resolver di origine. Il resolver di origine crea l'origine di rete come richiesto e apre una connessione con il server. Se la connessione ha esito positivo, il client invia informazioni su se stesso.

La tabella seguente descrive i campi di log e le proprietà corrispondenti che un'applicazione può impostare tramite il resolver di origine. Queste informazioni non cambiano durante la sessione.

Campo registrazione Descrizione
c-playerid Identificazione univoca del giocatore. Queste informazioni vengono inviate all'inizio della connessione. In genere, si tratta di un GUID del client. Il client può inviare queste informazioni al server nella proprietà MFNETSOURCE_PLAYERID .
Il client invia queste informazioni al server all'inizio della connessione.
Valore di esempio: "{c579d042-cecc-11d1-bb31-00a0c9603954}"
c-playerversion Numero di versione del lettore inviato all'inizio della connessione. Il client può inviare queste informazioni al server nella proprietà MFNETSOURCE_PLAYERVERSION .
Il client invia queste informazioni al server all'inizio della connessione.
cs(User-Agent) Tipo di browser usato se il lettore è stato incorporato in un browser. Questo valore può essere impostato dal client nella proprietà MFNETSOURCE_BROWSERUSERAGENT .
Se il lettore non è stato incorporato, questo campo fa riferimento all'agente utente del client che ha generato il log. In questo caso, il client deve impostare la proprietà MFNETSOURCE_PLAYERUSERAGENT .
Il client invia queste informazioni al server all'inizio della connessione.
Valore di esempio: "Mozilla/4.0_(compatibile;_MSIE_4.01;_Windows_98)"
cs(Referer) URL della pagina Web in cui è stato incorporato il lettore (se è stato incorporato). Il client può inviare queste informazioni al server nella proprietà MFNETSOURCE_BROWSERWEBPAGE .
Il client invia queste informazioni al server alla fine della connessione.
Valore di esempio: "https://www.example.microsoft.com"
c-hostexe Per le voci del log del lettore, il programma host (.exe) eseguito. Ad esempio, una pagina Web in un browser, un applet di Microsoft Visual Basic o un lettore autonomo. Il client può inviare queste informazioni al server nella proprietà MFNETSOURCE_HOSTEXE .
Il client invia queste informazioni al server alla fine della connessione.
Valori di esempio:
  • "iexplore.exe"
  • "myplayer.exe"
c-hostexever Numero di versione del programma host (.exe). Il client può inviare queste informazioni al server nella proprietà MFNETSOURCE_HOSTVERSION .
Il client invia queste informazioni al server alla fine della connessione.

Nell'esempio di codice seguente viene illustrato come un'applicazione client configura l'origine di rete. In questo esempio viene impostato il campo di log "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;
}

Recupero delle statistiche di rete

Quando l'applicazione chiama uno dei metodi del resolver di origine, crea l'origine di rete, imposta le proprietà specificate nell'archivio delle proprietà e apre una sessione con il server multimediale. Oltre alle informazioni configurabili descritte nella sezione precedente, i dati aggiuntivi vengono trasferiti tra il server e il client all'inizio della sessione, durante lo streaming e quando la sessione viene chiusa.

L'applicazione può recuperare le statistiche di rete usando l'identificatore del servizio MFNETSOURCE_STATISTICS_SERVICE . Per usare questo servizio, l'applicazione può chiamare la funzione MFGetService per ottenere l'archivio delle proprietà contenente le statistiche di rete nella proprietà MFNETSOURCE_STATISTICS . È possibile recuperare valori specifici specificando l'identificatore corrispondente definito nell'enumerazione MFNETSOURCE_STATISTICS_IDS .

Nell'esempio di codice seguente viene illustrato come usare il servizio per ottenere il numero di pacchetti ricevuti dal client.

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

Nell'elenco seguente vengono descritti alcuni identificatori di statistiche di rete definiti in MFNETSOURCE_STATISTICS_IDS.

Identificatore delle statistiche di rete Descrizione
MFNETSOURCE_AVGBANDWIDTHBPS_ID Larghezza di banda media (in bit al secondo) in cui il client è stato connesso al server. Il valore viene calcolato nell'intera durata della connessione.
MFNETSOURCE_BUFFERINGCOUNT_ID Numero di volte in cui il client è stato memorizzato nel buffer durante la riproduzione del flusso.
MFNETSOURCE_BYTESRECEIVED_ID Numero di byte ricevuti dal client dal server. Il valore non include alcun sovraccarico aggiunto dallo stack di rete. Lo stesso contenuto trasmesso usando protocolli diversi può comportare valori diversi.
MFNETSOURCE_LINKBANDWIDTH_ID Larghezza di banda massima disponibile del client in bit al secondo.
MFNETSOURCE_LOSTPACKETS_ID Numero di pacchetti inviati dal server, ma persi durante la trasmissione e non vengono mai riprodotti dal client. Il valore non include pacchetti TCP o UDP.
MFNETSOURCE_RECVPACKETS_ID Numero di pacchetti ricevuti dal server Il valore non include pacchetti TCP o UDP.
MFNETSOURCE_RECOVEREDBYECCPACKETS_ID I pacchetti persi nella rete ripristinati e ripristinati a livello client. Questo valore non include pacchetti TCP o UDP.
MFNETSOURCE_RESENDSREQUESTED_ID Numero di richieste effettuate dal client per ricevere nuovi pacchetti. Questo valore non include pacchetti TCP o UDP.
MFNETSOURCE_RECOVEREDPACKETS_ID Numero di pacchetti recuperati perché sono stati riabiliti tramite UDP. Questo valore non include pacchetti TCP o UDP. Questo campo contiene uno zero a meno che il client non usi l'oggetto UDP di nuovo.
MFNETSOURCE_BUFFERPROGRESS_ID Percentuale del buffer di playout riempito durante il buffering.
MFNETSOURCE_PROTOCOL_ID Protocollo usato per accedere al flusso. Questo può essere diverso dal protocollo richiesto dal client.
MFNETSOURCE_TRANSPORT_ID Protocollo di trasporto usato per distribuire il flusso. Deve essere UDP o TCP.

Funzionalità di origine di rete

Rete in Media Foundation