Multiplexer Nesnesi Oluşturma

ASF çoğullayıcı, ASF Veri Nesnesi ile çalışan ve bir uygulamaya medya akışları için ASF veri paketleri oluşturma olanağı tanıyan bir WMContainer katmanı nesnesidir.

Çoğullayıcı nesnesi, IMFASFMultiplexer arabirimini kullanıma sunar. Çoğullayıcıyı oluşturmak için MFCreateASFMultiplexerçağırın. Bu işlev boş bir nesnenin işaretçisini döndürür. Uygulama yeni bir ASF dosyası yazıyorsa, uygulamanın contentInfo nesnesiyle çoklayıcıyı başlatması gerekir. Bunu yapmak için IMFASFMultiplexer::Initializeçağrısı yapın. Belirtilen ContentInfo nesnesi, yeni dosyanın ASF Üst Bilgi Nesnesi'ni temsil eder. Yeni bir dosya için ContentInfo nesnesini oluşturma ve başlatma hakkında bilgi için bkz. Yeni ASF Dosyasının ContentInfo Nesnesini Başlatma.

Initialize yöntemi, akış sayısı, paket boyutu, ön kayıt gibi akış yapılandırma bilgilerini toplamak için ContentInfo nesnesini ayrıştırır. İsteğe bağlı olarak, çoğullayıcının sızdıran demet parametrelerine ve yük genişletme birimlerine de ihtiyacı olabilir. ASF Üst Bilgi Nesnesi'nde tanımlanan gereksinimlerle eşleşen veri paketleri oluşturmak için bu bilgiler gereklidir. Initialize yöntemi, akışların medya türüne ve yapılandırma ayarlarına göre çoklayıcıyı yapılandırmaktadır. Örneğin, bir akış, yük uzantılarına sahip olacak şekilde yapılandırıldıysa (bkz. ASF Akışlarını Oluşturma ve Yapılandırma) ve ardından çoklayıcı, bu değerleri oluşturulmuş veri paketlerine ekleyecek şekilde yapılandırılır.

Initialize yöntemi, yazma amacıyla ContentInfo nesnesi oluşturulurken meydana getirilen ilk veri nesnesinin tanıtıcısını da alır. Veri paketi oluşturma sırasında, çoğullayıcı veri nesnesine paket ekler ve uygun şekilde güncelleştirir. Çoğullayıcı tüm veri paketlerini oluşturduktan sonra sağlanan ContentInfo nesnesini güncelleştirerek veri paketi sayısı gibi belirli değerlerin güncelleştirilmesi sağlanır.

Aşağıdaki kod örneğinde bir çoklayıcı oluşturma ve ContentInfo nesnesiyle başlatma işlemi gösterilmektedir.

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

Bu işlevin tam bir uygulamada kullanıldığını görmek için bkz. Eğitici: ASF Akışlarını Bir Dosyadan Başka Bir Dosyaya Kopyalama.

Multiplexer Başlatma ve Sızdıran Demet Ayarları

IMFASFMultiplexer::Initialize yöntemi, sızdıran demet veri akışını belirlemek üzere çoklayıcıyı yapılandırır. Bu parametreleri yapılandırmak için, belirtilen ContentInfo nesnesinde aşağıdaki özellik değerlerinin ayarlandığından emin olun. Bu özellikleri ayarlama hakkında bilgi için bkz. ContentInfo Nesnesinde Özellikleri Ayarlama.

  • MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE özelliği: Bu, sızdıran demetteki veri akışını korumak için çoğullayıcının bit hızını otomatik olarak ayarlaması gerekip gerekmediğini gösterir. Bu ayar uygulama tarafından IMFASFMultiplexer::SetFlags çağrılarak ve MFASF_MULTIPLEXER_AUTOADJUST_BITRATE bayrağı geçirilerek değiştirilebilir.

  • MFPKEY_ASFMEDIASINK_BASE_SENDTIME özelliği: Gönderme süresi, sızıntı kovanı içindeki yükün ne zaman serbest bırakılacağını gösterir. Yüklemenin sunu saatinden önce hedefe ulaşmak için zamanı olması gerektiğinden, gönderme süreleri sunu zamanına eşit veya daha erken olmalıdır.

    Bu ilk gönderme zamanının özellik değeridir. Çoğullayıcı, verilerin demetten düzenli bir şekilde akmasını sağlamak için sonraki gönderme sürelerini hesaplamak için bu değeri kullanır. MFASF_MULTIPLEXER_AUTOADJUST_BITRATE bayrağı çoğullayıcıda ayarlanmışsa, çoğullayıcı, arabelleğe alma penceresi dolmaya yaklaştığında yük gönderilirken bit hızını ayarlar. Bayrak ayarlanmazsa, bant genişliği taşması nedeniyle çoğullayıcı veri paketleri oluşturamaz.

Çoğullayıcı, Initialize yönteminde belirtilen ContentInfo nesnesiyle ilişkili ASF profilinden akış yapılandırma bilgilerini alır. Akış yapılandırma bilgileri, sızdıran demet parametrelerini içerir. Bu değer, veri paketleri oluşturmak için çoğullayıcı tarafından gereklidir.

Sızdıran kova parametrelerini belirtmek için, profildeki akışı temsil eden akış yapılandırma nesnesindeki MF_ASFSTREAMCONFIG_LEAKYBUCKET1 özniteliğindeki değerleri ayarlayın. Kodlayıcı tarafından kullanılan arabellek penceresi değerini kullanmak için IWMCodecLeakyBucket::GetBufferSizeBitsçağrısı yapın. Gerçek arabellek penceresi değeri, ancak kodlayıcının çıkış medya türü ayarlandığında bilinir. Çıkış medya türünü ayarlama hakkında bilgi için bkz. Medya Türü Anlaşması.

Not

Kodlayıcı tarafından kullanılan sızdıran demet değerleri, çoklayıcıyı oluşturmak için kullanılan ASF Profili tarafından sağlanan ContentInfo nesnesinde farklı olabilir.

 

Initialize yöntemi, doğru değerlerin son ASF Üst Bilgi Nesnesine yansıtılmış olması için ContentInfo nesnesini güncelleştirir.

ASF Multiplexer

Yeni ASF Veri Paketleri oluşturma