Aperçu
Processus
CAE est activé sur une tâche Zencoder en définissant à vrai et en ajoutant generate_dynamic_profiledynamic_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 :
widthheightframe_ratevideo_codecvideo_codec_profilevideo_codec_tiervideo_codec_levelvideo_reference_framesvideo_bframesvideo_bitratedecoder_bitrate_capdecoder_buffer_sizekeyframe_ratefixed_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 Baselineselect_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"
}
]
}
]
}