CAE-Leitfaden

Context Aware Encoding (CAE) analysiert jedes Quellvideo und erstellt auf intelligente Weise eine benutzerdefinierte Bitratenleiter (eine Reihe von Wiedergabeversionen) für jeden Inhalt. Darüber hinaus berücksichtigt Context Aware Encoding Einschränkungen im Zusammenhang mit dem Bereitstellungsnetzwerk und dem Gerät, das zum Anzeigen des Inhalts verwendet wird. Es entscheidet, wie viele Wiedergaben benötigt werden und welche Auflösungen und Bitraten für jede verwendet werden, während gleichzeitig ein konsistentes Qualitätsniveau über alle Titel hinweg beibehalten wird. Dies führt zu massiven Einsparungen bei den Speicher- und Bandbreitenkosten und verbessert gleichzeitig das Wiedergabeerlebnis für die Benutzer. Weitere Informationen finden Sie in der Übersicht über kontextbewusste Kodierung.

Überblick

Prozess

CAE wird für einen Zencoder-Job durch Festlegen aktiviert generate_dynamic_profile zu wahr und hinzufügen dynamic_profile_rendition Werte zu den Ausgaben des Jobs. Außerdem können Sie hinzufügen dynamic_profile_options, dies ist jedoch nicht erforderlich. Nach dem Herunterladen und Überprüfen der Eingabequelldatei für den Job führt Zencoder den dynamischen CAE-Profilgenerator für die Quelldatei aus. Die resultierenden Einstellungen für die dynamische Profilleiter werden zu jeder entsprechenden Ausgabe hinzugefügt, bevor sie codiert werden. Die folgenden Einstellungen werden automatisch für Ausgaben mit einem Wert für dynamic_profile_rendition festgelegt:

  • 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

Gemischte Codec-Ausgänge: Sie können gemischte HEVC / H.264-Wiedergaben ausgeben. Sehen CAE-Einstellungen für Details.

Andere Ausgänge ohne a dynamic_profile_rendition beginnt mit der Codierung, sobald die Eingabequelle überprüft wird, während gleichzeitig der dynamische Profilgenerator ausgeführt wird.

Richtlinien für die Konfiguration dynamic_profile_options

Anzahl der Wiedergaben

Die minimale und maximale Anzahl der zu erstellenden Wiedergaben wird mit dem gesteuert min_renditions und max_renditions die Einstellungen. Für eine optimale Leistung wird empfohlen, eine gewisse Lücke zwischen diesen Grenzwerten zu lassen (z. B. festgelegt) min_renditions bis 2 und max_renditions bis 10), wodurch der CAE-Profilgenerator die für jeden Inhalt am besten geeignete Nummer auswählen kann. Für einfach zu codierende Inhalte werden möglicherweise weniger Wiedergaben erzeugt, während für komplexere Inhalte möglicherweise mehr Wiedergaben erzeugt werden. Es wird außerdem empfohlen, min_renditions so klein wie möglich zu setzen, um Bandbreite zu sparen, wenn weitere Wiedergaben nicht erforderlich sind.

Beschlüsse

Standardmäßig verwendet CAE eine Leiter mit etwa 30 Standardauflösungen von 192x108 zu 7680x4320. Es kann entweder am unteren oder am oberen Ende begrenzt werden, indem das verwendet wird min_resolution und maximale Auflösung die Einstellungen. Alternativ kann eine benutzerdefinierte Liste der Auflösungen und zugehörigen Codec-Einstellungen in der bereitgestellt werden video_configurations Rahmen.

GOP-Länge

Das keyframe_rate Einstellung steuert das Maximum GOP Länge des codierten Inhalts. Stellen Sie dies so ein, dass es mit übereinstimmt segment_seconds für HLS / DASH-Codierung. Andernfalls wird ein Wert von 0,5 empfohlen, was einer 2-Sekunden-Zeit entspricht GOP Länge.

Bitrate-Abdeckung

