Кодировка скорости константной скорости
В кодировке константной скорости (CBR) кодировщик знает скорость передачи выходных носителей и окно буфера (параметры утечки контейнера) перед началом сеанса кодирования. Кодировщик использует одинаковое количество битов для кодирования каждой секунды выборки на протяжении всей длительности файла для достижения целевой скорости битов для потока. Это ограничивает изменение размера примеров потока. Кроме того, во время сеанса кодирования скорость битов не точно соответствует указанному значению, но остается близкой к целевой скорости.
Кодировка CBR полезна, если вы хотите знать скорость или приблизительную длительность файла без анализа всего файла. Это необходимо в сценариях потоковой передачи в реальном времени, когда содержимое мультимедиа должно передаваться с прогнозируемой скоростью и согласованным использованием пропускной способности.
Недостатком кодирования CBR является то, что качество закодированного содержимого не будет константой. Так как некоторые содержимое сложнее сжимать, части потока CBR будут иметь более низкое качество, чем другие. Например, типичный фильм имеет некоторые сцены, которые довольно статические и некоторые сцены, полные действия. Если вы кодируете фильм с помощью CBR, то сцены, которые являются статическими и поэтому легко кодировать эффективно, будут иметь более высокое качество, чем сцены действий, которые потребуют более высоких размеров выборки для поддержания того же качества.
Как правило, вариации качества файла CBR более выраженные при более низких скоростях битов. При более высоких скоростях качество файла в кодировке CBR по-прежнему зависит, но проблемы с качеством будут менее заметны для пользователя. При использовании кодировки CBR следует задать пропускную способность как высокую, так как позволяет сценарий доставки.
Параметры конфигурации CBR
Кодировщик необходимо настроить, указав тип кодирования и различные параметры потока перед сеансом кодирования.
Настройка кодировщика для кодировки CBR
Укажите режим кодирования CBR.
По умолчанию кодировщик настроен на использование кодировки CBR. Конфигурация кодировщика устанавливается с помощью значений свойств. Эти свойства определены в wmcodecdsp.h. Этот режим можно явно указать, задав для свойства MFPKEY_VBRENABLED значение VARIANT_FALSE. Сведения о настройке свойств кодировщиков см. в настройке кодировщика.
Выберите скорость кодирования.
Для кодирования CBR необходимо знать скорость передачи, с которой требуется закодировать поток перед началом сеанса кодирования. При настройке кодировщика необходимо задать скорость передачи данных. Для этого при выполнении согласования типов мультимедиа проверьте атрибут MF_MT_AUDIO_AVG_BYTES_PER_SECOND (для аудиопотоков) или атрибут MF_MT_AVG_BITRATE (для видеопотоков) доступных типов выходных носителей и выберите тип выходного носителя с средней скоростью, ближайшей к целевой скорости битовой скорости, которую вы хотите достичь. Дополнительные сведения см. в разделе Согласование типов мультимедиа для кодировщика.
В следующем примере кода показана реализация SetEncodingProperties. Эта функция задает свойства кодирования уровня потока для CBR и VBR.
//-------------------------------------------------------------------
// 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;
}
Параметры утечки контейнеров
Для кодировки CBR среднее и максимальное значение утечки контейнеров для потока совпадают. Дополнительные сведения об этих параметрах см. в модели буфера утечки контейнеров.
Чтобы кодировать аудиопотоки CBR, необходимо задать значения утечки контейнеров после согласования типа выходного носителя в кодировщике. Кодировщик вычисляет окно буфера внутренне на основе средней скорости, заданной в типе выходного носителя.
Чтобы задать утечки значений контейнеров, создайте массив DWORD, можно задать следующие значения в свойстве MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET в хранилище свойств приемника мультимедиа. Дополнительные сведения см. в разделе Настройка свойств вприемника файлов.
- Средняя скорость битов: получение средней скорости из выходного типа носителя, выбранного во время согласования типов мультимедиа. Используйте атрибут MF_MT_AUDIO_AVG_BYTES_PER_SECOND.
- Окно буфера: запрос кодировщика для интерфейса IWMCodecLeakyBucket, а затем вызовите IWMCodecLeakyBucket::GetBufferSizeBits (wmcodecifaces.h, wmcodecdspuuid.lib).
- Начальный размер буфера: задайте значение 0.
Связанные разделы
-
Руководство по : кодировки Windows Media с 1 сквозной передачей
-
Руководство по . Написание WMA-файла с помощью кодировки CBR