Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A fonte de rede suporta o registro em log do cliente, que fornece uma maneira para o servidor de mídia rastrear a atividade dos clientes que se conectam a ele. Os logs do cliente permitem que um servidor registre estatísticas de conexão, renderização e streaming. Esses logs podem ser usados por provedores de conteúdo em vários cenários, como para rastrear o uso do servidor de mídia e gerar faturamento, ou para fornecer conteúdo de qualidade adequada, dependendo da velocidade da rede do cliente.
Um arquivo de log contém várias entradas de evento do cliente. Cada entrada de log contém vários campos delimitados por espaço. Existem dois tipos de logs de clientes: de renderização (reprodução) e de streaming (recebimento). Como o conteúdo pode ser reproduzido e transmitido simultaneamente, o cliente pode enviar uma combinação de ambos os tipos de dados de log. Em certos casos, duas entradas de log podem existir para a mesma sessão. Por exemplo, quando o Cache Rápido está habilitado, o cliente pode terminar de receber o conteúdo transmitido antes de concluir a renderização. Nesse caso, os dados de log de streaming seriam enviados antes dos dados de log de renderização.
O cliente envia dados de log de renderização para o servidor quando o cliente muda de qualquer estado de reprodução (reprodução, avanço rápido ou retrocesso) para um estado sem reprodução (parar, pausar, fim do fluxo e início do fluxo). Quando os dados de um log de renderização são enviados, uma conexão é feita diretamente com o servidor de mídia ou um servidor proxy configurado.
Se o conteúdo estiver armazenado em um arquivo de cache local temporário no computador que está executando o cliente, o cliente poderá ler um arquivo de seu cache local e enviar os dados de log de renderização para indicar que ele reproduziu o conteúdo. Nesse caso, o cliente lê um arquivo de seu cache local, a entrada de log de renderização não contém estatísticas de rede e o protocolo é definido como Cache.
O cliente envia dados de log de streaming para o servidor para indicar como o cliente recebeu o conteúdo, mas não como ele foi renderizado. O cliente pode enviar o log de streaming muito antes de terminar de renderizar o conteúdo.
Este tópico não fornece informações sobre todos os campos de log. Para obter uma referência completa, consulte Windows Media Log Data Structure.
Configurando campos de log
O Media Foundation permite que o cliente configure a fonte de rede usando propriedades. O aplicativo deve definir as propriedades apropriadas em um repositório de propriedades e passá-lo para um dos métodos de resolução de origem. O resolvedor de origem cria a fonte de rede conforme solicitado e abre uma conexão com o servidor. Se a conexão for bem-sucedida, o cliente enviará informações sobre si mesmo.
A tabela a seguir descreve os campos de log e as propriedades correspondentes que um aplicativo pode definir através do resolvedor de origem. Esta informação não é alterada durante a sessão.
| Campo de registo | Descrição |
|---|---|
| C-PlayerID | Identificação única do jogador. Esta informação é enviada no início da ligação. Normalmente, este é um GUID do cliente. O cliente pode enviar essas informações para o servidor na propriedade MFNETSOURCE_PLAYERID. O cliente envia essas informações para o servidor no início da conexão. Valor da amostra: "{c579d042-cecc-11d1-bb31-00a0c9603954}" |
| c-playerversão | O número da versão do leitor que é enviado no início da ligação. O cliente pode enviar essas informações para o servidor na propriedade MFNETSOURCE_PLAYERVERSION. O cliente envia essas informações para o servidor no início da conexão. |
| cs(User-Agent) | Tipo de navegador usado se o player foi incorporado em um navegador. Esse valor pode ser definido pelo cliente na propriedade MFNETSOURCE_BROWSERUSERAGENT. Se o player não foi incorporado, este campo refere-se ao agente de usuário do cliente que gerou o log. Nesse caso, o cliente deve definir a propriedade MFNETSOURCE_PLAYERUSERAGENT. O cliente envia essas informações para o servidor no início da conexão. Valor da amostra: "Mozilla/4.0_(compatível;_MSIE_4.01;_Windows_98)" |
| cs(Referer) | URL da página Web em que o leitor foi incorporado (se estiver incorporado). O cliente pode enviar essas informações para o servidor na propriedade MFNETSOURCE_BROWSERWEBPAGE. O cliente envia essas informações para o servidor no final da conexão. Valor da amostra: "https://www.example.microsoft.com" |
| c-hostexe | | Para entradas de log do jogador, o programa anfitrião (.exe) que foi executado. Por exemplo, uma página da Web em um navegador, um miniaplicativo do Microsoft Visual Basic ou um player autônomo. O cliente pode enviar essas informações para o servidor na propriedade MFNETSOURCE_HOSTEXE. O cliente envia essas informações para o servidor no final da conexão. Valores de amostra:
|
| C-HostExever | Número de versão do programa host (.exe). O cliente pode enviar essas informações para o servidor na propriedade MFNETSOURCE_HOSTVERSION. O cliente envia essas informações para o servidor no final da conexão. |
O exemplo de código a seguir mostra como um aplicativo cliente configura a fonte de rede. Este exemplo define o campo de 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;
}
Recuperando estatísticas de rede
Quando o aplicativo chama um dos métodos de resolução de origem, ele cria a fonte de rede, define as propriedades especificadas no repositório de propriedades e abre uma sessão com o servidor de mídia. Além das informações configuráveis descritas na seção anterior, dados adicionais são transferidos entre o servidor e o cliente no início da sessão, durante o streaming e quando a sessão é fechada.
O aplicativo pode recuperar estatísticas de rede usando o identificador de serviço MFNETSOURCE_STATISTICS_SERVICE. Para usar este serviço, a aplicação pode chamar a função MFGetService para obter o repositório de propriedades que contém estatísticas de rede na propriedade MFNETSOURCE_STATISTICS. Os valores específicos podem ser recuperados fornecendo o identificador correspondente definido na enumeração MFNETSOURCE_STATISTICS_IDS.
O exemplo de código a seguir mostra como usar o serviço para obter o número de pacotes recebidos pelo cliente.
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;
}
A lista a seguir descreve alguns dos identificadores de estatísticas de rede definidos em MFNETSOURCE_STATISTICS_IDS.
| Identificador de estatísticas de rede | Descrição |
|---|---|
| MFNETSOURCE_AVGBANDWIDTHBPS_ID | Largura de banda média (em bits por segundo) na qual o cliente foi conectado ao servidor. O valor é calculado ao longo de toda a duração da conexão. |
| MFNETSOURCE_BUFFERINGCOUNT_ID | Número de vezes que o cliente armazenou em buffer durante a reprodução da transmissão. |
| MFNETSOURCE_BYTESRECEIVED_ID | Número de bytes recebidos pelo cliente do servidor. O valor não inclui qualquer sobrecarga adicionada pela pilha de rede. O mesmo conteúdo transmitido usando protocolos diferentes pode resultar em valores diferentes. |
| MFNETSOURCE_LINKBANDWIDTH_ID | Largura de banda máxima disponível do cliente em bits por segundo. |
| MFNETSOURCE_LOSTPACKETS_ID | Número de pacotes enviados pelo servidor, mas perdidos durante a transmissão, e nunca jogados pelo cliente. O valor não inclui pacotes TCP ou UDP. |
| MFNETSOURCE_RECVPACKETS_ID | Número de pacotes recebidos do servidor O valor não inclui pacotes TCP ou UDP. |
| MFNETSOURCE_RECOVEREDBYECCPACKETS_ID | Pacotes perdidos na rede que foram reparados e recuperados na camada do cliente. Esse valor não inclui pacotes TCP ou UDP. |
| MFNETSOURCE_RESENDSREQUESTED_ID | O número de solicitações feitas pelo cliente para receber novos pacotes. Esse valor não inclui pacotes TCP ou UDP. |
| MFNETSOURCE_RECOVEREDPACKETS_ID | Número de pacotes recuperados porque foram reenviados através do UDP. Esse valor não inclui pacotes TCP ou UDP. Este campo contém um zero, a menos que o cliente esteja usando o reenvio UDP. |
| MFNETSOURCE_BUFFERPROGRESS_ID | A porcentagem do buffer de playout preenchido durante o buffer. |
| MFNETSOURCE_PROTOCOL_ID | Protocolo usado para acessar o fluxo. Isso pode diferir do protocolo solicitado pelo cliente. |
| MFNETSOURCE_TRANSPORT_ID | Protocolo de transporte usado para entregar o fluxo. Isso deve ser UDP ou TCP. |