Peak-Constrained Değişken Bit Hızı Kodlaması

Tepe kısıtlamalı değişken bit hızında (VBR), içerik belirtilen bir bit hızına ve tepe değerlerine kodlanır: bir tepe bit hızı ve bir tepe arabellek penceresi. Bu tepe değerleri, en yüksek sızdıran demet değerleriolarak da adlandırılır. Dosya, akışın genel ortalama bit hızının belirttiğiniz ortalama bit hızı değerine eşit veya ondan daha az olması için tepe değerleriyle tanımlanan bir arabelleğe uyacak şekilde kodlanır.

Genellikle en yüksek bit hızı oldukça yüksektir. Kodlayıcı, belirtilen ortalama bit hızı değerinin akış süresi boyunca korunmasını sağlar (ortalama bit hızı >= (bit cinsinden toplam akış boyutu / saniye cinsinden akış süresi)). Aşağıdaki örneği göz önünde bulundurun: Saniye başına ortalama bit hızı 16.000 bit, saniyede 48.000 bit en yüksek bit hızı ve 3.000 (3 saniye) yoğun arabellek penceresi olan bir akış yapılandırabilirsiniz. Akış için kullanılan arabelleğin boyutu, en yüksek değerler tarafından belirlenen 144.000 bittir (saniyede 48.000 bit * 3 saniye). Kodlayıcı, verileri bu arabelleğe uyacak şekilde sıkıştırır. Ayrıca, akışın ortalama bit hızı 16.000 veya daha az olmalıdır. Kodlayıcının karmaşık bir içerik bölümünü işlemek için büyük örnekler oluşturması gerekiyorsa, büyük arabellek boyutundan yararlanabilir. Ancak akışın diğer bölümleri, ortalamayı belirtilen düzeye düşürmek için daha düşük bir bit hızında kodlanmalıdır. Tepe noktasına kısıtlanmış VBR kodlaması, sınırlı arabellek kapasitesine ve veri hızı kısıtlamalarına sahip oynatım cihazları için kullanışlıdır. Bunun yaygın bir örneği, kod çözme işlemi dikkate alınması gereken donanım sınırlamaları olan bir cihazdaki bir yonga tarafından gerçekleştirilirken DVD'ler için kullanılan kodlamadır.

Peak-Constrained VBR için Kodlayıcıyı yapılandırma

Tepe kısıtlamalı VBR, akış süresi boyunca ortalama bir bit hızına sınırlandırılmış olması açısından kısıtlanmamış VBR benzer. Buna ek olarak, tepe kısıtlamalı VBR, tepe arabelleğine uygun olarak çalışır. Bu arabellek, en yüksek bit hızı ve en yüksek arabellek penceresi kullanılarak açıklanır. Bu mod iki kodlama geçişi kullanır ve kodlayıcıya, en yüksek sınırlamalara bağlı olarak örnekleri tek tek kodlama konusunda esneklik sağlar.

Kodlayıcı yapılandırması özellik değerleri aracılığıyla ayarlanır. Bu özellikler wmcodecdsp.h içinde tanımlanır. Çıkış medya türü üzerinde anlaşmadan önce yapılandırma özellikleri kodlayıcıda ayarlanmalıdır. Kodlayıcıda özellikleri ayarlama hakkında bilgi için bkz. Kodlayıcıyı yapılandırma. Belirtilen özellik değerlerine bağlı olarak, desteklenen VBR çıkış türlerini listeleyebilir ve ortalama bit hızına göre gerekli olanı kodlayıcıda Media Foundation dönüştürme (MFT) üzerinde seçebilirsiniz.

