Guía CAE

La codificación contextual (CAE) analiza cada video de origen y crea de manera inteligente una escalera de tasa de bits personalizada (conjunto de representaciones) para cada contenido. Además, la codificación sensible al contexto tiene en cuenta las limitaciones asociadas con la red de distribución y el dispositivo que se utiliza para ver el contenido. Decide cuántas versiones se necesitan y qué resoluciones y tasas de bits utilizar para cada una, sin dejar de mantener un nivel constante de calidad en todos los títulos. Esto se traduce en ahorros masivos en costos de almacenamiento y ancho de banda, al tiempo que mejora la experiencia de reproducción para los usuarios. Para obtener información adicional, consulte la Descripción general de la codificación contextual.

Resumen

Proceso

CAE se habilita en un trabajo de Zencoder configurando generate_dynamic_profile a verdadero y sumando 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 Baseline perfil de reproducción H.264, utilice el 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"
          }
        ]
      }
    ]
   }