Aperçu
Processus
CAE est activé sur une tâche Zencoder en définissant
à vrai et en ajoutant generate_dynamic_profile
dynamic_profile_rendition
valeurs aux sorties du travail. De plus, vous pouvez ajouter dynamic_profile_options
, mais cela n'est pas nécessaire. Après avoir téléchargé et inspecté le fichier source d'entrée pour la tâche, Zencoder exécute le générateur de profil dynamique CAE sur le fichier source. Les paramètres d'échelle de profil dynamique résultants sont ajoutés à chaque sortie correspondante avant d'être encodés. Les paramètres suivants sont automatiquement définis pour les sorties avec une valeur dynamic_profile_rendu :
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
Sorties de codec mixtes : vous pouvez générer des rendus mixtes HEVC/H.264. Voir Paramètres CAE pour plus de détails.
Autres sorties sans dynamic_profile_rendition
commencera l'encodage dès que la source d'entrée est inspectée, simultanément pendant que le générateur de profil dynamique est en cours d'exécution.
Directives de configuration dynamic_profile_options
Nombre de rendus
Le nombre minimum et maximum de rendus à créer est contrôlé avec le min_renditions et max_renditions réglages. Pour de meilleures performances, il est recommandé de laisser un certain écart entre ces limites (par ex. min_renditions
à 2 et max_renditions
à 10), ce qui permet au générateur de profils CAE de sélectionner le numéro le plus adapté à chaque contenu. Pour un contenu facile à encoder, il peut produire moins de rendus, tandis que pour un contenu plus complexe, il peut en produire plus. Il est également recommandé de définir min_renditions pour qu'il soit aussi petit que possible, pour permettre d'économiser de la bande passante lorsque plus de rendus sont inutiles.
Résolutions
Par défaut, CAE utilise une échelle d'environ 30 résolutions standard, allant de 192x108
à 7680x4320
. Il peut être limité sur le bas ou le haut de gamme en utilisant le résolution_min et max_resolution réglages. Alternativement, une liste personnalisée des résolutions et des paramètres de codec associés peut être fournie dans le video_configurations
réglage.
Longueur GOP
Le keyframe_rate
paramètre contrôle la GOP
longueur maximale du contenu codé. Réglez ceci pour qu'il corresponde à segment_seconds
pour le codage HLS / DASH. Sinon, une valeur de 0,5 est recommandée, correspondant à 2 secondes GOP
longueur.
Couverture du débit binaire
Les limites des débits à utiliser peuvent être contrôlées par le min_bitrate
et max_bitrate
réglages. Cela demandera à CAE d'allouer au moins min_bitrate
Kbps pour le premier rendu et contraindre le dernier rendu à au plus max_bitrate
Kbps.
Pour vous assurer que les débits de rendu sont correctement espacés, utilisez le min_granularity
et max_granularity
réglages. Par exemple, ceux-ci peuvent être utilisés pour s'assurer que le pas d'un débit binaire au suivant n'est pas inférieur à une augmentation de 50% du débit binaire ou supérieur à une augmentation de 100% du débit binaire. Veuillez noter que la plupart des directives de création de flux recommandent que la granularité ne dépasse pas 100%.
Latence de démarrage, fiabilité dans de mauvaises conditions de réseau
Pour vous assurer que l'échelle de débit commence toujours avec un débit suffisamment bas, utilisez le max_first_rendition_bitrate
réglage. Plus le débit binaire du premier rendu est bas, moins il est probable qu'un lecteur vidéo ait besoin de mettre en mémoire tampon en raison des faibles vitesses de connexion. De plus, si le manifeste de diffusion en continu indique de charger en premier le débit binaire le plus bas, cela affectera également directement la latence de démarrage.
Prise en charge des appareils hérités
Pour prendre en charge des appareils plus anciens qui ne peuvent
lecture du profil H.264, utilisez le Baseline
select_baseline_profile_configuration
réglage. Lorsque ce paramètre est défini, au moins un rendu sera encodé avec Baseline
profil. Des contraintes supplémentaires (profil de codec, niveau, nombre de trames de référence, b-frames, etc.) peuvent être contrôlées avec un video_configurations
réglage.
Notez que select_baseline_profile_configuration
c'est true
par défaut, et il nécessite au moins un format associé pour avoir une résolution égale ou inférieure à 512x288.
Contrôle de variabilité VBR
Les débits binaires maximaux peuvent être contrôlés avec bitrate_cap_to_bitrate_ratio
et bitrate_cap_offset réglages. Si un débit «R
» est sélectionné pour un rendu, le décoder_bitrate_cap est calculé comme suit :
decoder_bitrate_cap = R * bitrate_cap_to_bitrate_ratio + bitrate_cap_offset
De même, les limites du tampon du décodeur peuvent être contrôlées avec le buffer_size_to_bitrate_ratio
et buffer_size_offset
réglages. La valeur decoder_buffer_size
est calculée comme suit :
decoder_buffer_size = R * buffer_size_to_bitrate_ratio + buffer_size_offset
Notez que le débit binaire maximal et les limites de tampon peuvent également être limités par le profil de codec et / ou les paramètres de niveau. Certains problèmes généraux de compatibilité des appareils peuvent être évités en limitant bitrate_cap_to_bitrate_ratio
la version 2.0 ou inférieure, et buffer_size_to_bitrate_ratio
à 2.0 * GOP length
(en secondes).
CAE et sorties segmentées
CAE est compatible avec les sorties segmentées dans Zencoder. Sur le Output
paramètres de rendu, définissez les type
comme segmented
et le approprié segment_seconds
valeur. Également, keyframe_rate
et fixed_keyframe_interval
les paramètres doivent être définis dans dynamic_profile_options
.
Exemple CAE - 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"
}
]
}
]
}
Exemple CAE - 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"
}
]
}
]
}