Guide SMIL Vents

Highwinds est un CDN rapide qui offre une large gamme de solutions, y compris le streaming adaptatif de vidéo. Pour faciliter l'utilisation de l'intégration de streaming adaptatif Highwinds, nous avons ajouté une méthode pour générer des fichiers SMIL.

Aperçu

SMIL Les fichiers sont des documents XML dans un format spécial qui sont utilisés pour décrire des présentations multimédias. Highwinds utilise un sous-ensemble de SMIL pour activer le streaming adaptatif.

SMIL et Zencoder

Voici un exemple de fichier SMIL Highwinds qui décrit une vidéo qui a été encodée à plusieurs débits binaires. Tous les chemins ("src") donnés sont relatifs à l'endroit où le SMIL sera servi et tous les débits ("system-bitrate") sont en bits par seconde (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>

Chaque <video> La balise dans l'exemple ci-dessus représente un flux distinct qui peut être diffusé à l'utilisateur. La première vidéo répertoriée sera diffusée en continu à l'utilisateur jusqu'à ce que la bande passante disponible puisse être déterminée, moment auquel l'utilisateur basculera vers le flux approprié.

Créer une liste de lecture SMIL Highwinds avec Zencoder est facile.


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

Lorsque vous faites cela, vous devrez également inclure une sortie non-playlist.

  • "type" doit être "playlist"
  • "format" doit être "highwinds"
  • "url" (ou "filename") doit avoir une extension "smil"
  • "streams" doit être un tableau d'objets JSON ayant chacun les clés "bandwidth" et "path"
    • « path » doit être le chemin relatif vers le fichier mp4 tel qu'il sera servi par votre serveur (notez qu'il n'inclut pas le « mp4 : » principal qui apparaît dans le fichier SMIL)
    • "bandwidth" devrait être le débit du fichier en kbps que nous convertirons en bps lors de la création du fichier SMIL
    • "width" est facultatif et doit spécifier la résolution horizontale du fichier
    • "height" est facultatif et doit spécifier la résolution verticale du fichier

Les vidéos référencées par la liste de lecture peuvent être créées séparément du travail qui génère la liste de lecture, ou elles peuvent être créées en tant que sorties supplémentaires sur le même travail.

L'image entière

Plusieurs sorties de différents débits binaires peuvent être spécifiées et référencées par la liste de lecture.

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

NOTES

  • La génération de liste de lecture n'utilise actuellement aucune information des autres sorties du travail, mais est simplement un moyen de générer facilement une liste de lecture à débit adaptatif correctement formatée et de la télécharger avec les autres fichiers.
  • decoder_bitrate_cap est défini sur 1,5 fois le débit binaire cible du fichier. decoder_buffer_size est défini sur 3,5 x à 5 fois le débit binaire cible du fichier. Ces paramètres permettent de conserver un débit binaire cohérent dans tout le fichier, de sorte que les segments segmentés ne varient pas trop en taille et en débit.