Guía SMIL Highwinds

Highwinds es un CDN rápido que ofrece una amplia gama de soluciones, incluida la transmisión de video adaptativa. Para facilitar el uso de la integración de transmisión adaptativa de Highwinds, hemos agregado un método para generar archivos SMIL.

Resumen

SONRISA Los archivos son documentos XML en un formato especial que se utilizan para describir presentaciones multimedia. Highwinds utiliza un subconjunto de SMIL para permitir la transmisión adaptativa.

SMIL y Zencoder

El siguiente es un ejemplo de un archivo Highwinds SMIL que describe un video que ha sido codificado a múltiples velocidades de bits. Todas las rutas ("src") proporcionadas son relativas al lugar donde se servirá el SMIL y todas las tasas de bits ("tasa de bits del sistema") están en bits por segundo (bps).


<smil>
<head>
</head>
<body>
<switch>
<video src="mp4:rel/path/file-440k.mp4"
system-bitrate="440000" width="720" height="406" />
<video src="mp4:rel/path/file-640k.mp4"
system-bitrate="640000" width="854" height="480" />
<video src="mp4:rel/path/file-240k.mp4"
system-bitrate="240000" width="640" height="360" />
<video src="mp4:rel/path/file-150k.mp4"
system-bitrate="150000" width="320" height="180" />
<video src="mp4:rel/path/file-64k.mp4"
system-bitrate="64000"/>
</switch>
</body>
</smil>

Cada <video> La etiqueta en el ejemplo anterior representa una secuencia separada que se puede entregar al usuario. El primer video de la lista se transmitirá al usuario hasta que se pueda determinar el ancho de banda disponible, momento en el que el usuario cambiará a la transmisión adecuada.

Crear una lista de reproducción Highwinds SMIL con Zencoder es fácil.


{
    "api_key": "asdf1234",
    "input": "s3://my-bucket/input/file.mov",
    "outputs": [
    {
        "type": "playlist",
        "format": "highwinds",
        "url": "s3://my-bucket/output/file.smil",
        "streams": [
        {
            "path": "rel/path/file-440k.mp4",
            "bandwidth": "440",
            "width": 720,
            "height": 406
        },
        {
            "path": "rel/path/file-640k.mp4",
            "bandwidth": "640",
            "width": 854,
            "height": 480
        },
        {
            "path": "rel/path/file-240k.mp4",
            "bandwidth": "240",
            "width": 640,
            "height": 360
        },
        {
            "path": "rel/path/file-150k.mp4",
            "bandwidth": "150",
            "width": 320,
            "height": 180
        },
        {
            "path": "rel/path/file-64k.mp4",
            "bandwidth": "64"
        }
        ]
    }
    ]
}

Cuando haga esto, deberá incluir también una salida que no sea de lista de reproducción.

  • "tipo" debe ser "lista de reproducción"
  • "formato" debe ser "viento fuerte"
  • "url" (o "nombre de archivo") debe tener la extensión "smil"
  • Los "flujos" deben ser una matriz de objetos JSON, cada uno con las claves "ancho de banda" y "ruta".
    • "ruta" debe ser la ruta relativa al archivo mp4, ya que será servido por su servidor (tenga en cuenta que no incluye el "mp4:" inicial que aparece en el archivo SMIL)
    • "ancho de banda" debe ser la tasa de bits del archivo en kbps que convertiremos a bps al crear el archivo SMIL
    • "ancho" es opcional y debe especificar la resolución horizontal del archivo
    • "altura" es opcional y debe especificar la resolución vertical del archivo.

Los videos a los que hace referencia la lista de reproducción se pueden crear por separado del trabajo que genera la lista de reproducción, o se pueden crear como salidas adicionales en el mismo trabajo.

La imágen completa

La lista de reproducción puede especificar y hacer referencia a múltiples salidas de diferentes velocidades de bits.

{
    "api_key": "1234abcd",
    "input": "http://example.com/file.mp4",
    "output": [
    {
        "audio_bitrate": 56,
        "audio_sample_rate": 22050,
        "base_url": "s3://my-bucket/",
        "filename": "file-64k.mp4",
        "format": "aac",
        "public": 1
    },
    {
        "audio_bitrate": 56,
        "audio_sample_rate": 22050,
        "base_url": "s3://my-bucket/",
        "decoder_bitrate_cap": 165,
        "decoder_buffer_size": 440,
        "filename": "file-150k.mp4",
        "max_frame_rate": 10,
        "public": 1,
        "video_bitrate": 110,
        "width": 320
    },
    {
        "audio_bitrate": 56,
        "audio_sample_rate": 22050,
        "base_url": "s3://my-bucket/",
        "decoder_bitrate_cap": 300,
        "decoder_buffer_size": 800,
        "filename": "file-240k.mp4",
        "max_frame_rate": 15,
        "public": 1,
        "video_bitrate": 200,
        "width": 640
    },
    {
        "audio_bitrate": 56,
        "audio_sample_rate": 22050,
        "base_url": "s3://my-bucket/",
        "decoder_bitrate_cap": 600,
        "decoder_buffer_size": 1600,
        "filename": "file-440k.mp4",
        "max_frame_rate": 30,
        "public": 1,
        "video_bitrate": 400,
        "width": 720
    },
    {
        "audio_bitrate": 56,
        "audio_sample_rate": 22050,
        "base_url": "s3://my-bucket/",
        "decoder_bitrate_cap": 900,
        "decoder_buffer_size": 2400,
        "filename": "file-640k.mp4",
        "max_frame_rate": 30,
        "public": 1,
        "video_bitrate": 600,
        "width": 854
    },
    {
        "type": "playlist",
        "format": "highwinds",
        "url": "s3://my-bucket/file.smil",
        "streams": [
        {
            "path": "file-440k.mp4",
            "bandwidth": "440",
            "width": 720,
            "height": 406
        },
        {
            "path": "file-640k.mp4",
            "bandwidth": "640",
            "width": 854,
            "height": 480
        },
        {
            "path": "file-240k.mp4",
            "bandwidth": "240",
            "width": 640,
            "height": 360
        },
        {
            "path": "file-150k.mp4",
            "bandwidth": "150",
            "width": 320,
            "height": 180
        },
        {
            "path": "file-64k.mp4",
            "bandwidth": "64"
        }
        ]
    }
    ]
}

NOTAS

  • La generación de la lista de reproducción actualmente no usa información de las otras salidas en el trabajo, pero es simplemente una forma de generar fácilmente una lista de reproducción con tasa de bits adaptativa formateada correctamente y cargarla junto con los otros archivos.
  • decoder_bitrate_cap se establece en 1,5 veces la velocidad de bits objetivo del archivo. decoder_buffer_size se establece en 3,5 veces a 5 veces la velocidad de bits objetivo del archivo. Esta configuración ayudará a mantener una tasa de bits constante en todo el archivo, de modo que los segmentos segmentados no varíen demasiado en tamaño y tasa de bits.