2019独角兽企业重金招聘Python工程师标准>>>

Chunk basic header

chunk basic head的长度为1~3个字节,具体长度主要是依赖chunk stream ID的长度,所谓chunk stream IDflash server用来管理连接的客户端的信令交互的标识,协议最大支持65597个streamID 从3~65599。ID: 0,1为协议保留,0代表ID是64~319(第二个byte + 64);1代表chunk stream ID为64~65599((第三个byte)* 256 + 第二个byte + 64)(小端表示);2代表该消息为低层的协议(在RTMP协议中控制信令的chunk stream ID都是2。3~63的chunk stream ID就是该byte的值。没有附加的字段来标识chunk stream streamID。在这里要指出的是虽然RTMP的chunk stream ID理论是可以达到65599,但是目前使用的chunk stream ID很少,2~7都是约定的,8是用来传输publish play等命令,其他的chunk stream ID根据抓包可以看到如何使用。

所以目前chunk basic head的长度一般为1个字节。这一个字节由两部分组成

+++++++++++++++++++

+fmt    +  cs id              +

+++++++++++++++++++

fmt占两个bit用来标识紧跟其后的chunk Msg Header的长度,cs id占六个bit。

两位的fmt取值为 0~3,分别代表的意义如下:

case 0:chunk Msg Header长度为11;

case 1:chunk Msg Header长度为7;

case 2:chunk Msg Header长度为3;

case 3:chunk Msg Header长度为0;

所以 只有一个字节的chunk basic header取值为 chunk basic header = (fmt << 6) | (cs id).

chunk stream ID作用:

例如:如果发送64KB字节的数据到服务器,这些数据被分割为多个chunks,其中每个chunk的默认大小为128bits,服务器根据chunk stream ID识别数据。

For example you may want to send a 64KB data block to the server. This data block is splitted into small pieces (chunks), sent to the server

and reassembled once received in order to recompose the original data block. The default size of a chunk is 128 bits (it can be modified sending a special low level protocol chunk, reserved csid 2, type 1).

As you can send several streams at the same time, client and server have to identify each chunk stream exchanged.

The use of csid aims to solve a performance issue. As I wrote in my last post, csid may be stored in only one byte where sid is always stored in 3 bytes. Multiplied by the number of chunks used to send a stream, it would represent useless extra bytes consumption (in my example 64KB data

exchange may use an extra 1KB load if you consider sid would have to be sent instead of using a csid between 3 and 63. Saved 1.5% of trafic).

参考<http://osflash.osflash.narkive.com/xm6iDh9S/rtmp-how-to-associate-responses-and-requests>

chunk stream ID 和 message type对应关系

Chunk Stream ID

level

example

2

low-level protocol control messages and commands.

message type 1,2,3,4,5,6:

Window Acknowledgement Size (5)

User Control Messages (4)

3

connect(20/17)

createStream(20/17)

deleteStream(20/17)

4

audio data(8)

5

onStatus(NetStream.Publish.Start)(20/17)

onStatus(NetStream.Play.Start)(20/17)

onStatus(NetStream.Unpublish.Success)(20/17)

6

audio data(8)/video data(9)

7

video data(9)

8

publish(20/17)

play(20/17)

在RTMP协议中, 以下内容通过stream ID 0chunk stream ID 2来发送:

  • 协议控制信息(protocol control messages)
    message type IDs 为 1, 2, 3, 5, and 6
  • 用户控制信息(User Control messages)
    message type ID等于 4

转载于:https://my.oschina.net/u/2326611/blog/1502804

rtmp Chunk stream ID 说明相关推荐

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

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

  2. 05 RTMP Chunk Stream

    RTMP块流 本节指定实时消息传递协议区块流(RTMP区块流).它为更高级的多媒体流协议提供多路复用和分组服务. 虽然RTMP区块流设计用于与实时消息协议(第6节)配合使用,但它可以处理发送消息流的任 ...

  3. java.io.EOFException: Chunk stream does not exist at page: 0

    http://www.cnblogs.com/kaka/archive/2012/03/15/2398215.html ActiveMQ 启动异常 在按照 <ActiveMQ in Action ...

  4. 【kubernetes】http proxy error stream error stream ID 3 INTERNAL_ERROR

    1.背景 当你重启kubernetes的时候,就会报错这个 (base) lcc@lcc kubernetes$ kubectl proxy --port=8080 Starting to serve ...

  5. 【Siddhi】DefinitionNotExistException: Stream with stream ID xxx has not been defined

    文章目录 1.背景 1.背景 当你定义一个stream的时候,但是下面获取的时候,如果写错了名字,就会报错这个,案例如下 @Testpublic void mainTest2() throws Int ...

  6. 视频技术详解:RTMP H5 直播流技术解析

    本文聚焦 RTMP 协议的最精华的内容,接进行实际操作 Buffer 的练习和协议的学习. RTMP 是什么 RTMP 全称即是 Real-Time Messaging Protocol.顾名思义就是 ...

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

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

  8. (转)rtmp协议简单解析以及用其发送h264的flv文件

    Adobe公司太坑人了,官方文档公布的信息根本就不全,如果只按照他上面的写的话,是没法用的.按照文档上面的流程,server和client连接之后首先要进行握手,握手成功之后进行一些交互,其实就是交互 ...

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

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

最新文章

  1. JVM虚拟机参数配置官方文档
  2. Android Studio内存优化
  3. php中的$_GET全局变量,通过URL传递参数
  4. .net 考试系统人一多就断开了_2020年银行从业资格考试成绩查询入口已开放
  5. 学好python能干嘛-python都能做什么
  6. 计算机视觉与深度学习 | 基于多源传感器数据融合的动态场景SLAM研究
  7. app把信息添加到mysql_如何将数据库表中的数据添加到ListView C#Xamarin Android App
  8. visual studio 2019 HTML怎么自动生成代码_敲代码和编程适合什么样的笔记本?深度推荐...
  9. uni-app微信获取手机号,第一次解密总是失败
  10. 【小夕精选】多轮对话之对话管理(Dialog Management)
  11. 换手机的等等!什么时候能用上1000元级5G手机?中国移动公布时间表
  12. Lock应用之 读写锁
  13. 初始----python数字图像处理--:环境安装与配置
  14. 自然语言处理理论与实战
  15. mysql中dint_mysql常用操作——数据库和表的操作1(共2页)
  16. zeppelin配置hive教程
  17. 含泪整理最优质草食动物unity3d模型素材,你想要的这里都有
  18. 人工智能的语义学基础
  19. OCM实验-备份恢复-控制文件
  20. SP服务商Java短信平台的软件模型和实现(吴宏杰,赵雷,杨季文,苏州大学计算机科学和技术学院)...

热门文章

  1. iOS 隐藏导航栏整个视图上移闪屏问题
  2. JavaScript常用代码
  3. WPF TreeView HierarchicalDataTemplate
  4. 死机、蓝屏、系统运行过慢
  5. MongoDB的查询整理
  6. puppet企业架构部署
  7. php autoload机制学习
  8. 实训C++语言设计——Date日期系统实现
  9. 详细聊聊k8s deployment的滚动更新(二)
  10. [Contest20180415]看无可看