Bagikan melalui


Membuat Objek Multiplexer

Multiplexer ASF adalah objek lapisan WMContainer yang bekerja dengan Objek Data ASF dan memberi aplikasi kemampuan untuk menghasilkan paket data ASF untuk aliran media.

Objek multiplexer mengekspos antarmuka IMFASFMultiplexer . Untuk membuat multiplexer, panggil MFCreateASFMultiplexer. Fungsi ini mengembalikan penunjuk ke objek kosong. Jika aplikasi menulis file ASF baru, aplikasi harus menginisialisasi multiplexer dengan objek ContentInfo. Untuk melakukan ini, panggil IMFASFMultiplexer::Initialize. Objek ContentInfo yang ditentukan mewakili Objek Header ASF dari file baru. Untuk informasi tentang membuat dan menginisialisasi objek ContentInfo untuk file baru, lihat Menginisialisasi Objek ContentInfo dari File ASF Baru.

Metode Inisialisasi mengurai objek ContentInfo untuk mengumpulkan informasi konfigurasi aliran seperti jumlah aliran, ukuran paket, pra-pendaftaran. Secara opsional, multiplexer mungkin juga memerlukan parameter wadah bocor, dan unit ekstensi payload. Informasi ini diperlukan untuk menghasilkan paket data yang cocok dengan persyaratan yang ditentukan dalam Objek Header ASF. Metode Inisialisasi mengonfigurasi multiplexer berdasarkan jenis media dan pengaturan konfigurasi aliran. Misalnya, jika aliran dikonfigurasi untuk memiliki ekstensi payload (lihat Membuat dan Mengonfigurasi Aliran ASF), lalu multiplexer dikonfigurasi untuk menambahkan nilai tersebut ke paket data yang dihasilkan.

Metode Inisialisasi juga mendapatkan handel ke objek data awal yang dibuat selama pembuatan objek ContentInfo untuk penulisan. Selama pembuatan paket data, multiplexer menambahkan paket ke objek data dan memperbaruinya dengan tepat. Setelah multiplexer menghasilkan semua paket data, ia memperbarui objek ContentInfo yang disediakan sehingga nilai tertentu, seperti jumlah paket data, diperbarui.

Contoh kode berikut menunjukkan cara membuat multiplexer dan menginisialisasinya dengan objek ContentInfo.

//-------------------------------------------------------------------
// CreateOutputGenerators
//
// Creates the ASF mux and the ASF Content Info object for the 
// output file.
//-------------------------------------------------------------------

HRESULT CreateOutputGenerators(
    IMFASFProfile *pProfile, 
    IMFASFContentInfo **ppContentInfo, 
    IMFASFMultiplexer **ppMux
    )
{
    IMFASFContentInfo *pContentInfo = NULL;
    IMFASFMultiplexer *pMux = NULL;

    // Use the ASF profile to create the ContentInfo object.
    HRESULT hr = MFCreateASFContentInfo(&pContentInfo);

    if (SUCCEEDED(hr))
    {
        hr = pContentInfo->SetProfile(pProfile);
    }

    // Create the ASF Multiplexer object.
    if (SUCCEEDED(hr))
    {
        hr = MFCreateASFMultiplexer(&pMux);
    }
    
    // Initialize it using the new ContentInfo object.
    if (SUCCEEDED(hr))
    {
        hr = pMux->Initialize(pContentInfo);
    }

    // Return the pointers to the caller.
    if (SUCCEEDED(hr))
    {
        *ppContentInfo = pContentInfo;
        (*ppContentInfo)->AddRef();

        *ppMux = pMux;
        (*ppMux)->AddRef();
    }

    SafeRelease(&pContentInfo);
    SafeRelease(&pMux);

    return hr;
}

Untuk melihat fungsi ini yang digunakan dalam aplikasi lengkap, lihat Tutorial: Menyalin Aliran ASF dari Satu File ke File Lainnya.

Inisialisasi Multiplexer dan Pengaturan Wadah Bocor

Metode IMFASFMultiplexer::Initialize mengonfigurasi multiplexer untuk menentukan aliran data wadah bocor. Untuk mengonfigurasi parameter ini, pastikan bahwa nilai properti berikut diatur pada objek ContentInfo yang ditentukan. Untuk informasi tentang pengaturan properti ini, lihat Mengatur Properti di Objek ContentInfo.

  • properti MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE : Ini menunjukkan apakah multiplexer perlu menyesuaikan laju bit secara otomatis, untuk mempertahankan aliran data dalam wadah yang bocor. Pengaturan ini dapat diubah oleh aplikasi dengan memanggil IMFASFMultiplexer::SetFlags dan meneruskan bendera MFASF_MULTIPLEXER_AUTOADJUST_BITRATE .

  • properti MFPKEY_ASFMEDIASINK_BASE_SENDTIME : Waktu pengiriman menunjukkan kapan payload di dalam wadah bocor akan dirilis. Waktu pengiriman harus sama dengan atau lebih lama dari waktu presentasi karena payload harus memiliki waktu untuk sampai ke tujuan sebelum waktu presentasi.

    Nilai properti ini adalah waktu pengiriman pertama. Multiplexer menggunakan nilai ini untuk menghitung waktu pengiriman berikutnya untuk memastikan bahwa data mengalir melalui wadah dengan stabil. Jika bendera MFASF_MULTIPLEXER_AUTOADJUST_BITRATE telah diatur pada multiplexer, multiplexer akan menyesuaikan laju bit sehingga payload dikirim ketika jendela buffer hampir penuh. Jika bendera tidak diatur, multiplexer gagal menghasilkan paket data karena bandwidth dikurangi.

Multiplexer mendapatkan informasi konfigurasi aliran dari profil ASF yang terkait dengan objek ContentInfo yang ditentukan dalam metode Inisialisasi . Informasi konfigurasi aliran mencakup parameter wadah yang bocor. Nilai ini diperlukan oleh multiplexer untuk menghasilkan paket data.

Untuk menentukan parameter wadah bocor, atur nilai dalam atribut MF_ASFSTREAMCONFIG_LEAKYBUCKET1 pada objek konfigurasi aliran yang mewakili aliran di profil. Untuk menggunakan nilai jendela buffer, yang digunakan oleh encoder, panggil IWMCodecLeakyBucket::GetBufferSizeBits. Nilai jendela buffer aktual hanya diketahui setelah mengatur jenis media output encoder. Untuk informasi tentang mengatur jenis media output, lihat Negosiasi Jenis Media pada Encoder.

Catatan

Nilai wadah bocor yang digunakan oleh encoder mungkin berbeda di objek ContentInfo yang disediakan oleh Profil ASF yang digunakan untuk membuat multiplexer.

 

Metode Inisialisasi memperbarui objek ContentInfo sehingga nilai yang benar tercermin dalam Objek Header ASF akhir.

ASF Multiplexer

Menghasilkan Paket Data ASF Baru