Bu kodlama türü için aşağıdaki özellikleri ayarlamanız gerekir:

  • MFPKEY_VBRENABLED özelliğini VARIANT_TRUE olarak ayarlayarak VBR kodlama modunu belirtin.
  • Tepe kısıtlamalı VBR modu iki kodlama geçişi kullandığından MFPKEY_PASSESUSED 2 olarak ayarlayın.
  • En yüksek bit hızını belirtmek için MFPKEY_RMAX ayarlayın ve MFPKEY_BMAX en yoğun arabellek penceresini belirtmek üzere ayarlayın.
  • Çıkış medya türünü numaralandırırken, kullanılabilir çıktı medya türlerinin MF_MT_AUDIO_AVG_BYTES_PER_SECOND özniteliğini (ses akışları için) veya MF_MT_AVG_BITRATE özniteliğini (video akışları için) denetleyin ve kodlayıcının kodlanmış içerikte kalmasını istediğiniz ortalama bit hızına en yakın ortalama bit hızına sahip bir çıkış medya türü seçin. Çıktı medya türünü seçme hakkında daha fazla bilgi için, Kodlayıcı üzerinde Medya Türü Müzakeresi'e bakın.

Not

En yüksek bit hızını ortalama bit hızının en az iki katına ayarlamanız önerilir. En yüksek oranın daha düşük bir değere ayarlanması, kodlayıcının içeriği yoğun kısıtlanmış VBR yerine iki geçişli CBR olarak kodlamasına neden olabilir.

 

Kodlayıcı tarafından ayarlanan arabellek penceresi değerini almak için, kodlama oturumundan sonra IWMCodecLeakyBucket::GetBufferSizeBitsçağrısını yapın; bu işlev wmcodecifaces.h ve wmcodecdspuuid.lib dosyalarında tanımlanmıştır. Akışlar için kısıtlanmamış VBR desteği eklemek için, ASF profilini yapılandırırken bu değeri akış yapılandırma nesnesindeki MF_ASFSTREAMCONFIG_LEAKYBUCKET2 özniteliğinde (en yüksek sızıntı demet değerleri) ayarlamanız gerekir.

Aşağıdaki kod örneği, CEncoder örnek sınıfının SetEncodingType yöntemini değiştirerek yoğun kısıtlanmış VBR modunu ayarlar. Bu sınıf hakkında bilgi için bkz. Kodlayıcı Örnek Kodu. Bu örnekte kullanılan yardımcı makrolar hakkında bilgi için bkz. Media Foundation Kod Örneklerini Kullanma.

//////////////////////////////////////////////////////////////////////////
//  Name: SetEncodingType
//  Description: Sets the encoding type to peak-constrained VBR mode.
//
/////////////////////////////////////////////////////////////////////////

HRESULT CEncoder::SetEncodingType(EncodeMode mode)
{
    if (!m_pMFT)
    {
        return MF_E_NOT_INITIALIZED;
    }

    HRESULT hr = S_OK;

    IPropertyStore* pProp = NULL;

    PROPVARIANT var;
    PropVariantInit(&var);

    // Query the encoder for its property store.
    CHECK_HR(hr = m_pMFT->QueryInterface(__uuidof(IPropertyStore), (void**)&pProp));
    
    if (mode == EncodeMode_VBR_Peak)
    {
        // Set the VBR property to TRUE, which indicates VBR encoding.
        var.vt = VT_BOOL;
        var.boolVal = TRUE;
        CHECK_HR(hr = pProp->SetValue(MFPKEY_VBRENABLED, var));
        PropVariantClear(&var);

        // Set number of passes.
        var.vt = VT_I4;
        var.lVal  =2;
        CHECK_HR(hr = pProp->SetValue(MFPKEY_PASSESUSED, var));
        PropVariantClear(&var);

        // Set the peak bit rate.
        var.vt = VT_I4;
        var.lVal  =48000;
        CHECK_HR(hr = pProp->SetValue(MFPKEY_RMAX, var));
        PropVariantClear(&var);

        // Set the peak buffer window.
        var.vt = VT_I4;
        var.lVal  =3000;
        CHECK_HR(hr = pProp->SetValue(MFPKEY_BMAX, var));
        PropVariantClear(&var);
    }

done:
    PropVariantClear(&var);
    SAFE_RELEASE (pProp);
    return hr;
    
}

ASF Kodlama Türleri

Sızdıran Kova Arabellek Modeli

Two-Pass Windows Media Kodlama için Topoloji Oluşturma