Registro de cliente (Microsoft Media Foundation)
El origen de red admite el registro de cliente, que proporciona una manera de que el servidor multimedia realice un seguimiento de la actividad de los clientes que se conectan a él. Los registros de cliente permiten que un servidor registre las estadísticas de conexión, representación y streaming. Estos registros los pueden usar los proveedores de contenido en diversos escenarios, como, para realizar un seguimiento del uso del servidor multimedia y generar facturación, o para entregar contenido de calidad adecuado en función de la velocidad de la red del cliente.
Un archivo de registro contiene varias entradas de eventos de cliente. Cada entrada de registro contiene una serie de campos delimitados por espacios. Hay dos tipos de registros de cliente: representación (reproducción) y streaming (recepción). Dado que el contenido se puede reproducir y transmitir simultáneamente, el cliente puede enviar una combinación de ambos tipos de datos de registro. En algunos casos, pueden existir dos entradas de registro para la misma sesión. Por ejemplo, cuando la caché rápida está habilitada, el cliente puede terminar de recibir el contenido transmitido antes de que termine de representarlo. En ese caso, los datos del registro de streaming se enviarían antes de los datos de registro de representación.
El cliente envía datos de registro de representación al servidor cuando el cliente cambia de cualquier estado de reproducción (reproducción, avance rápido o rebobinado) a un estado que no se está reproduciendo (detención, pausa, fin de la secuencia y comienzo de la secuencia). Cuando se envían datos para un registro de representación, se realiza una conexión directamente al servidor multimedia o a un servidor proxy configurado.
Si el contenido se almacena en un archivo de caché local temporal en el equipo que ejecuta el cliente, el cliente puede leer un archivo de su caché local y enviar los datos del registro de representación para indicar que ha reproducido el contenido. En este caso, el cliente lee un archivo de su caché local, la entrada del registro de representación no contiene estadísticas de red y el protocolo se establece en Caché.
El cliente envía datos de registro de streaming al servidor para indicar cómo el cliente recibió el contenido, pero no cómo se ha representado. El cliente puede enviar el registro de streaming mucho antes de que el cliente termine de representar el contenido.
En este tema no se proporciona información sobre todos los campos de registro. Para obtener una referencia completa, consulta Estructura de datos de registro de Windows Media.
Configuración de campos de registro
Media Foundation permite al cliente configurar el origen de red mediante propiedades. La aplicación debe establecer las propiedades adecuadas en un almacén de propiedades y pasarla a uno de los métodos de resolución de origen. El solucionador de origen crea el origen de red según se solicita y abre una conexión con el servidor. Si la conexión se realiza correctamente, el cliente envía información sobre sí misma.
En la tabla siguiente se describen los campos de registro y las propiedades correspondientes que una aplicación puede establecer a través del solucionador de origen. Esta información no cambia durante la sesión.
Campo registro | Descripción |
---|---|
c-playerid | Identificación única del jugador. Esta información se envía al principio de la conexión. Normalmente, se trata de un GUID del cliente. El cliente puede enviar esta información al servidor en la propiedad MFNETSOURCE_PLAYERID . El cliente envía esta información al servidor al principio de la conexión. Valor de ejemplo: "{c579d042-cecc-11d1-bb31-00a0c9603954}" |
c-playerversion | Número de versión del reproductor que se envía al principio de la conexión. El cliente puede enviar esta información al servidor en la propiedad MFNETSOURCE_PLAYERVERSION . El cliente envía esta información al servidor al principio de la conexión. |
cs(User-Agent) | Tipo de explorador usado si el reproductor se insertó en un explorador. El cliente puede establecer este valor en la propiedad MFNETSOURCE_BROWSERUSERAGENT . Si el reproductor no se ha incrustado, este campo hace referencia al agente de usuario del cliente que generó el registro. En este caso, el cliente debe establecer la propiedad MFNETSOURCE_PLAYERUSERAGENT . El cliente envía esta información al servidor al principio de la conexión. Valor de ejemplo: "Mozilla/4.0_(compatible;_MSIE_4.01;_Windows_98)" |
cs(Referer) | Dirección URL de la página web en la que se insertó el reproductor (si se ha incrustado). El cliente puede enviar esta información al servidor en la propiedad MFNETSOURCE_BROWSERWEBPAGE . El cliente envía esta información al servidor al final de la conexión. Valor de ejemplo: "https://www.example.microsoft.com" |
c-hostexe | Para las entradas de registro del reproductor, el programa host (.exe) que se ejecutó. Por ejemplo, una página web en un explorador, un applet de Microsoft Visual Basic o un reproductor independiente. El cliente puede enviar esta información al servidor en la propiedad MFNETSOURCE_HOSTEXE . El cliente envía esta información al servidor al final de la conexión. Valores de ejemplo:
|
c-hostexever | Número de versión del programa host (.exe). El cliente puede enviar esta información al servidor en la propiedad MFNETSOURCE_HOSTVERSION . El cliente envía esta información al servidor al final de la conexión. |
En el ejemplo de código siguiente se muestra cómo una aplicación cliente configura el origen de red. En este ejemplo se establece el campo de registro "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;
}
Recuperación de estadísticas de red
Cuando la aplicación llama a uno de los métodos de resolución de origen, crea el origen de red, establece las propiedades especificadas en el almacén de propiedades y abre una sesión con el servidor multimedia. Además de la información configurable descrita en la sección anterior, los datos adicionales se transfieren entre el servidor y el cliente al principio de la sesión, durante el streaming y cuando se cierra la sesión.
La aplicación puede recuperar estadísticas de red mediante el identificador de servicio MFNETSOURCE_STATISTICS_SERVICE . Para usar este servicio, la aplicación puede llamar a la función MFGetService para obtener el almacén de propiedades que contiene estadísticas de red en la propiedad MFNETSOURCE_STATISTICS . Se pueden recuperar valores específicos proporcionando el identificador correspondiente definido en la enumeración MFNETSOURCE_STATISTICS_IDS .
En el ejemplo de código siguiente se muestra cómo usar el servicio para obtener el número de paquetes recibidos por el 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;
}
En la lista siguiente se describen algunos de los identificadores de estadísticas de red definidos en MFNETSOURCE_STATISTICS_IDS.
Identificador de estadísticas de red | Descripción |
---|---|
MFNETSOURCE_AVGBANDWIDTHBPS_ID | Ancho de banda medio (en bits por segundo) en el que el cliente estaba conectado al servidor. El valor se calcula en toda la duración de la conexión. |
MFNETSOURCE_BUFFERINGCOUNT_ID | Número de veces que el cliente se almacena en búfer mientras se reproduce la secuencia. |
MFNETSOURCE_BYTESRECEIVED_ID | Número de bytes recibidos por el cliente del servidor. El valor no incluye ninguna sobrecarga que agregue la pila de red. El mismo contenido transmitido mediante protocolos diferentes puede dar lugar a valores diferentes. |
MFNETSOURCE_LINKBANDWIDTH_ID | Ancho de banda máximo disponible del cliente en bits por segundo. |
MFNETSOURCE_LOSTPACKETS_ID | Número de paquetes enviados por el servidor pero perdidos durante la transmisión y nunca jugados por el cliente. El valor no incluye paquetes TCP o UDP. |
MFNETSOURCE_RECVPACKETS_ID | Número de paquetes recibidos del servidor El valor no incluye paquetes TCP o UDP. |
MFNETSOURCE_RECOVEREDBYECCPACKETS_ID | Paquetes perdidos en la red que se repararon y recuperaron en el nivel de cliente. Este valor no incluye paquetes TCP o UDP. |
MFNETSOURCE_RESENDSREQUESTED_ID | Número de solicitudes realizadas por el cliente para recibir nuevos paquetes. Este valor no incluye paquetes TCP o UDP. |
MFNETSOURCE_RECOVEREDPACKETS_ID | Número de paquetes recuperados porque se reenviaron a través de UDP. Este valor no incluye paquetes TCP o UDP. Este campo contiene un cero a menos que el cliente use el reenvío de UDP. |
MFNETSOURCE_BUFFERPROGRESS_ID | Porcentaje del búfer de reproducción rellenado durante el almacenamiento en búfer. |
MFNETSOURCE_PROTOCOL_ID | Protocolo usado para acceder a la secuencia. Esto puede diferir del protocolo solicitado por el cliente. |
MFNETSOURCE_TRANSPORT_ID | Protocolo de transporte usado para entregar la secuencia. Debe ser UDP o TCP. |