HLS usando MP4 fragmentado

Consulte HLS Streaming and Playlists para obtener más detalles sobre las salidas y las listas de reproducción de ts. Para elegir archivos MP4 fragmentados con salidas HLS, use "format": "m4f" y "streaming_delivery_format": "hls". Recomendamos encarecidamente configurar "byte_range_segmenting": true, para formatear el medio como un único archivo MP4 fragmentado en lugar de tener archivos de segmentos independientes.
{
  "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
}

Cifrado

Zencoder también admite la generación de salidas MP4 fragmentadas y HLS cifradas con CBCS con los encabezados necesarios para la integración con Fairplay DRM. Para cada salida, especifique Cifrado opciones. Una vez que tenga esas claves, la estructura de la API de Zencoder para una única interpretación es:

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

Notas

  • Se recomienda hacer salidas segmentadas solo de audio y solo de video y usar audio alternativo mientras se genera la lista de reproducción.
  • En la salida de la lista de reproducción NO mezclar ts y m4f salidas (provoca problemas de sincronización de audio y vídeo).
  • Los subtítulos con salidas mp4 HLS fragmentadas aún no son compatibles con zencoder.

Ejemplo completo

La lista de reproducción puede especificar y hacer referencia a múltiples salidas de diferentes velocidades de bits. Estos ajustes coinciden con las pautas dadas en nuestra Guía de codificación de iOS.

Salidas de 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
        }
    ]
}

Salidas de video

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

Salidas de lista de reproducción

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