HLS utilisant MP4 fragmenté

Prière de se référer à Diffusion HLS et listes de lecture pour plus de détails sur les sorties et les listes de lecture ts. Pour choisir des fichiers MP4 fragmentés avec des sorties HLS, utilisez "format": "m4f" et "streaming_delivery_format": "hls". Nous recommandons fortement de définir "byte_range_segmenting": true le format du support comme un seul fichier MP4 fragmenté plutôt que de disposer de fichiers de segments séparés.
{
  "skip_audio": true,
  "base_url": "s3://my-bucket/",
  "decoder_bitrate_cap": 900,
  "decoder_buffer_size": 2400,
  "filename": "file-640k.m3u8",
  "max_frame_rate": 30,
  "public": 1,
  "type": "segmented",
  "video_bitrate": 600,
  "width": 400,
  "format": "m4f",
  "streaming_delivery_format" : "hls",
  "byte_range_segmenting" : "true",
  "max_hls_protocol_version" : 7
}

Cryptage

Zencoder prend également en charge la génération de sorties MP4 fragmentées et HLS cryptées CBCS avec les en-têtes nécessaires pour l'intégration avec Fairplay DRM. Pour chaque sortie, spécifiez Chiffrement options. Une fois que vous avez ces clés, la structure de l'API Zencoder pour un rendu unique est la suivante :

{
  "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
  "outputs": [
    {
      "skip_audio": true,
      "base_url": "s3://my-bucket/",
      "decoder_bitrate_cap": 900,
      "decoder_buffer_size": 2400,
      "filename": "file-640k.m3u8",
      "max_frame_rate": 30,
      "public": 1,
      "type": "segmented",
      "video_bitrate": 600,
      "width": 400,
      "format": "m4f",
      "streaming_delivery_format" : "hls",
      "max_hls_protocol_version" : 7,
      "byte_range_segmenting" : "true",
      "drm_method" : "fairplay",
      "encryption_method": "cbcs",
      "encryption_key_url":"http://example.com/encryption.key",
      "encryption_key": "a5f6a7d6ef5d6a7a02a23dd35dd56a63",
      "encryption_iv" : "6345216ef5d6a7a02a23dd35d456987"
    }
  ]
}

Remarques

  • Il est recommandé de faire des sorties segmentées audio uniquement et vidéo uniquement et d'utiliser un son alternatif lors de la génération de la liste de lecture.
  • En sortie de playlist, NE mixez PAS ts et m4f sorties (provoque des problèmes de synchronisation audio-vidéo).
  • Les sous-titres avec des sorties mp4 HLS fragmentées ne sont pas encore pris en charge dans zencoder.

Exemple complet

Plusieurs sorties de différents débits binaires peuvent être spécifiées et référencées par la liste de lecture. Ces paramètres correspondent aux directives données dans notre Guide d'encodage iOS.

Sorties audio

{
  "outputs": [
      {
            "public": true,
            "label": "Audio-64",
            "base_url": "s3://my-bucket/Audio/64k/",
            "filename": "audio_64k.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "audio_codec": "aac",
            "audio_bitrate": "64",
            "skip_video": true
        },
        {
            "public": true,
            "label": "Audio-128",
            "base_url": "s3://my-bucket/Audio/128k/",
            "filename": "audio_128k.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "audio_codec": "aac",
            "audio_bitrate": "128",
            "skip_video": true
        }
    ]
}

Sorties vidéo

