Pengelogan Klien (Microsoft Media Foundation)

Sumber jaringan mendukung pengelogan klien, yang menyediakan cara bagi server media untuk melacak aktivitas klien yang terhubung ke sana. Log klien memungkinkan server untuk merekam koneksi, penyajian, dan statistik streaming. Log ini dapat digunakan oleh penyedia konten dalam berbagai skenario, seperti, untuk melacak penggunaan server media dan menghasilkan penagihan, atau untuk memberikan konten berkualitas sesuai tergantung pada kecepatan jaringan klien.

File log berisi beberapa entri peristiwa klien. Setiap entri log berisi sejumlah bidang yang dibatasi spasi. Ada dua jenis log klien: penyajian (memutar) dan streaming (menerima). Karena konten dapat diputar dan dialirkan secara bersamaan, klien dapat mengirim kombinasi kedua jenis data log. Dalam kasus tertentu, dua entri log dapat ada untuk sesi yang sama. Misalnya, ketika Fast Cache diaktifkan, klien dapat selesai menerima konten yang dialirkan sebelum selesai merendernya. Dalam hal ini, data log streaming akan dikirim sebelum data log penyajian.

Klien mengirim data log penyajian ke server ketika klien berubah dari status pemutaran apa pun (putar, maju cepat, atau mundur) ke status tidak diputar (berhenti, jeda, akhir streaming, dan awal streaming). Ketika data untuk log penyajian dikirimkan, koneksi dibuat langsung ke server media atau server proksi yang dikonfigurasi.

Jika konten disimpan dalam file cache lokal sementara di komputer yang menjalankan klien, klien dapat membaca file dari cache lokalnya dan mengirimkan data log penyajian untuk menunjukkan bahwa ia telah memutar konten. Dalam hal ini, klien membaca file dari cache lokalnya, entri log penyajian tidak berisi statistik jaringan apa pun, dan protokol diatur ke Cache.

Klien mengirim data log streaming ke server untuk menunjukkan bagaimana klien menerima konten, tetapi tidak seperti yang dirender. Klien dapat mengirim log streaming jauh sebelum klien selesai merender konten.

Topik ini tidak menyediakan informasi tentang semua bidang log. Untuk referensi lengkap, lihat Struktur Data Log Media Windows.

Mengonfigurasi Bidang Log

Media Foundation memungkinkan klien untuk mengonfigurasi sumber jaringan dengan menggunakan properti. Aplikasi harus mengatur properti yang sesuai di penyimpanan properti dan meneruskannya ke salah satu metode pemecah masalah sumber. Pemecah masalah sumber membuat sumber jaringan seperti yang diminta dan membuka koneksi dengan server. Jika koneksi berhasil, klien mengirimkan informasi tentang dirinya sendiri.

Tabel berikut ini menjelaskan bidang log dan properti terkait yang dapat diatur aplikasi melalui pemecah masalah sumber. Informasi ini tidak berubah selama sesi.

Bidang pengelogan Deskripsi
c-playerid Identifikasi unik pemutar. Informasi ini dikirim di awal koneksi. Biasanya, ini adalah GUID klien. Klien dapat mengirim informasi ini ke server di properti MFNETSOURCE_PLAYERID .
Klien mengirimkan informasi ini ke server di awal koneksi.
Nilai sampel: "{c579d042-cecc-11d1-bb31-00a0c9603954}"
c-playerversion Nomor versi pemutar yang dikirim di awal koneksi. Klien dapat mengirim informasi ini ke server di properti MFNETSOURCE_PLAYERVERSION .
Klien mengirimkan informasi ini ke server di awal koneksi.
cs(User-Agent) Tipe browser yang digunakan jika pemutar disematkan di browser. Nilai ini dapat diatur oleh klien di properti MFNETSOURCE_BROWSERUSERAGENT .
Jika pemutar tidak disematkan, bidang ini mengacu pada agen pengguna klien yang menghasilkan log. Dalam hal ini, klien harus mengatur properti MFNETSOURCE_PLAYERUSERAGENT .
Klien mengirimkan informasi ini ke server di awal koneksi.
Nilai sampel: "Mozilla/4.0_(compatible;_MSIE_4.01;_Windows_98)"
cs(Referen) URL halaman web tempat pemutar disematkan (jika disematkan). Klien dapat mengirim informasi ini ke server di properti MFNETSOURCE_BROWSERWEBPAGE .
Klien mengirimkan informasi ini ke server di akhir koneksi.
Nilai sampel: "https://www.example.microsoft.com"
c-hostexe Untuk entri log pemutar, program host (.exe) yang dijalankan. Misalnya, halaman web di browser, applet Microsoft Visual Basic, atau pemutar mandiri. Klien dapat mengirim informasi ini ke server di properti MFNETSOURCE_HOSTEXE .
Klien mengirimkan informasi ini ke server di akhir koneksi.
Nilai sampel:
  • "iexplore.exe"
  • "myplayer.exe"
