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