Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En la codificación de velocidad de bits constante (CBR), el codificador conoce la velocidad de bits de los ejemplos de medios de salida y la ventana de búfer (parámetros de cubo filtrada) antes de que comience la sesión de codificación. El codificador usa el mismo número de bits para codificar cada segundo de muestra durante toda la duración del archivo para lograr la velocidad de bits de destino de una secuencia. Esto limita la variación en el tamaño de las muestras de flujo. Además, durante la sesión de codificación, la velocidad de bits no está exactamente en el valor especificado, pero permanece cerca de la velocidad de bits de destino.
La codificación CBR es útil cuando desea conocer la velocidad de bits o la duración aproximada de un archivo sin analizar todo el archivo. Esto es necesario en escenarios de streaming en vivo en los que el contenido multimedia debe transmitirse a una velocidad de bits predecible y con un uso coherente del ancho de banda.
La desventaja de la codificación CBR es que la calidad del contenido codificado no será constante. Dado que algunos contenidos son más difíciles de comprimir, las partes de una secuencia CBR serán de menor calidad que otras. Por ejemplo, una película típica tiene algunas escenas que son bastante estáticas y algunas escenas que están llenas de acción. Si codifica una película con CBR, las escenas estáticas y, por lo tanto, fáciles de codificar de forma eficaz, serán de mayor calidad que las escenas de acción, que habrían requerido tamaños de muestra más altos para mantener la misma calidad.
En general, las variaciones en la calidad de un archivo CBR son más pronunciadas a velocidades de bits más bajas. A velocidades de bits más altas, la calidad de un archivo codificado en CBR seguirá variando, pero los problemas de calidad serán menos perceptibles para el usuario. Al usar la codificación CBR, debe establecer el ancho de banda tan alto como permita el escenario de entrega.
- opciones de configuración de CBR
- de configuración de cubos filtraciones
Opciones de configuración de CBR
Debe configurar un codificador especificando el tipo de codificación y las distintas opciones de configuración específicas de la secuencia antes de la sesión de codificación.
Para configurar el codificador para la codificación CBR
Especifique el modo de codificación CBR.
De forma predeterminada, el codificador está configurado para usar la codificación CBR. La configuración del codificador se establece mediante valores de propiedad. Estas propiedades se definen en wmcodecdsp.h. Puede especificar explícitamente este modo estableciendo la propiedad MFPKEY_VBRENABLED en VARIANT_FALSE. Para obtener información sobre cómo establecer propiedades en codificadores, consulte Configuración del codificador.
Elija la velocidad de bits de codificación.
Para la codificación CBR, debe conocer la velocidad de bits a la que desea codificar la secuencia antes de que comience la sesión de codificación. Debe establecer la velocidad de bits durante la configuración del codificador. Para ello, mientras realiza la negociación de tipos multimedia, compruebe el atributo MF_MT_AUDIO_AVG_BYTES_PER_SECOND (para secuencias de audio) o el atributo MF_MT_AVG_BITRATE (para secuencias de vídeo) de los tipos de medios de salida disponibles y elija un tipo de medio de salida que tenga la velocidad de bits promedio más cercana a la velocidad de bits de destino que desea lograr. Para obtener más información, consulte negociación de tipos de medios en el codificador.
En el ejemplo de código siguiente se muestra la implementación de SetEncodingProperties. Esta función establece las propiedades de codificación de nivel de secuencia para CBR y 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;
}
Configuración del cubo filtrado
En el caso de la codificación CBR, el promedio y el máximo de valores de cubo de pérdida para la secuencia son los mismos. Para obtener más información sobre estos parámetros, vea The Leaky Bucket Buffer Model.
Para codificar secuencias de audio CBR, debe establecer los valores del cubo filtrado después de negociar el tipo de medio de salida en el codificador. El codificador calcula la ventana de búfer internamente en función de la velocidad de bits promedio establecida en el tipo de medio de salida.
Para establecer los valores de cubo filtrados, cree una matriz de DWORDs puede establecer los valores siguientes en la propiedad MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET del almacén de propiedades del receptor de medios. Para obtener más información, vea propiedades de configuración en el receptor de archivos.
- Velocidad de bits media: obtenga la velocidad media de bits del tipo de medio de salida seleccionado durante la negociación de tipos multimedia. Use el atributo MF_MT_AUDIO_AVG_BYTES_PER_SECOND.
- Ventana de búfer: consulte el codificador para la interfazdeIWMCodecLeakyBucket y, a continuación, llame a IWMCodecLeakyBucket::GetBufferSizeBits (wmcodecifaces.h, wmcodecdspuuid.lib).
- Tamaño inicial del búfer: establezca en 0.
Temas relacionados
-
Tutorial de : Codificación de Windows Media de 1 paso
-
Tutorial de : Escritura de un archivo WMA mediante la codificación CBR