Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kodlayıcının kodlanmış medyanın belirli bir bit hızını değişken bit hızı (VBR) modunda korumaya çalıştığı Sabit Bit Hızı Kodlama (CBR) aksine kodlayıcı, kodlanmış medyanın mümkün olan en iyi kalitesini elde etmeye çalışır. CBR ile VBR arasındaki birincil fark, kullanılan arabellek penceresinin boyutudur. VBR kodlu akışlar genellikle CBR ile kodlanmış akışlara kıyasla büyük arabellek pencerelerine sahiptir.
Kodlanmış içeriğin kalitesi, içerik sıkıştırıldığında kaybedilen veri miktarına göre belirlenir. Sıkıştırma işleminde veri kaybını etkileyen birçok faktör; ancak genel olarak, özgün veriler ne kadar karmaşık olursa ve sıkıştırma oranı ne kadar yüksek olursa, sıkıştırma işleminde o kadar fazla ayrıntı kaybolur.
Kalite tabanlı VBR modunda, kodlayıcının izlemesi gereken bir bit hızı veya arabellek penceresi tanımlamazsınız. Bunun yerine, bit hızı yerine dijital medya akışı için bir kalite düzeyi belirtirsiniz. Kodlayıcı, tüm örneklerin benzer kalitede olması için içeriği sıkıştırır; bu, sonuçta elde edilen akışın arabellek gereksinimlerine bakılmaksızın kayıttan yürütme süresi boyunca kalitenin tutarlı olmasını sağlar.
Kalite tabanlı VBR kodlaması büyük sıkıştırılmış akışlar oluşturma eğilimindedir. Genel olarak, bu kodlama türü yerel kayıttan yürütme veya yüksek bant genişliğine sahip ağ bağlantıları (veya indirme ve yürütme) için uygundur. Örneğin, CD'den bir bilgisayardaki ASF dosyalarına şarkı kopyalamak için bir uygulama yazabilirsiniz. Kalite tabanlı VBR kodlaması kullanmak, kopyalanan tüm şarkıların aynı kalitede olmasını sağlar. Bu gibi durumlarda tutarlı kalite daha iyi bir kullanıcı deneyimi sağlar.
Kalite tabanlı VBR kodlamasının dezavantajı, kodlayıcı tek bir kodlama geçişi kullandığından kodlama oturumundan önce kodlanmış medyanın boyut veya bant genişliği gereksinimlerini bilmenin gerçekten bir yolu olmamasıdır. Bu, taşınabilir medya oynatıcılarda içerik oynatma veya düşük bant genişliğine sahip bir ağ üzerinden akış yapma gibi bellek veya bant genişliğinin kısıtlandığı durumlarda kalite tabanlı VBR ile kodlanmış dosyaların uygunsuz olmasına neden olabilir.
Quality-Based VBR Kodlaması için Kodlayıcıyı Yapılandırma
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.
Aşağıdaki liste, bu tür kodlama için ayarlamanız gereken özellikleri gösterir:
- MFPKEY_VBRENABLED özelliğini VARIANT_TRUE olarak ayarlayarak VBR kodlama modunu belirtin.
- Bu VBR modu bir kodlama geçişi kullandığından MFPKEY_PASSESUSED 1 olarak ayarlayın.
- MFPKEY_DESIRED_VBRQUALITY özelliğini ayarlayarak istenen kalite düzeyini (0 ile 100) ayarlayın. Kalite tabanlı VBR, içeriği önceden tanımlanmış arabellek parametrelerine kodlamaz. Bit hızı gereksinimlerinin sonucundan bağımsız olarak, tüm akış için bu kalite düzeyi korunacaktır.
- Video akışları için, kodlayıcının çıkış medya türündeki MF_MT_AVG_BITRATE özniteliğinde ortalama bit hızını sıfır olmayan bir değere ayarlayın. Kodlama oturumu tamamlandıktan sonra doğru bit hızı güncelleştirilir.
Aşağıdaki kod örneği SetEncodingProperties uygulamasını gösterir. Bu işlev CBR ve VBR için akış düzeyi kodlama özelliklerini ayarlar.
//-------------------------------------------------------------------
// SetEncodingProperties
// Create a media source from a URL.
//
// guidMT: Major type of the stream, audio or video
// pProps: A pointer to the property store in which
// to set the required encoding properties.
//-------------------------------------------------------------------
HRESULT SetEncodingProperties (const GUID guidMT, IPropertyStore* pProps)
{
if (!pProps)
{
return E_INVALIDARG;
}
if (EncodingMode == NONE)
{
return MF_E_NOT_INITIALIZED;
}
HRESULT hr = S_OK;
PROPVARIANT var;
switch (EncodingMode)
{
case CBR:
// Set VBR to false.
hr = InitPropVariantFromBoolean(FALSE, &var);
if (FAILED(hr))
{
goto done;
}
hr = pProps->SetValue(MFPKEY_VBRENABLED, var);
if (FAILED(hr))
{
goto done;
}
// Set the video buffer window.
if (guidMT == MFMediaType_Video)
{
hr = InitPropVariantFromInt32(VIDEO_WINDOW_MSEC, &var);
if (FAILED(hr))
{
goto done;
}
hr = pProps->SetValue(MFPKEY_VIDEOWINDOW, var);
if (FAILED(hr))
{
goto done;
}
}
break;
case VBR:
//Set VBR to true.
hr = InitPropVariantFromBoolean(TRUE, &var);
if (FAILED(hr))
{
goto done;
}
hr = pProps->SetValue(MFPKEY_VBRENABLED, var);
if (FAILED(hr))
{
goto done;
}
// Number of encoding passes is 1.
hr = InitPropVariantFromInt32(1, &var);
if (FAILED(hr))
{
goto done;
}
hr = pProps->SetValue(MFPKEY_PASSESUSED, var);
if (FAILED(hr))
{
goto done;
}
// Set the quality level.
if (guidMT == MFMediaType_Audio)
{
hr = InitPropVariantFromUInt32(98, &var);
if (FAILED(hr))
{
goto done;
}
hr = pProps->SetValue(MFPKEY_DESIRED_VBRQUALITY, var);
if (FAILED(hr))
{
goto done;
}
}
else if (guidMT == MFMediaType_Video)
{
hr = InitPropVariantFromUInt32(95, &var);
if (FAILED(hr))
{
goto done;
}
hr = pProps->SetValue(MFPKEY_VBRQUALITY, var);
if (FAILED(hr))
{
goto done;
}
}
break;
default:
hr = E_UNEXPECTED;
break;
}
done:
PropVariantClear(&var);
return hr;
}
İlgili konular