stringtranslate.com

Formato del mensaje de acción

El formato de mensaje de acción ( AMF ) es un formato binario que se utiliza para serializar gráficos de objetos, como objetos ActionScript y XML, o enviar mensajes entre un cliente Adobe Flash y un servicio remoto, generalmente un Flash Media Server o alternativas de terceros. El lenguaje Actionscript 3 proporciona clases para codificar y decodificar desde el formato AMF.

El formato se utiliza a menudo junto con RTMP de Adobe para establecer conexiones y controlar comandos para la entrega de medios de streaming. En este caso, los datos AMF se encapsulan en un fragmento que tiene un encabezado que define aspectos como la longitud y el tipo del mensaje (ya sea un "ping", un "comando" o datos multimedia).

Análisis de formato

AMF se introdujo con Flash Player 6 y esta versión se conoce como AMF0. No cambió hasta el lanzamiento de Flash Player 9 y ActionScript 3.0, cuando los nuevos tipos de datos y características del lenguaje provocaron una actualización, llamada AMF3. [1] Flash Player 10 agregó tipos de datos vectoriales y de diccionario documentados en una especificación revisada de enero de 2013.

Adobe Systems publicó la especificación del protocolo de datos binarios AMF en diciembre de 2007 [2] [3] y anunció que apoyará a la comunidad de desarrolladores para que este protocolo esté disponible para todas las principales plataformas de servidores.

Paquete autónomo AMF

El siguiente paquete amf es para la transmisión de mensajes fuera de contenedores o transportes definidos de Adobe/Macromedia, como Flash Video o el protocolo de mensajería en tiempo real .

Si se desconoce la longitud del encabezado o del mensaje, se establecen en -1 o 0xFFFFFFFF

uimsbf: entero sin signo, el bit más significativo primero

simsbf: entero con signo, el bit más significativo primero

AMF0

El formato especifica los distintos tipos de datos que se pueden utilizar para codificar datos. Adobe afirma que AMF se utiliza principalmente para representar gráficos de objetos que incluyen propiedades con nombre en forma de pares clave-valor, donde las claves están codificadas como cadenas y los valores pueden ser de cualquier tipo de datos, como cadenas o números, así como matrices y otros objetos. XML se admite como tipo nativo. Cada tipo se indica mediante un único byte que precede a los datos reales. Los valores de ese byte son los siguientes (para AMF0):

Los objetos AMF comienzan con (0x03) seguido de un conjunto de pares clave-valor y terminan con un (0x09) como valor (precedido por 0x00 0x00 como entrada de clave vacía). Las claves están codificadas como cadenas con el byte (0x02) de 'definición de tipo' implícito (no incluido en el mensaje). Los valores pueden ser de cualquier tipo, incluidos otros objetos, y los gráficos de objetos completos se pueden serializar de esta manera. Tanto las claves de objeto como las cadenas están precedidas por dos bytes que indican su longitud en número de bytes. Esto significa que las cadenas están precedidas por un total de tres bytes que incluyen el byte de tipo 0x02. Los tipos nulos solo contienen su definición de tipo (0x05). Los números están codificados como coma flotante de doble precisión y se componen de ocho bytes.

Como ejemplo, al codificar el objeto siguiente en código ActionScript 3.

var persona : Objeto = { nombre : 'Mike' , edad : '30' , alias : 'Mike' }; var flujo : ByteArray = nuevo ByteArray (); arroyo . codificación de objetos = codificación de objetos . AMF0 ; // ByteArray por defecto es el flujo AMF3 . escribirObjeto ( persona );            

Los datos contenidos en ByteArray son:

Nota: las propiedades del objeto se pueden ordenar en un orden diferente al que se colocan en ActionScript. Para colorear/marcar, consulte la leyenda a continuación.

El código anterior funcionará sólo para clases integradas como Object. Para serializar y deserializar clases personalizadas, el usuario debe declararlas utilizando el comando RegisterClassAlias ​​o, de lo contrario, el reproductor generará un error.

// para una clase hipotética Persona registrarClassAlias ​​( "personaTipoAlias" , Persona ); 

Aunque, estrictamente hablando, AMF es sólo un formato de codificación de datos, normalmente se encuentra encapsulado en un mensaje RTMP o una llamada Flex RPC. A continuación se puede encontrar un ejemplo del primero (es el mensaje "_result" devuelto en respuesta al comando "conectar" enviado desde el cliente flash):

Leyenda: inicio/fin del objeto claves del objeto valores del objeto ecma_array

El mensaje AMF comienza con a 0x03que denota un paquete RTMP con tipo de encabezado 0 , por lo que se espera que le sigan 12 bytes. Es de tipo de mensaje 0x14, que denota un comando en forma de cadena de valor "_result" y dos objetos serializados como argumentos. El mensaje se puede decodificar de la siguiente manera:

( comando ) "_resultado" ( id de transacción ) 1 ( valor ) [ 1 ] { fmsVer : "FMS/3,5,5,2004" capacidades : 31.0 modo : 1.0 }, [ 2 ] { nivel : "estado" , código : "NetConnection.Connect.Success" , descripción : "La conexión se realizó correctamente". , datos : ( matriz ) { versión : "3,5,5,2004" }, clientId : 1584259571.0 , objectEncoding : 3.0 }                             

Aquí se puede ver una matriz (en turquesa) como valor de la clave 'datos' que tiene un miembro. Podemos ver que el valor de objectEncoding es 3. Esto significa que los mensajes posteriores se enviarán con el tipo de mensaje 0x11, lo que implicará una codificación AMF3.

AMF3

La última versión del protocolo especifica cambios significativos que permiten un formato más comprimido. Los marcadores de datos son los siguientes:

Los primeros 4 tipos no van seguidos de ningún dato (los booleanos tienen dos tipos en AMF3).

Los marcadores adicionales utilizados por Flash Player 10 (el formato todavía se conoce como AMF3) son los siguientes:

AMF3 apunta a una mayor compresión y una de las formas en que lo logra es evitando la duplicación de cadenas guardándolas en una matriz con la que se comparan todas las cadenas nuevas. El byte que sigue al marcador de cadena ya no indica longitud pura, sino que es un byte complejo donde el bit menos significativo indica si la cadena está 'en línea' (1), es decir, no en la matriz o 'referencia' (0), en cuyo caso el Se guarda el índice de la matriz. La tabla incluye claves y valores.

En versiones anteriores de Flash Player existía un tipo de número llamado 'Número' que era una codificación de doble precisión de 64 bits. En las últimas versiones hay un int y un uint que se incluyen en AMF3 como tipos separados. Los tipos de números son idénticos a la codificación AMF0, mientras que los enteros tienen una longitud variable de 1 a 4 bytes, donde el bit más significativo de los bytes 1 a 3 indica que van seguidos de otro byte.

Apoyo a la AMF

Los diversos protocolos AMF son compatibles con muchos lenguajes y tecnologías del lado del servidor, en forma de bibliotecas y servicios que el desarrollador de la aplicación debe instalar e integrar.

Plataformas:

Marcos:

Ver también

Referencias

  1. ^ "Formato de mensaje de acción: AMF 3" (PDF) . Enero 2013 . Consultado el 1 de mayo de 2021 .
  2. ^ "Formato de mensaje de acción: AMF 0" (PDF) . 2007 . Consultado el 1 de mayo de 2021 .
  3. ^ "Adobe abre AMF y libera la fuente del marco de comunicación remota utilizado en aplicaciones web enriquecidas". Ars Técnica . Consultado el 31 de diciembre de 2017 .
  4. ^ Características | Estándar Adobe ColdFusion 9