RTMP协议抓包详解
2015-07-09 10:21
232 查看
Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。 我们公司的平台都是采用的这个协议进行的音视频的播放
RTMP协议是一个基于TCP的高层协议族(所以wireshark抓包的时候应该选择tcp进行抓包)
在RTMP协议中信令和媒体数据都称之为Message,在网络中传输这些Message,为了区分它们肯定是要加一个Message head的,所以RTMP协议也有一个Message head,还有一个问题因为RTMP协议是基于TCP的,由于TCP的包长度是有限制的(一般来说不超过1500个字节),而RTMP的Message长度是有可能很大的,像一个视频帧的包可能会有几十甚至几千K,这个问题就必然有一个分片的问题,在RTMP协议中对应的说法就是chunk,每一个Message + head都是由一个和多个chunk组成的。让我们来结合实际例子来看一下 :9see
这些都是头信息,是用来说明这断data从什么点开始播放用的
真正的音视频播放在data里面
粗略带过。现在从握手开始讲解
握手返回的签名
依次解释一下
574-发送 rtmp_connect 命令
576 服务器返回服务器带宽信息,本地所需带宽信息,流开始标记,服务器返回连接成功消息 "NetConnection.Connect.Success"
577 告诉服务器本带宽信息
579 设置缓冲区
578发送创建流请求
581 服务器返回创建流成功
584 发送播放文件消息 rtmp_play
AUDIOdata 解析
再来解释下一下这个09后面的27
27(16)=0010 0111(2)
解读就是
0010
0111 代表(7)也就是H.264 代表视频采用H.264编码 这个编码对应的自己查吧~~
那么,
问题1.音频是怎么跟视频对齐的呢?
问题2. 如何根据这些数据来查我们视频的相关信息呢?
RTMP的包头上有几个参数,
timestamp delta 直译--数据轴三角洲 就是这段data 所播放的时间
tunestamp 时间轴
视频数据 音频数据
再看看一个参数 body size =1221大小知道了,时间知道,所以码率就可以算出来了
RTMP协议是一个基于TCP的高层协议族(所以wireshark抓包的时候应该选择tcp进行抓包)
在RTMP协议中信令和媒体数据都称之为Message,在网络中传输这些Message,为了区分它们肯定是要加一个Message head的,所以RTMP协议也有一个Message head,还有一个问题因为RTMP协议是基于TCP的,由于TCP的包长度是有限制的(一般来说不超过1500个字节),而RTMP的Message长度是有可能很大的,像一个视频帧的包可能会有几十甚至几千K,这个问题就必然有一个分片的问题,在RTMP协议中对应的说法就是chunk,每一个Message + head都是由一个和多个chunk组成的。让我们来结合实际例子来看一下 :9see
这些都是头信息,是用来说明这断data从什么点开始播放用的
真正的音视频播放在data里面
粗略带过。现在从握手开始讲解
握手流程:
握手返回的签名
客户和服务器通信
依次解释一下
574-发送 rtmp_connect 命令
576 服务器返回服务器带宽信息,本地所需带宽信息,流开始标记,服务器返回连接成功消息 "NetConnection.Connect.Success"
577 告诉服务器本带宽信息
579 设置缓冲区
578发送创建流请求
581 服务器返回创建流成功
584 发送播放文件消息 rtmp_play
AUDIOdata 解析
再来解释下一下这个09后面的27
27(16)=0010 0111(2)
解读就是
0010
0111 代表(7)也就是H.264 代表视频采用H.264编码 这个编码对应的自己查吧~~
那么,
问题1.音频是怎么跟视频对齐的呢?
问题2. 如何根据这些数据来查我们视频的相关信息呢?
RTMP的包头上有几个参数,
timestamp delta 直译--数据轴三角洲 就是这段data 所播放的时间
tunestamp 时间轴
视频数据 音频数据
再看看一个参数 body size =1221大小知道了,时间知道,所以码率就可以算出来了
相关文章推荐
- 查看Android系统给APP分配的最大堆栈
- clone DEMO(be aware of list mutability)
- 实现第三方锁屏
- Number of 1 Bits
- struct与class的区别
- VS2013 GDI+显示jpg
- [LeetCode][Java] Roman to Integer
- Redis 的数据结构
- [转载]在Vmware ESXI中安装群晖Synology DSM 5.0 (4528)
- 【Seajs源码分析】3. 工具方法2
- 流媒体协议地址获取 rtmp
- UML时序图---添加用户
- POJ 2187 Beauty Contest(凸包-Graham扫描法)
- C语言指针初探
- linux中用debugfs调试
- Eclipse开发JAVA程序
- 7月7日全球域名商(国际域名)解析量排行榜TOP20
- 算法复习之希尔排序
- Android入门(40)——第二章 使用LogCat方式调试程序
- 在Android Studio 和 Eclipse 的 git 插件操作 "代码提交"以及"代码冲突"