{
 "outputs": [
        {
            "public": true,
            "label": "Rendition1",
            "base_url": "s3://my-bucket/Rendition1",
            "filename": "Rendition1.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "416x234",
            "video_bitrate": "145",
            "skip_audio": true
        },
        {
            "public": true,
            "label": "Rendition2",
            "base_url": "s3://my-bucket/Rendition2",
            "filename": "Rendition2.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "480x270",
            "video_bitrate": "300",
            "skip_audio": true
        },
        {
            "public": true,
            "label": "Rendition3",
            "base_url": "s3://my-bucket/Rendition3",
            "filename": "Rendition3.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "640x360",
            "video_bitrate": "660",
            "skip_audio": true
        },
        {
            "public": true,
            "label": "Rendition4",
            "base_url": "s3://my-bucket/Rendition4",
            "filename": "Rendition4.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "768x432",
            "video_bitrate": "990",
            "skip_audio": true
        },
        {
            "public": true,
            "label": "Rendition5",
            "base_url": "s3://my-bucket/Rendition5",
            "filename": "Rendition5.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "960x540",
            "video_bitrate": "1700",
            "skip_audio": true
        },
        {
            "public": true,
            "label": "Rendition6",
            "base_url": "s3://my-bucket/Rendition6",
            "filename": "Rendition6.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "1280x720",
            "video_bitrate": "2400",
            "skip_audio": true
        },
        {
            "public": true,
            "label": "Rendition7",
            "base_url": "s3://my-bucket/Rendition7",
            "filename": "Rendition7.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "1920x1080",
            "video_bitrate": "4500",
            "skip_audio": true
        },
        {
            "public": true,
            "label": "Rendition8",
            "base_url": "s3://my-bucket/Rendition8",
            "filename": "Rendition8.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "2560x1440",
            "video_bitrate": "8100",
            "skip_audio": true
        },
        {
            "public": true,
            "label": "Rendition9",
            "base_url": "s3://my-bucket/Rendition9",
            "filename": "Rendition9.m3u8",
            "type": "segmented",
            "segment_seconds": 6,
            "byte_range_segmenting": true,
            "format": "m4f",
            "streaming_delivery_format": "hls",
            "generate_keyframe_manifest": "true",
            "fixed_keyframe_interval": "true",
            "keyframe_rate": 0.5,
            "video_codec": "hevc",
            "size": "3840x2160",
            "video_bitrate": "11600",
            "skip_audio": true
        }
    ]
}

Sorties de liste de lecture

{
    "outputs":[
       {
            "public": true,
            "label": "master-playlist",
            "base_url": "s3://my-bucket/",
            "filename": "master_playlist.m3u8",
            "hls_protocol_version": 7,
            "type": "playlist",
            "allow_skipped_sources": true,
            "alternate_audio": {
                "64k_audio": {
                    "path": "Audio/64k/audio_64k.m3u8",
                    "language": "en",
                    "default": true,
                    "source": "Audio-64"
                },
                "128k_audio": {
                    "path": "Audio/128k/audio_128k.m3u8",
                    "language": "en",
                    "source": "Audio-128"
                }
            },
            "streams": [
                {
                    "path": "Rendition1/Rendition1.m3u8",
                    "source": "Rendition1",
                    "audio": "64k_audio"
                },
                {
                    "path": "Rendition2/Rendition2.m3u8",
                    "source": "Rendition2",
                    "audio": "64k_audio"
                },
                {
                    "path": "Rendition3/Rendition3.m3u8",
                    "source": "Rendition3",
                    "audio": "128k_audio"
                },
                {
                    "path": "Rendition4/Rendition4.m3u8",
                    "source": "Rendition4",
                    "audio": "128k_audio"
                },
                {
                    "path": "Rendition5/Rendition5.m3u8",
                    "source": "Rendition5",
                    "audio": "128k_audio"
                },
                {
                    "path": "Rendition6/Rendition6.m3u8",
                    "source": "Rendition6",
                    "audio": "128k_audio"
                },
                {
                    "path": "Rendition7/Rendition7.m3u8",
                    "source": "Rendition7",
                    "audio": "128k_audio"
                },
                {
                    "path": "Rendition8/Rendition8.m3u8",
                    "source": "Rendition8",
                    "audio": "128k_audio"
                },
                {
                    "path": "Rendition9/Rendition9.m3u8",
                    "source": "Rendition9",
                    "audio": "128k_audio"
                }
            ]
        }
    ]
}