Guide de la CAE

Context Aware Encoding (CAE) analyse chaque vidéo source et construit intelligemment une échelle de débit personnalisée (ensemble de rendus) pour chaque élément de contenu. De plus, le codage contextuel prend en compte les contraintes associées au réseau de diffusion et au périphérique utilisé pour afficher le contenu. Il décide du nombre de rendus nécessaires et des résolutions et débits à utiliser pour chacun, tout en maintenant un niveau de qualité constant pour tous les titres. Cela se traduit par des économies massives sur les coûts de stockage et de bande passante, tout en améliorant l'expérience de lecture pour les utilisateurs. Pour plus d'informations, consultez la présentation de l'encodage contextuel.

Aperçu

Processus

CAE est activé sur une tâche Zencoder en définissant generate_dynamic_profile à vrai et en ajoutant 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 Baseline lecture du profil H.264, utilisez le 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"
          }
        ]
      }
    ]
   }