Die Grenzen der zu verwendenden Bitraten können durch die gesteuert werden min_bitrate und max_bitrate die Einstellungen. Dadurch wird CAE angewiesen, mindestens zuzuweisen min_bitrate Kbps für die erste Wiedergabe und beschränken die letzte Wiedergabe auf höchstens max_bitrate Kbps.

Verwenden Sie die Taste, um sicherzustellen, dass die Wiedergaberitraten angemessen verteilt sind min_granularity und max_granularity die Einstellungen. Diese können beispielsweise verwendet werden, um sicherzustellen, dass der Schritt von einer Bitrate zur nächsten nicht weniger als eine 50% ige Erhöhung der Bitrate oder mehr als eine 100% ige Erhöhung der Bitrate beträgt. Bitte beachten Sie, dass die meisten Streaming-Authoring-Richtlinien empfehlen, dass die Granularität 100% nicht überschreitet.

Startlatenz, Zuverlässigkeit bei schlechten Netzwerkbedingungen

Verwenden Sie die Taste, um sicherzustellen, dass die Bitratenleiter immer mit einer ausreichend niedrigen Bitrate beginnt max_first_rendition_bitrate Rahmen. Je niedriger die Bitrate für die erste Wiedergabe eingestellt ist, desto weniger wahrscheinlich muss ein Videoplayer aufgrund niedriger Verbindungsgeschwindigkeiten puffern. Wenn das Streaming-Manifest angibt, dass zuerst die niedrigste Bitrate geladen werden soll, wirkt sich dies auch direkt auf die Startlatenz aus.

Unterstützung für ältere Geräte

Zur Unterstützung älterer Geräte, die nur dazu in der Lage sind Baseline Profil H.264 Wiedergabe, verwenden Sie die select_baseline_profile_configuration Rahmen. Wenn dies eingestellt ist, wird mindestens eine Wiedergabe mit codiert Baseline Profil. Zusätzliche Einschränkungen (Codec-Profil, Ebene, Anzahl der Referenzrahmen, B-Rahmen usw.) können benutzerdefiniert gesteuert werden video_configurations Rahmen.

Beachten Sie, dass select_baseline_profile_configuration ist true standardmäßig, und es erfordert mindestens eine Wiedergabe eine Auflösung von 512 x 288 oder weniger haben.

VBR-Variabilitätskontrolle

Die maximalen Spitzenbitraten können mit dem gesteuert werden bitrate_cap_to_bitrate_ratio und bitrate_cap_offset die Einstellungen. Wenn eine Bitrate „R“ für eine Formatvariante ausgewählt ist, wird der decoder_bitrate_cap wie folgt berechnet:

  decoder_bitrate_cap = R * bitrate_cap_to_bitrate_ratio + bitrate_cap_offset

In ähnlicher Weise können die Decoderpuffergrenzen mit dem gesteuert werden buffer_size_to_bitrate_ratio und buffer_size_offset die Einstellungen. Das decoder_buffer_size wird berechnet als:

  decoder_buffer_size = R * buffer_size_to_bitrate_ratio + buffer_size_offset

Beachten Sie, dass die Grenzwerte für Spitzenbitrate und Puffer möglicherweise auch durch das Codec-Profil und / oder die Pegeleinstellungen eingeschränkt werden. Einige allgemeine Probleme mit der Gerätekompatibilität können vermieden werden, indem Sie bitrate_cap_to_bitrate_ratio auf 2.0 oder darunter beschränken, und buffer_size_to_bitrate_ratio bis 2.0 * GOP length(in Sekunden).

CAE und segmentierte Ausgänge

CAE ist mit segmentierten Ausgängen in Zencoder kompatibel. Auf der Output Wiedergabeeinstellungen, stellen Sie die type wie segmented und die entsprechenden segment_seconds Wert. Ebenfalls, keyframe_rate und fixed_keyframe_interval Einstellungen müssen in vorgenommen werden dynamic_profile_options.

CAE - HLS Beispiel

  {
    "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 - DASH Beispiel

  
  {
    "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"
          }
        ]
      }
    ]
   }