AMF 学习总结(二)一、Adobe Media Framework (AMF) — 媒体播放框架1. 核心概念回顾AMF 是 Adobe 提供的一个 Flash 视频播放器框架,支持多协议(HLS、RTMP等)主要用于构建可扩展的在线视频播放器支持自定义插件,易于扩展功能2. AMF 概述AMF 是 Adobe 提出的二进制序列化协议主要用于 Flash/Flex 和服务器间高效传输数据支持复杂对象、数组、XML、日期等数据类型2. AMF 类型细节AMF0 和 AMF3 是两个版本,AMF3更高效且支持更多数据类型支持数据压缩,减少网络传输负担序列化格式包括基本数据类型和复合数据结构3. JSON/XML等格式,AMF的优势和劣势有更清晰认识熟悉播放器事件模型和网络请求流程(针对媒体框架)https://www.52runoob.com/archives/5205
ASP.NET移动框架(AMF)是一种最常用的平板电脑和智能手机上Web应用程序的框架,基于jQuery Mobile(http://jquerymobile.com)的asp.net 开源项目,项目地址是 http://amf.codeplex.com/,最新发布的版本是0.9,对应于jquerymobile 的beta2,codeproject上有篇详细介绍的文章 http://www.codeproject.com /KB/aspnet/amf.aspx 。
AMF是Action Message Format协议的简称,AMF协议是Adobe公司自己的协议,主要用于数据交互和远程过程调用,在功能上相当于WebService,但是AMF与WebService中的 XML不同的是AMF是二进制数据,而XML是文本数据,AMF的传输效率比XML高。 闲话休说,言归正传,下面继续说AMF协议,在例子中我使用的AMF数据就是从纵横天下中抓取的AMF数据。 AMF目前有两种版本,AMF0和AMF3,他们在数据类型的定义上有细微不同。 关于AMF的官方文档参见这里。 另外http://osflash.org/documentation/amf/astypes 这个英文网站也对AMF数据类型作了比较详细的介绍。
AMF AMF(是Action Message Format的缩写)是在flash和flex中与远程服务端交换数据的一种格式. AMF 1 诞生于Flash Player6,发展到现在已经变成了了AMF3 RTMP RTMP是Real-Time Messaging Protocol(实时消息传送协议)的缩写,它是Adobe Systems RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据。 一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的。
前一篇文章中已经学习了AMF数据类型,那么接下来就要将一个完整的AMF文件的封装格式了。 AMF文件总体来说分为4部分:前言(Preamble)、AMF头、AMF主体和主体的响应。 前言的前2字节用于说明AMF的版本,目前AMF有2个版本AMF0和AMF3.如使用AMF0则是:00 00 第3和第4字节用16位整数表示AMF头的数量。 Variable变量是某种AMF数据类型。 在Header表示完后,接下来是一个16位的整数用来表示AMF主体的数量,在这个数量之后才是AMF主体。 我们可以按照前面说的封装方式将该amf解析如下: 00 00(AMF0版本)00 00(Header个数为0)00 01(AMF主体有1个) 00 1B(请求的方法的字符串长度为27个字节) 7A 现在我们已经对AMF文件有了一个清晰的认识了。那么接下来就是要抓包,看某些在Flex上的操作对应的发送了什么AMF文件,服务器返回了什么AMF文件。
Requested NSSAI:UE ---> AMF 这个是UE提供给AMF表明UE想要申请接入的切片信息,在Security Mode Complete(Registration Request)的 Subscribed NSSAI:AMF <--- UDM <--- UDR 这个很好理解,就是网络中针对此用户签约的切片信息,定义在UDR中,通过UDM提供给AMF。 Allowed NSSAI:UE/gNB <--- AMF 这个是AMF在Registration Accpet中发给UE,表示网络侧允许UE可以使用的切片信息;同时AMF也通过Initial Context 它是一个诸多信息汇总到AMF后取的交集: A-UE的Requested NSSAI; B-UDM/UDR提供的Subcribed NSSAI; C-AMF配置支持的NSSAI; D-gNodeB上报的TAC Request in TAC1 UE <----> AMF <-----> AUSF Authentication UE <----- AMF Security Mode Command UE ---
AMF:自己还是别人。 GUAMI——Globally Unique AMF Identifier也由两部分构成:PLMN和AMF Identifier,其中PLMN依然由国家码MCC和网络码MNC构成,然后AMF Identifier 由三部分构成,分别是: ARI:AMF Reginon ID,共8比特位; ASI:AMF Set ID,共10比特位; AP:AMF Pointer,共6比特位。 5G-GUTI最后一部分就是AMF分配的一个5G-TMSI,用于AMF自己内部区分不同的用户。 值得注意的是MME的GUMMEI一共24bit,其中MMEGroupID是16bit,MMECode是8bit;而AMF的GUAMI一共也24bit,其中AMF Region ID是8bit,AMF Set
5G支持端到端网络切片 (1)包括无线接入网络 (2)核心网控制面 (3)核心网用户面 不同网络切片的网络功能可共享,典型的共享包括 (1)基站共享 (2)控制面功能共享,如AMF共享 (3)核心网用户面功能不共享 UE可同时接入共享AMF的多个网络切片,最多可同时接入8个切片 目前定义了三种类型的网络切片: eMBB、URLLC、MloT(高带宽、低时延、面向大连接) 网络切片的类型和标志 S-NSSAI:网络切片标识符 业务定义与切片设计:多种设计模式满足不同场景 五、5G切片主要业务流程 注册过程中对切片的选择: 用户发起附着请求消息,发给基站,基站根据请求的权重选择AMF AMF收到请求的切片后根据SUCI,选择 UDM,从中获取用户签约信息 UDM把签约信息放回给AMF,AMF通过该信息判断是否可以提供业务给用户,可以则AMF把注册请求通过的消息发给用户 若AMF不能提供服务给用户,则向NSSF发送请求 若default AMF不在AMF Set中,则根据NSSAI查询NRF 重新路由到Target AMF Target AMF向PCF查询用户信息 返回接入网,注册完成 会话过程中对切片的选择: 用户发起PDU会话建立的请求
协议流程的位置: 对应流程图中step1 4.2 AMF选择 RAN侧收到注册请求后开始做AMF的选择(AMF Selection),RAN将根据GUTI或者RAT+NSSAI选择一个AMF,如果选择不到 协议流程的位置: 对应流程图中step3 报文捕获: 4.4 New AMF会向Old AMF获取UE的上下文信息 由于核心网是不认识GUTI的,所以New AMF会向Old AMF获取UE的上下文信息 协议流程的位置: 对应流程图中step9 报文捕获: 4.8 New AMF通知Old AMF,UE在New AMF注册完成 New AMF通知Old AMF,UE在New AMF注册完成。 { //如果AMF发生了变化,New AMF会通知Old AMF,UE在New AMF注册已完成。 4.17 N2 AMF Mobility Request 对于非3gpp接入的场景,AMF向N3IWF发送通知消息,告知AMF发生了变化,N3IWF向AMF返回了响应。
AMF英文全称Action Message Format,是Adobe定义的一套用来进行数据打包的格式,主要的版本有AFM0和AMF3,不过发展至今,实际场景中AMF0一直用的比较多,AMF3相对少见, 本篇就以AMF0为例来讲解了。 那么AMF和RTMP Body又有什么关系呢,不才,RTMP数据包的序列化就是按照AMF的格式进行的。 不过,AMF中对于某些类型的数据,没有长度的选项,因为AMF中规定了该类型所占据的字节长度大小。 这样,我们通过对RTMP Body的分析,也熟悉了AMF0的一些标准,当然还有其他的一些类型,朋友有需要可以自行学习,举一反三了,Adobe关于AMF0和AMF3的官方文档放在下方,各位自取哈。
可以看到,一个_result消息由4部分组成,类型标识,transaction ID,properties,response related information,这四部分均以AMF格式进行编码,我们一一来看 典型的类型+长度+值的AMF组合,不多说了,_result表示消息类型。 transaction ID ? transcationID,按照AMF0格式编码,0x00表示数字格式,其后用8个字节表示ID,对于connect消息的回复,此ID恒为1。 properties ? code与description联合起来,表示此次连接成功;还有关于objectEncoding字段,表示object以那种方式编码(AMF0或者AMF3),此处值为0,表示采用AMF0编码。
紧接上文 接入网RAN RAN切片提供了基于切片ID的AMF/UPF选择,并提供了相对静态的资源控制和优先级控制。 那么核心网和接入网又怎么识别UE的不同的切片需求呢,这里就引入了接片辅助信息的S-NSSAI的概念,这个概念会另外起一个topic专门讲述,UE发送S-NSSAI给网络后,网络就能按照切片选择的规则选择相应的AMF 在这一切片选择过程后,UE和AMF就会执行UE上下文的处理过程来建立UE上下文和PDU的资源分配。UE可同时支持最多8个切片(随着后续标准的更新,这个值估计会变多)。 如果当终端不支持切片时,那么就跟之前一样,走默认的AMF/PDU会话等即可。 下图展示了一个UE选择低时延的网络切片的实例,UE发送相应的S-NSSAI列表给CU-CP,CU-CP通过S-NSSAI选择相应的AMF,若没有提供S-NSSAI,则CU-CP可以选择默认的AMF,AMF
⊕AK )|| AMF || MAC; AV:AV=RAND||XRES||CK||IK||AUTN; 核心网发起认证时将AV传递到 UE。 //生成RAND 参数 RAND := make([]byte, 16) _, err = cryptoRand.Read(RAND) //生成AMF参数 AMF, err := hex.DecodeString err = milenage.F1(opc, k, RAND, sqn, AMF, macA, macS) if err ! ABBA 由SEAF(AMF)传递给UE,UE用ABBA推导Kamf,默认值为0x000 0x0334 代码实现: 报文封装的实现过程,参加如下关键函数的关键处理片段: \amf\gmm\handler.go 如上图,UE认证核心网成功返回RES载荷给AMF 0x0343 协议原理: UE验证核心网的主要就是验证AUTH载荷中的MAC。
AP ID应唯一标识节点(NG-RAN节点或AMF)内通过NG接口或XN接口与UE相关联的逻辑连接或通过F1接口或通过E1接口或通过W1接口。 当AMF接收到RAN UE NGAP ID时,它将在该UE的与UE相关联的逻辑NG连接期间存储该ID。一旦被AMF知道,这就被包括在所有与UE相关联的NGAP信令中。 AMF UE NGAP ID: AMF UENGAP ID在AMF内的NG接口上唯一地标识UE。 当NG-RAN节点接收到AMF UE NGAP ID时,它将在该UE的与UE相关联的逻辑NG连接期间存储该AMF UE NGAP ID。 AMF UE NGAP ID在TS23.501[3]中规定的AMF集内应是唯一的。
STEP,STP,3DM,3DS,AMF,STL,3D模型在线文件查看体验地址 http://114.55.230.54/3D/STEP1、需求背景在数字化浪潮中,3D 模型格式(如 step、stp、 amf、3dm、3ds、3mf 等)的在线浏览需求,本质上是**数字化协同、轻量化交互、全流程数据贯通**的必然结果。 2、支持文件格式3dm, 3ds, 3mf, amf, bim, brep, dae, fbx, fcstd, gltf, ifc, iges, step, stp, stl, obj, off, ply || **3D 打印 / 增材制造类**(3mf、amf、stl) | 云端切片预览、打印服务平台 | 3D 打印数字化的核心是 “分布式制造”,在线浏览可让用户在云端预览模型结构(如是否有悬空
adobe.pdf文档中的定义,结构如下图: 6-1531053398_25_w3013_h1594.png 2.3.2.3 Script Script类型表明Data中存储的是脚本数据,存储的格式是AMF AMF格式的定义参考amf0_spec_121207.pdf和amf3_spec_121207.pdf两个文档。
与webService采用的soap协议不同:FluorineFx支持Adobe的AMF0,AMF3,RTMP协议,能方便的与Adobe几乎所有的通讯技术交互,这为silverlight与flash/flex properties> </destination> </service> </services> <channels> <channel-definition id="my-<em>amf</em> webApp项目添加对SliverlightApp的引用) 在silverlight中访问FluorineFx的关键代码如下: using FluorineFx; using FluorineFx.<em>AMF</em>3 NetConnection _netConnection = new NetConnection(); _netConnection.ObjectEncoding = ObjectEncoding.<em>AMF</em>3 为了改进,Adobe发明了<em>AMF</em>0/<em>AMF</em>3协议,<em>AMF</em>是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash 播放器与Flash Remoting网关通信提供了一种轻量级的
网络采用增强型AKA鉴权协议,实现用户设备与网络的双向安全认证:核心参与网元:UE(用户设备):包含USIM卡,执行关键计算5G-AN(5G接入网):如gNB基站,UE接入点SEAF(安全锚点功能):位于AMF 密钥上下文隔离机制:电信密钥上下文:K_AUSF_CT→K_SEAF_CT→K_AMF_CT→K_gNB_CT联通密钥上下文:K_AUSF_CU→K_SEAF_CU→K_AMF_CU→K_gNB_CU实现要点 NH密钥更新流程:基站与UE间的根密钥K_gNB由K_AMF周期性更新每次切换或特定时间间隔触发NH密钥计算新K_gNB=KDF(K_AMF,NH,PCI,ARFCN)这种机制确保密钥向前滚动,历史会话密钥无法从当前密钥推导技术特点 (autn.begin()+8,autn.end());returncomponents;}boolvalidateAMF(conststd::vector<uint8_t>&amf){//验证AMF分离位是否为 1(5G要求)return(amf[1]&0x80)!
消息类型为18的用AMF0编码,消息类型为15的用AMF3编码。 3.2.共享对象消息 (Message Type=19或16) 共享对象是跨多个客户端,实例同步的FLASH对象(名值对的集合)。 消息类型kMsgContainer=19用AMF0编码,kMsgContainerEx=16用AMF3编码,这两个消息用于共享对象事件。每个消息可包含多个事件。 消息类型为20的用AMF0编码,消息类型为17的用AMF3编码。 这些消息用于在远端实现连接,创建流,发布,播放和暂停等操作。状态,结果等命令消息用于通知发送者请求命令的状态。 63 74:string("connect") 00 :amf type(表示double型) 3f f0 00 00 00 00 00 00:val 03:amf type(表示Object型) :string("_resulte") 00:amf type(表示double) 3f f0 00 00 00 00 00 00:val(double型) 03:amf type(表示Object类型
该tag又由两个AMF包组成,AMF这种包的结构也经常出现在Adobe的相关协议和规范里: AMF1{“on MetaData”}|AMF2{“width height”} flv parse 解析Script Metdata Tag有下面两种包组成: AMF1{“on MetaData”}|AMF2{“width height”} 其中AMF1包: 字段 占位 备注 AMF Type 1byte字节 固定值为 61 74 61 说明:上面红色已经将该包框出来了,具体不在分析,封装时直接构造固定值即可,解装时解析出来丢弃即可,没啥大用; 其中AMF2包: 字段 占位 备注 AMF Type 1byte字节 固定值为0x08 AMF 长度 4byte字节 数组元素的个数:0x00 00 00 0D AMF value值 计算得到字节 因为在该tag的头已经说明该tag的data有300字节,则用该值减去AMF1 长度13字节和AMF2头的5字节即为剩余AMF2的Value值大小:300 - 12 - 5 = 283字节 第1个字节表示AMF包类型,一般总是0x08,表示数组。