用戶端記錄 (Microsoft Media Foundation)

網路來源支援用戶端記錄,其提供一種方式讓媒體伺服器追蹤與其連線的用戶端活動。 用戶端記錄可讓伺服器記錄連線、轉譯和串流統計資料。 這些記錄可由內容提供者在各種案例中使用,例如追蹤媒體伺服器使用量並產生計費,或根據用戶端網路的速度提供適當的品質內容。

記錄檔包含數個用戶端事件專案。 每個記錄專案都包含一些以空格分隔的欄位。 用戶端記錄有兩種類型: 譯 (播放) 和 串流 (接收) 。 因為可以同時播放和串流內容,所以用戶端可以傳送這兩種類型的記錄資料的組合。 在某些情況下,同一個會話可以存在兩個記錄專案。 例如,啟用快速快取時,用戶端可以在完成轉譯之前完成接收串流內容。 在此情況下,串流記錄資料會在轉譯記錄資料之前傳送。

當用戶端從任何播放狀態 (播放、快速轉送或倒轉) 變更為非播放狀態時,用戶端會將轉譯記錄資料傳送至伺服器, (停止、暫停、串流結束,以及資料流程開頭) 。 提交轉譯記錄的資料時,會直接連線到媒體伺服器或已設定的 Proxy 伺服器。

如果內容儲存在執行用戶端的電腦上暫存本機快取檔案中,用戶端可以從其本機快取讀取檔案,並提交轉譯記錄資料,以指出它已播放內容。 在此情況下,用戶端會從其本機快取讀取檔案、轉譯記錄專案不包含任何網路統計資料,而且通訊協定會設定為快取。

用戶端會將串流記錄資料傳送至伺服器,以指出用戶端接收內容的方式,但無法指出其轉譯方式。 用戶端可以在用戶端完成轉譯內容之前,傳送串流記錄檔。

本主題不提供所有記錄欄位的相關資訊。 如需完整參考,請參閱 Windows 媒體記錄資料結構

設定記錄欄位

媒體基礎可讓用戶端使用屬性來設定網路來源。 應用程式必須在屬性存放區中設定適當的屬性,並將它傳遞至其中一個來源解析程式方法。 來源解析程式會依照要求建立網路來源,並開啟與伺服器的連線。 如果連線成功,用戶端會傳送本身的相關資訊。

下表描述記錄欄位,以及應用程式可透過來源解析程式設定的對應屬性。 此資訊不會在會話期間變更。

記錄欄位 描述
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 (參考者) 如果播放程式內嵌在內嵌) ,則 (網頁的 URL。 用戶端可以將此資訊傳送至 MFNETSOURCE_BROWSERWEBPAGE 屬性中的伺服器。
用戶端會在連線結束時將此資訊傳送至伺服器。
範例值:「 https://www.example.microsoft.com" ;
c-hostexe 針對播放程式記錄專案,執行的主程式 (.exe) 。 例如,瀏覽器中的網頁、Microsoft Visual Basic 小程式或獨立播放機。 用戶端可以將此資訊傳送至 MFNETSOURCE_HOSTEXE 屬性中的伺服器。
用戶端會在連線結束時將此資訊傳送至伺服器。
範例值:
  • 「iexplore.exe」
  • 「myplayer.exe」
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。

網路來源功能

媒體基礎中的網路功能