Resumen
Proceso
CAE se habilita en un trabajo de Zencoder configurando
a verdadero y sumando generate_dynamic_profile
dynamic_profile_rendition
valores a las salidas del trabajo. Además, puede agregar dynamic_profile_options
, pero esto no es necesario. Después de descargar e inspeccionar el archivo de origen de entrada para el trabajo, Zencoder ejecuta el generador de perfiles dinámicos CAE en el archivo de origen. Las configuraciones de escalera de perfil dinámico resultantes se agregan a cada Salida correspondiente antes de que se codifiquen. La siguiente configuración se establece automáticamente para las salidas con un valor de tendencia_perfil_dinámico:
width
height
frame_rate
video_codec
video_codec_profile
video_codec_tier
video_codec_level
video_reference_frames
video_bframes
video_bitrate
decoder_bitrate_cap
decoder_buffer_size
keyframe_rate
fixed_keyframe_interval
Salidas de códec mixtas: puede generar copias mixtas HEVC/H.264. Ver Configuración CAE para detalles.
Otras salidas sin dynamic_profile_rendition
comenzará a codificarse tan pronto como se inspeccione la fuente de entrada, al mismo tiempo que se ejecuta el generador de perfiles dinámicos.
Directrices para la configuración dynamic_profile_options
Número de copias
El número mínimo y máximo de representaciones para crear se controla con el min_renditions y max_renditions ajustes. Para un mejor rendimiento, se recomienda dejar un cierto espacio entre estos límites (p. Ej., Establecer min_renditions
a 2 y max_renditions
a 10), lo que permite al generador de perfiles CAE seleccionar el número más adecuado para cada contenido. Para un contenido fácil de codificar, puede producir menos representaciones, mientras que para contenido más complejo puede producir más. También se recomienda configurar min_renditions para que sea lo más pequeño posible, para permitir ahorrar ancho de banda cuando no sean necesarias más representaciones.
Resoluciones
De forma predeterminada, CAE utiliza una escalera de aproximadamente 30 resoluciones estándar, que van desde 192x108
a 7680x4320
. Puede limitarse tanto en el extremo bajo como en el alto utilizando el min_resolution y max_resolution ajustes. Alternativamente, se puede proporcionar una lista personalizada de resoluciones y configuraciones de códec asociadas en el video_configurations
configuración.
Longitud de GOP
La keyframe_rate
el ajuste controla el máximo GOP
longitud del contenido codificado. Configure esto para que se corresponda con segment_seconds
para codificación HLS / DASH. De lo contrario, se recomienda un valor de 0,5, que corresponde a un intervalo de 2 segundos. GOP
largo.
Cobertura de tasa de bits
Los límites de las tasas de bits que se utilizarán pueden ser controlados por el min_bitrate
y max_bitrate
ajustes. Esto le indicará al CAE que asigne al menos min_bitrate
Kbps para la primera interpretación y restringir la última interpretación a un máximo max_bitrate
Kbps.
Para asegurarse de que las tasas de bits de la reproducción estén espaciadas correctamente, utilice el min_granularity
y max_granularity
ajustes. Por ejemplo, estos se pueden utilizar para asegurarse de que el paso de una tasa de bits a la siguiente no sea menos del 50% de aumento en la tasa de bits o más del 100% de aumento en la tasa de bits. Tenga en cuenta que la mayoría de las pautas de creación de transmisiones recomiendan que la granularidad no supere el 100%.
Latencia de inicio, confiabilidad en malas condiciones de red
Para asegurarse de que la escalera de tasa de bits siempre comience con una tasa de bits lo suficientemente baja, utilice el max_first_rendition_bitrate
configuración. Cuanto menor sea la tasa de bits de la primera reproducción, es menos probable que un reproductor de video necesite almacenar en búfer debido a las bajas velocidades de conexión. Además, si el manifiesto de transmisión indica cargar primero la tasa de bits más baja, esto también afectará directamente la latencia de inicio.
Soporte para dispositivos heredados
Para admitir dispositivos más antiguos que solo son capaces de
perfil de reproducción H.264, utilice el Baseline
select_baseline_profile_configuration
configuración. Cuando se establece, al menos una reproducción se codificará con Baseline
perfil. Las restricciones adicionales (perfil de códec, nivel, número de fotogramas de referencia, fotogramas b, etc.) se pueden controlar con un video_configurations
configuración.
Tenga en cuenta que select_baseline_profile_configuration
es true
por defecto, y requiere al menos una interpretación para tener una resolución igual o inferior a 512x288.
Control de variabilidad VBR
Las tasas de bits máximas máximas se pueden controlar con el bitrate_cap_to_bitrate_ratio
y bitrate_cap_offset ajustes. Si se selecciona una velocidad de bits "R
» para una copia, el decoder_bitrate_cap se calcula de la siguiente manera:
decoder_bitrate_cap = R * bitrate_cap_to_bitrate_ratio + bitrate_cap_offset
Del mismo modo, los límites de la memoria intermedia del decodificador se pueden controlar con el buffer_size_to_bitrate_ratio
y buffer_size_offset
ajustes. La decoder_buffer_size
se calcula como:
decoder_buffer_size = R * buffer_size_to_bitrate_ratio + buffer_size_offset
Tenga en cuenta que los límites máximos de la tasa de bits y del búfer también pueden estar limitados por el perfil del códec y / o la configuración de nivel. Algunos problemas generales de compatibilidad de dispositivos se pueden evitar limitando bitrate_cap_to_bitrate_ratio
a 2.0 o menos, y buffer_size_to_bitrate_ratio
a 2.0 * GOP length
(en segundos).
CAE y salidas segmentadas
CAE es compatible con salidas segmentadas en Zencoder. Sobre el Output
configuración de reproducción, establezca el type
como segmented
y el apropiado segment_seconds
valor. También, keyframe_rate
y fixed_keyframe_interval
la configuración debe establecerse en dynamic_profile_options
.
CAE - ejemplo de HLS
{
"input": "s3://test_bucket/test_media.mp4",
"generate_dynamic_profile": true,
"dynamic_profile_options": {
"max_renditions": 6,
"min_renditions": 2,
"select_baseline_profile_configuration": true,
"keyframe_rate": "0.5",
"fixed_keyframe_interval": "true"
},
"outputs": [
{
"label": "CAE1",
"dynamic_profile_rendition": 1,
"base_url": "s3://test_bucket/outputs/HLS_CAE/CAE1",
"filename": "CAE1.m3u8",
"type": "segmented",
"segment_seconds": 2,
"byte_range_segmenting": true,
"generate_keyframe_manifest": "true",
"hls_protocol_version": 7,
"skip_audio": true
},
{
"label": "CAE2",
"dynamic_profile_rendition": 2,
"base_url": "s3://test_bucket/outputs/HLS_CAE/CAE2",
"filename": "CAE2.m3u8",
"type": "segmented",
"segment_seconds": 2,
"byte_range_segmenting": true,
"generate_keyframe_manifest": "true",
"hls_protocol_version": 7,
"skip_audio": true
},
{
"label": "CAE3",
"dynamic_profile_rendition": 3,
"base_url": "s3://test_bucket/outputs/HLS_CAE/CAE3",
"filename": "CAE3.m3u8",
"type": "segmented",
"segment_seconds": 2,
"byte_range_segmenting": true,
"generate_keyframe_manifest": "true",
"hls_protocol_version": 7,
"skip_audio": true
},
{
"label": "CAE4",
"dynamic_profile_rendition": 4,
"base_url": "s3://test_bucket/outputs/HLS_CAE/CAE4",
"filename": "CAE4.m3u8",
"type": "segmented",
"segment_seconds": 2,
"byte_range_segmenting": true,
"generate_keyframe_manifest": "true",
"hls_protocol_version": 7,
"skip_audio": true
},
{
"label": "CAE5",
"dynamic_profile_rendition": 5,
"base_url": "s3://test_bucket/outputs/HLS_CAE/CAE5",
"filename": "CAE5.m3u8",
"type": "segmented",
"segment_seconds": 2,
"byte_range_segmenting": true,
"generate_keyframe_manifest": "true",
"hls_protocol_version": 7,
"skip_audio": true
},
{
"label": "CAE6",
"dynamic_profile_rendition": 6,
"base_url": "s3://test_bucket/outputs/HLS_CAE/CAE6",
"filename": "CAE6.m3u8",
"type": "segmented",
"segment_seconds": 2,
"byte_range_segmenting": true,
"generate_keyframe_manifest": "true",
"hls_protocol_version": 7,
"skip_audio": true
}
{
"label": "Audio",
"audio_bitrate": "128",
"type": "segmented",
"segment_seconds": 2,
"byte_range_segmenting": true,
"skip_video": true,
"base_url": "s3://test_bucket/outputs/HLS_CAE/Audio/128k/",
"filename": "audio_128k.ac3"
},
{
"base_url": "s3://test_bucket/outputs/HLS_CAE/",
"filename": "master_playlist.m3u8",
"hls_protocol_version": 7,
"type": "playlist",
"allow_skipped_sources": true,
"alternate_audio": {
"128k_audio": {
"path": "Audio/128k/audio_128k.m3u8",
"language": "en",
"source": "Audio"
}
}
],
"streams": [
{
"path": "CAE1/CAE1.m3u8",
"source": "CAE1",
"audio": "128k_audio"
},
{
"path": "CAE2/CAE2.m3u8",
"source": "CAE2",
"audio": "128k_audio"
},
{
"path": "CAE3/CAE3.m3u8",
"source": "CAE3",
"audio": "128k_audio"
},
{
"path": "CAE4/CAE4.m3u8",
"source": "CAE4",
"audio": "128k_audio"
},
{
"path": "CAE5/CAE5.m3u8",
"source": "CAE5",
"audio": "128k_audio"
},
{
"path": "CAE6/CAE6.m3u8",
"source": "CAE6",
"audio": "128k_audio"
}
]
}
]
}
CAE - ejemplo DASH
{
"input": "s3://test_bucket/test.mov",
"generate_dynamic_profile": true,
"dynamic_profile_options": {
"max_renditions": 6,
"min_renditions": 2,
"select_baseline_profile_configuration": true,
"keyframe_rate": "0.5",
"fixed_keyframe_interval": "true"
},
"outputs": [
{
"label": "CAE1",
"dynamic_profile_rendition": 1,
"base_url": "s3://test_bucket/outputs/DASH_CAE/CAE1",
"filename": "CAE1.mpd",
"type": "segmented",
"segment_seconds": 10,
"streaming_delivery_format": "dash",
"skip_audio": true,
"public": true
},
{
"label": "CAE2",
"dynamic_profile_rendition": 2,
"base_url": "s3://test_bucket/outputs/DASH_CAE/CAE2",
"filename": "CAE2.mpd",
"type": "segmented",
"segment_seconds": 10,
"streaming_delivery_format": "dash",
"skip_audio": true,
"public": true
},
{
"label": "CAE3",
"dynamic_profile_rendition": 3,
"base_url": "s3://test_bucket/outputs/DASH_CAE/CAE3",
"filename": "CAE3.mpd",
"type": "segmented",
"segment_seconds": 10,
"streaming_delivery_format": "dash",
"skip_audio": true,
"public": true
},
{
"label": "CAE4",
"dynamic_profile_rendition": 4,
"base_url": "s3://test_bucket/outputs/DASH_CAE/CAE4",
"filename": "CAE4.mpd",
"type": "segmented",
"segment_seconds": 10,
"streaming_delivery_format": "dash",
"skip_audio": true,
"public": true
},
{
"label": "CAE5",
"dynamic_profile_rendition": 5,
"base_url": "s3://test_bucket/outputs/DASH_CAE/CAE5",
"filename": "CAE5.mpd",
"type": "segmented",
"segment_seconds": 10,
"streaming_delivery_format": "dash",
"skip_audio": true,
"public": true
},
{
"label": "CAE6",
"dynamic_profile_rendition": 6,
"base_url": "s3://test_bucket/outputs/DASH_CAE/CAE6",
"filename": "CAE6.mpd",
"type": "segmented",
"segment_seconds": 10,
"streaming_delivery_format": "dash",
"skip_audio": true,
"public": true
},
{
"label": "Audio",
"audio_bitrate": "128",
"type": "segmented",
"segment_seconds": 10,
"streaming_delivery_format": "dash",
"skip_video": true,
"base_url": "s3://test_bucket/outputs/DASH_CAE/Audio/128k/",
"filename": "audio_128k.mpd",
"public": true
},
{
"base_url": "s3://test_bucket/outputs/DASH_CAE/",
"filename": "master_playlist.mpd",
"streaming_delivery_format": "dash",
"type": "playlist",
"allow_skipped_sources": true,
"public": true,
"streams": [
{
"path": "CAE1/CAE1.mpd",
"source": "CAE1"
},
{
"path": "CAE2/CAE2.mpd",
"source": "CAE2"
},
{
"path": "CAE3/CAE3.mpd",
"source": "CAE3"
},
{
"path": "CAE4/CAE4.mpd",
"source": "CAE4"
},
{
"path": "CAE5/CAE5.mpd",
"source": "CAE5"
},
{
"path": "CAE6/CAE6.mpd",
"source": "CAE6"
},
{
"path": "Audio/128k/audio_128k.mpd",
"source": "Audio"
}
]
}
]
}