Cómo codificar con una transformación personalizada: REST

Logotipo de Media Services v3


¿Busca la documentación de Media Services, versión 2?

Al codificar con Azure Media Services, puede empezar a trabajar rápidamente con uno de los valores preestablecidos integrados recomendados según los procedimientos recomendados del sector, tal como se muestra en el tutorial Streaming de archivos. También puede compilar un valor preestablecido personalizado para sus requisitos específicos de escenario o dispositivo.

Advertencia

No se recomienda intentar encapsular la API REST de Media Services directamente en su propio código de biblioteca, ya que hacerlo correctamente con fines de producción requeriría la implementación de la lógica de reintentos de Azure Resource Manager completa y comprender cómo administrar operaciones de larga duración en las API de Azure Resource Manager. Esto se controla automáticamente mediante los SDK de cliente de varios lenguajes (.NET, Java, TypeScript, Python, Ruby, etc.) y reduce las posibilidades de que tenga problemas con la lógica de reintentos o las llamadas API con errores. Los SDK de cliente lo controlan todo automáticamente. La colección de Postman se proporciona más como una herramienta de enseñanza y para mostrar lo que los SDK de cliente hacen realmente en la conexión durante el desarrollo con los distintos SDK de cliente.

Consideraciones

Al crear valores preestablecidos personalizados, se aplican las consideraciones siguientes:

  • Todos los valores de alto y ancho del contenido de AVC deben ser un múltiplo de 4.
  • En Azure Media Services v3, todas las velocidades de bits de codificación se expresan en bits por segundo. Esto difiere de los valores preestablecidos en las API v2, en donde se usaban kilobits por segundo como unidad. Por ejemplo, si la velocidad de bits de v2 se especificaba como 128 (kilobits/segundo), en v3 se establecería en 128 000 (bits/segundo).

Prerequisites

Definir un valor preestablecido personalizado

En el ejemplo siguiente se define el cuerpo de la solicitud de una nueva transformación. Se define un conjunto de salidas que queremos que se genere cuando se use esta transformación.

En primer lugar, se agrega una capa AacAudio para la codificación de audio y dos capas H264Video para la codificación de vídeo. En las capas de vídeo se asignan etiquetas para que se puedan usar en los nombres de archivo de salida. Luego queremos que la salida también incluya miniaturas. En el ejemplo siguiente se especifican imágenes en formato PNG generadas al 50 % de la resolución del vídeo de entrada, y en tres marcas de tiempo, {25 %, 50 %, 75 %}, de la longitud del vídeo de entrada. Por último, se especifica el formato de los archivos de salida: uno para vídeo y audio y otro para las miniaturas. Puesto que hay varias H264Layers, tenemos que usar macros que generen nombres únicos por capa. Se puede usar una macro {Label} o {Bitrate}; el ejemplo muestra la primera.

{
    "properties": {
        "description": "Basic Transform using a custom encoding preset",
        "outputs": [
            {
                "onError": "StopProcessingJob",
                "relativePriority": "Normal",
                "preset": {
                    "@odata.type": "#Microsoft.Media.StandardEncoderPreset",
                    "codecs": [
                        {
                            "@odata.type": "#Microsoft.Media.AacAudio",
                            "channels": 2,
                            "samplingRate": 48000,
                            "bitrate": 128000,
                            "profile": "AacLc"
                        },
                        {
                            "@odata.type": "#Microsoft.Media.H264Video",
                            "keyFrameInterval": "PT2S",
                            "stretchMode": "AutoSize",
                            "sceneChangeDetection": false,
                            "complexity": "Balanced",
                            "layers": [
                                {
                                    "width": "1280",
                                    "height": "720",
                                    "label": "HD",
                                    "bitrate": 3400000,
                                    "maxBitrate": 3400000,
                                    "bFrames": 3,
                                    "slices": 0,
                                    "adaptiveBFrame": true,
                                    "profile": "Auto",
                                    "level": "auto",
                                    "bufferWindow": "PT5S",
                                    "referenceFrames": 3,
                                    "entropyMode": "Cabac"
                                },
                                {
                                    "width": "640",
                                    "height": "360",
                                    "label": "SD",
                                    "bitrate": 1000000,
                                    "maxBitrate": 1000000,
                                    "bFrames": 3,
                                    "slices": 0,
                                    "adaptiveBFrame": true,
                                    "profile": "Auto",
                                    "level": "auto",
                                    "bufferWindow": "PT5S",
                                    "referenceFrames": 3,
                                    "entropyMode": "Cabac"
                                }
                            ]
                        },
                        {
                            "@odata.type": "#Microsoft.Media.PngImage",
                            "stretchMode": "AutoSize",
                            "start": "25%",
                            "step": "25%",
                            "range": "80%",
                            "layers": [
                                {
                                    "width": "50%",
                                    "height": "50%"
                                }
                            ]
                        }
                    ],
                    "formats": [
                        {
                            "@odata.type": "#Microsoft.Media.Mp4Format",
                            "filenamePattern": "Video-{Basename}-{Label}-{Bitrate}{Extension}",
                            "outputFiles": []
                        },
                        {
                            "@odata.type": "#Microsoft.Media.PngFormat",
                            "filenamePattern": "Thumbnail-{Basename}-{Index}{Extension}"
                        }
                    ]
                }
            }
        ]
    }
}

Crear una nueva transformación

En este ejemplo, creamos una transformación que se basa en los valores preestablecidos personalizados que definimos anteriormente. Al crear una transformación, primero debe usar el método Get para comprobar si ya existe una. Si existe la transformación, vuelva a usarla.

En la colección de Postman que descargó, seleccione Transforms and Jobs (Transformaciones y trabajos)->Create or Update Transform (Crear o actualizar transformación).

El método PUT de solicitud HTTP es similar a:

PUT https://management.azure.com/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.Media/mediaServices/:accountName/transforms/:transformName?api-version={{api-version}}

Seleccione la pestaña Cuerpo y pegue el código json que definió anteriormente. Para que Media Services aplique la transformación al audio o vídeo especificado, deberá enviar un trabajo en esa transformación.

Seleccione Enviar.

Para que Media Services aplique la transformación al audio o vídeo especificado, deberá enviar un trabajo en esa transformación. Para obtener un ejemplo completo que muestra cómo enviar un trabajo en una transformación, consulte Tutorial: Hacer streaming de archivos de vídeo: REST.

Pasos siguientes

Consulte otras operaciones de REST.