这里有一个连接,amf0和amf3的库,我下了看了下,还是自己写吧,哎。 http://wooce.iteye.com/blog/1396278

参考crtmpserver的代码写的,其中有amf.h文件。
 
 
AMF数据第一个byte为此数据的类型,类型有:
Number 0×00 double类型
Boolean 0×01 bool类型
String 0×02 string类型
Object 0×03 object类型
MovieClip 0×04 Not available in Remoting
Null 0×05 null类型,空
Undefined 0×06
Reference 0×07
MixedArray 0×08
EndOfObject 0×09 See Object ,表示object结束
Array 0x0a
Date 0x0b
LongString 0x0c
Unsupported 0x0d
Recordset 0x0e Remoting, server-to-client only
XML 0x0f
TypedObject (Class instance) 0×10
AMF3 data 0×11

Sent by Flash player 9+

 

对应的枚举就是:

public enum DataType{
Number = 00,// 0
Boolean = 01,// 1
String = 02,// 2
UntypedObject = 03,// 3
MovieClip = 04,// 4
Null = 05,// 5
Undefined = 06,// 6
ReferencedObject = 07,// 7
MixedArray = 08,// 8
End = 09,// 9
Array = 10,// 10
Date = 11,// 11
LongString = 12,// 12
TypeAsObject = 13,// 13
Recordset = 14,// 14
Xml = 15,// 15
TypedObject = 16,// 16
AMF3data = 17// 17
}
 
 
rtmp协议中数据都是大端的,所以在放数据前都要将数据转成大端的形式。
 
number类型其实就是double,占8bytes。比如:00 00 00 00 00 00 00 00,第一个byte为amf类型,其后8bytes为double值0.0。
 
 
boolean就是布尔类型,占用1byte。比如:01 00,第一个byte为amf类型,其后1byte是值,false。
 
 
string就是字符类型,一个byte的amf类型,两个bytes的字符长度,和N个bytes的数据。比如:02 00 02 33 22,第一个byte为amf类型,其后两个bytes为长度,注意这里的00 02是大端模式,33 22是字符数据。
 
 
null是空,只有一个byte,0x05。
 
 
object类型要复杂点,第一个byte是03表示object,其后跟的是N个(key+value)。最后以00 00 09表示object结束。
key是一个字符串组成:2bytes的长度,N bytes的数据,就是表示value的作用,相当于value的名字。
value可以使amf任意一种类型,包括object。格式和单独的amf type一样,如果是object的话,相当于在里面再嵌套一个object。
level(key)后面的status就是value,此value是string类型,所以格式是上面提到的string类型(0x02)。
 
 
ECMA_ARRAY(0x08)实际上和object差不多,只是在0x08类型后面多了4个bytes的记录总共多少items的东西,目测全部填00也可以,也是以00 00 09结束。
 
 
0x11类型是amf3的类型,amf3实际上外层是封了一层amf0,为了与amf0兼容,我没有用,没有研究过。
 
 
 
常用的差不多了,至少我还没有用到其他的,当遇到了再写解析。

RTMP协议中的AMF数据相关推荐

  1. RTMP协议中的Chunk Stream ID (CID)的作用

    一.协议分层 RTMP包是以Message的结构封装的,结构如下所示: 1)Message Type ID在1-7的消息用于协议控制,这些消息一般是RTMP协议自身管理要使用的消息,用户一般情况下无需 ...

  2. RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术

    目录标题 1. 引言 1.1 流媒体传输技术的重要性 1.2 为什么选择RTMP协议 1.3 RTMP协议的发展与应用 2. RTMP协议基础 2.1 RTMP协议简介 2.2 RTMP协议与其他流媒 ...

  3. 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 关键帧数据格式 | 非关键帧数据格式 | x264 编码后的数据处理 | 封装 H.264 视频数据帧 )

    文章目录 安卓直播推流专栏博客总结 一. x264 编码后的 H.264 数据帧 二. RTMP 协议中 关键帧 / 非关键帧 数据格式 说明 三. 判定 H.264 帧数据分隔符 四. 初始化 RT ...

  4. RTMP协议分析及推流过程

    简介: 1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议. 2.RTMP协议中基本的数据单元称为消息(Message). 3.当RTMP协议在互联网中传输数据的时候, ...

  5. RTMP协议之AMF数据

    一.RTMP组成 1.RTMP包头 RTMP协议封包 由一个包头和一个包体组成,包头可以是4种长度的任意一种:12, 8, 4,  1 byte(s).完整的RTMP包头应该是12bytes,包含了时 ...

  6. (转)RTMP协议从入门到放弃

    转载自:  http://blog.csdn.net/shangmingyang/article/details/50837852 RTMP协议是Real Time Message Protocol( ...

  7. 直播推流实现RTMP协议的一些注意事项

    018年8月4日第三次更新,详细介绍了RTMP协议与遇到的坑,另外纯Java重写了RTMP协议,做了个Android 推流项目,包含安卓相机采集,编码和RTMP推流,上传到github了. 项目地址: ...

  8. RTMP协议从入门到放弃

    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing) ...

  9. RTMP协议中文翻译(首发)(转)

    Adobe公司的实时消息传输协议 摘要 此备忘录描述了 Adobe公司的实时消息传输协议(RTMP),此协议从属于应用层,被设计用来在适合的传输协议(如TCP)上复用和打包多媒体传输流(如音频.视频和 ...

最新文章

  1. jenkins部署web项目
  2. Linux系统设置定时任务
  3. win10系统如何安装iis信息服务器,win10系统安装iis服务功能的具体方法【图文教程】...
  4. python是不是特别垃圾-python垃圾回收机制
  5. unity 弹出式菜单_Java Swing JMenu和JPopupMenu:菜单和弹出式菜单
  6. 剑桥大学中国学联学术部文章
  7. 【转】路由转发过程的IP及MAC地址变化
  8. echarts地图json实现
  9. 防范因编写代码产生的系统漏洞
  10. LC 数组与字符串 - 两数之和
  11. ROS笔记(24) Amcl
  12. Eclipse创建资源文件
  13. Oracle Database 11g 数据库普通用户登录时提示 ORA-28002: the password will expire within 5 days
  14. getgrgid()函数
  15. OpenGL基础1:最简单的OpenGL例子
  16. 轻量级的实现复制文本到剪贴板功能的 js
  17. 杨中科:我的大学生活 转载
  18. MLX90614修改地址
  19. 举例mysql中group_concat()函数使用
  20. Simulink高级应用—— Matlab Function中共享或使用全局变量或全局数据

热门文章

  1. 关于p标签去除默认样式问题
  2. tensorflow 按维度相加_女司机按男司机喇叭,男司机要灭她全家_影视
  3. Framework7特色的HTML框架WebApp开源前端框架
  4. list_for_each,list_for_each_entry和list_for_each_entry_safe
  5. (C++)输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
  6. mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例
  7. 【随手记录】git 克隆项目中时出现fatal: unable to access ‘https://github 类错误
  8. js判断手机是否安装app,有就打开app,没有就跳下载页
  9. 服务器渲染技术-JSP
  10. Kotlin okhttp3 HttpClient