Resumen
Proceso
CAE se habilita en un trabajo de Zencoder configurando a verdadero y sumando generate_dynamic_profiledynamic_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:
widthheightframe_ratevideo_codecvideo_codec_profilevideo_codec_tiervideo_codec_levelvideo_reference_framesvideo_bframesvideo_bitratedecoder_bitrate_capdecoder_buffer_sizekeyframe_ratefixed_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 Baselineselect_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"
}
]
}
]
}