c-hostexever Nomor versi program host (.exe). Klien dapat mengirim informasi ini ke server di properti MFNETSOURCE_HOSTVERSION .
Klien mengirimkan informasi ini ke server di akhir koneksi.

Contoh kode berikut menunjukkan bagaimana aplikasi klien mengonfigurasi sumber jaringan. Contoh ini mengatur bidang 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;
}

Mengambil Statistik Jaringan

Ketika aplikasi memanggil salah satu metode pemecah masalah sumber, aplikasi membuat sumber jaringan, mengatur properti yang ditentukan di penyimpanan properti, dan membuka sesi dengan server media. Selain informasi yang dapat dikonfigurasi yang dijelaskan di bagian sebelumnya, data tambahan ditransfer antara server dan klien di awal sesi, selama streaming, dan ketika sesi ditutup.

Aplikasi dapat mengambil statistik jaringan dengan menggunakan pengidentifikasi layanan MFNETSOURCE_STATISTICS_SERVICE . Untuk menggunakan layanan ini, aplikasi dapat memanggil fungsi MFGetService untuk mendapatkan penyimpanan properti yang berisi statistik jaringan di properti MFNETSOURCE_STATISTICS . Nilai tertentu dapat diambil dengan menyediakan pengidentifikasi terkait yang ditentukan dalam enumerasi MFNETSOURCE_STATISTICS_IDS .

Contoh kode berikut menunjukkan cara menggunakan layanan untuk mendapatkan jumlah paket yang diterima oleh klien.

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

Daftar berikut ini menjelaskan beberapa pengidentifikasi statistik jaringan yang ditentukan dalam MFNETSOURCE_STATISTICS_IDS.

Pengidentifikasi statistik jaringan Deskripsi
MFNETSOURCE_AVGBANDWIDTHBPS_ID Bandwidth rata-rata (dalam bit per detik) di mana klien terhubung ke server. Nilai dihitung di seluruh durasi koneksi.
MFNETSOURCE_BUFFERINGCOUNT_ID Berapa kali klien di-buffer saat memutar aliran.
MFNETSOURCE_BYTESRECEIVED_ID Jumlah byte yang diterima oleh klien dari server. Nilai tidak menyertakan overhead apa pun yang ditambahkan oleh tumpukan jaringan. Konten yang sama yang dialirkan dengan menggunakan protokol yang berbeda dapat menghasilkan nilai yang berbeda.
MFNETSOURCE_LINKBANDWIDTH_ID Bandwidth maksimum yang tersedia dari klien dalam bit per detik.
MFNETSOURCE_LOSTPACKETS_ID Jumlah paket yang dikirim oleh server tetapi hilang selama transmisi, dan tidak pernah dimainkan oleh klien. Nilai tidak termasuk paket TCP atau UDP.
MFNETSOURCE_RECVPACKETS_ID Jumlah paket yang diterima dari server Nilai tidak termasuk paket TCP atau UDP.
MFNETSOURCE_RECOVEREDBYECCPACKETS_ID Paket hilang dalam jaringan yang diperbaiki dan dipulihkan di lapisan klien. Nilai ini tidak termasuk paket TCP atau UDP.
MFNETSOURCE_RESENDSREQUESTED_ID Jumlah permintaan yang dibuat oleh klien untuk menerima paket baru. Nilai ini tidak termasuk paket TCP atau UDP.
MFNETSOURCE_RECOVEREDPACKETS_ID Jumlah paket yang dipulihkan karena kesal melalui UDP. Nilai ini tidak termasuk paket TCP atau UDP. Bidang ini berisi nol kecuali klien menggunakan resend UDP.
MFNETSOURCE_BUFFERPROGRESS_ID Persentase buffer pemutaran diisi selama buffering.
MFNETSOURCE_PROTOCOL_ID Protokol yang digunakan untuk mengakses aliran. Ini mungkin berbeda dari protokol yang diminta oleh klien.
MFNETSOURCE_TRANSPORT_ID Protokol transportasi yang digunakan untuk mengirimkan aliran. Ini harus UDP atau TCP.

Fitur Sumber Jaringan

Jaringan di Media Foundation