Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сетевой источник поддерживает ведение журнала клиентов, что позволяет серверу мультимедиа отслеживать действия клиентов, подключающихся к нему. Клиентские журналы позволяют серверу записывать подключения, рендеринг и статистику потоков. Эти журналы можно использовать поставщиками содержимого в различных сценариях, например для трассировки использования сервера мультимедиа и создания выставления счетов, или доставки подходящего содержимого в зависимости от скорости сети клиента.
Файл журнала содержит несколько записей событий клиента. Каждая запись журнала содержит ряд полей с разделителями пространства. Существует два типа журналов клиентов: рендеринга (воспроизведение) и стриминга (прием). Так как содержимое может воспроизводиться и передаваться одновременно, клиент может отправлять комбинацию обоих типов данных журнала. В некоторых случаях для одного сеанса могут существовать две записи журнала. Например, при включенном Fast Cache клиент может завершить получение транслируемого контента раньше, чем его визуализация будет окончена. В этом случае данные журнала потоковой передачи будут отправлены раньше, чем данные журнала отрисовки.
Клиент отправляет данные журнала отрисовки на сервер, когда его состояние изменяется с любого режима воспроизведения (воспроизведение, перемотка вперед или назад) на состояние, в котором воспроизведение не происходит (остановка, пауза, завершение или начало воспроизведения потока). При отправке данных журнала отрисовки выполняется подключение непосредственно к мультимедийному серверу или настроенному прокси-серверу.
Если содержимое хранится в локальном файле кэша на компьютере, на котором работает клиент, клиент может считать файл из локального кэша и может отправить данные журнала отрисовки, указав, что контент был воспроизведен. В этом случае клиент считывает файл из локального кэша, запись журнала отрисовки не содержит статистику сети, а протокол имеет значение Cache.
Клиент отправляет журнал потоковой передачи данных на сервер, чтобы указать, как он получил содержимое, но не как это содержимое было отображено. Клиент может отправить лог потоковой передачи задолго до завершения отрисовки содержимого.
В этом разделе не содержится информация обо всех полях журнала. Полный справочник см. структуру данных журнала Windows Media в .
Настройка полей журнала
Media Foundation позволяет клиенту настроить сетевой источник с помощью свойств. Приложение должно задать соответствующие свойства в хранилище свойств и передать его одному из методов исходного сопоставителя. Сопоставитель источника создает источник сети по запросу и открывает подключение к серверу. Если подключение выполнено успешно, клиент отправляет сведения о себе.
В следующей таблице описываются поля журнала и соответствующие свойства, которые приложение может задать с помощью исходного сопоставителя. Эти сведения не изменяются во время сеанса.
Поле журналирования | Описание |
---|---|
c-playerid | Уникальная идентификация игрока. Эта информация отправляется в начале подключения. Как правило, это GUID клиента. Клиент может отправлять эти сведения на сервер в свойстве MFNETSOURCE_PLAYERID. Клиент отправляет эти сведения серверу в начале подключения. Пример значения: "{c579d042-cecc-11d1-bb31-00a0c9603954}" |
c-playerversion | Номер версии проигрывателя, отправляемого в начале подключения. Клиент может отправлять эти сведения на сервер в свойстве MFNETSOURCE_PLAYERVERSION. Клиент отправляет эти сведения серверу в начале подключения. |
cs(User-Agent) | Тип браузера, используемый, если проигрыватель был внедрен в браузер. Это значение можно задать клиентом в свойстве MFNETSOURCE_BROWSERUSERAGENT. Если проигрыватель не был встроен, это поле ссылается на пользователя агента клиента, создавшего лог-файл. В этом случае клиент должен задать свойство MFNETSOURCE_PLAYERUSERAGENT. Клиент отправляет эти сведения серверу в начале подключения. Пример значения: "Mozilla/4.0_(совместимо;_MSIE_4.01;_Windows_98)" |
cs(Referer) | URL-адрес веб-страницы, в которой был внедрен проигрыватель (если он был внедрен). Клиент может отправить эти сведения на сервер в свойстве MFNETSOURCE_BROWSERWEBPAGE. Клиент отправляет эти сведения серверу в конце подключения. Пример значения: "https://www.example.microsoft.com" |
c-hostexe | Для записей журнала проигрывателя программа узла (.exe), которая была запущена. Например, веб-страница в браузере, applet Microsoft Visual Basic или автономный проигрыватель. Клиент может отправлять эти сведения на сервер в свойстве MFNETSOURCE_HOSTEXE. Клиент отправляет эти сведения серверу в конце подключения. Примеры значений:
|
c-hostexever | Номер версии программы узла (.exe). Клиент может отправлять эти сведения на сервер в свойстве MFNETSOURCE_HOSTVERSION. Клиент отправляет эти сведения серверу в конце подключения. |
В следующем примере кода показано, как клиентское приложение настраивает сетевой источник. В этом примере задается поле журнала 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;
}
Получение статистики сети
Когда приложение вызывает один из методов сопоставителя источника, он создает сетевой источник, задает свойства, указанные в хранилище свойств, и открывает сеанс с сервером мультимедиа. Помимо настраиваемых сведений, описанных в предыдущем разделе, дополнительные данные передаются между сервером и клиентом в начале сеанса, во время потоковой передачи и при закрытии сеанса.
Приложение может получить статистику сети с помощью идентификатора службы MFNETSOURCE_STATISTICS_SERVICE. Чтобы использовать эту службу, приложение может вызвать функцию MFGetService, чтобы получить хранилище свойств, содержащее статистику сети в свойстве MFNETSOURCE_STATISTICS. Определенные значения можно получить, указав соответствующий идентификатор, определенный в перечислении MFNETSOURCE_STATISTICS_IDS.
В следующем примере кода показано, как использовать службу для получения количества пакетов, полученных клиентом.
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;
}
В следующем списке описываются некоторые идентификаторы статистики сети, определенные в MFNETSOURCE_STATISTICS_IDS.
Идентификатор статистики сети | Описание |
---|---|
MFNETSOURCE_AVGBANDWIDTHBPS_ID | Средняя пропускная способность (в битах в секунду), с которой клиент был подключен к серверу. Значение вычисляется по всей продолжительности подключения. |
MFNETSOURCE_BUFFERINGCOUNT_ID | Количество раз, когда клиент буферизовался при воспроизведении потока. |
MFNETSOURCE_BYTESRECEIVED_ID | Количество байтов, полученных клиентом от сервера. Это значение не включает в себя какие-либо издержки, добавляемые сетевым стеком. Одно и то же содержимое, транслируемое с использованием разных протоколов, может приводить к различным значениям. |
MFNETSOURCE_LINKBANDWIDTH_ID | Максимальная доступная пропускная способность клиента в битах в секунду. |
MFNETSOURCE_LOSTPACKETS_ID | Количество пакетов, отправленных сервером, но потерянных во время передачи и никогда не воспроизведённых клиентом. Значение не включает пакеты TCP или UDP. |
MFNETSOURCE_RECVPACKETS_ID | Количество пакетов, полученных от сервера, значение не включает пакеты TCP или UDP. |
MFNETSOURCE_RECOVEREDBYECCPACKETS_ID | Пакеты, потерянные в сети, которые были восстановлены и исправлены на клиентском уровне. Это значение не включает пакеты TCP или UDP. |
MFNETSOURCE_RESENDSREQUESTED_ID | Количество запросов, сделанных клиентом для получения новых пакетов. Это значение не включает пакеты TCP или UDP. |
MFNETSOURCE_RECOVEREDPACKETS_ID | Число восстановленных пакетов благодаря тому, что они были отправлены повторно через UDP. Это значение не включает пакеты TCP или UDP. Это поле содержит ноль, если клиент не использует повторную отправку UDP. |
MFNETSOURCE_BUFFERPROGRESS_ID | Процент заполнения плейаут-буфера во время буферизации. |
MFNETSOURCE_PROTOCOL_ID | Протокол, используемый для доступа к потоку. Это может отличаться от протокола, запрошенного клиентом. |
MFNETSOURCE_TRANSPORT_ID | Транспортный протокол, используемый для доставки потока. Это должен быть UDP или TCP. |