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. 如果要存ip地址,用什么数据类型比较好?
  2. 常用巡检语句(oracle)
  3. 《Linux系统初讲》学习总结(一)
  4. .net oracle 参数化,.NET参数化Oracle查询参数
  5. Kotlin入门(13)类成员的众生相
  6. Git使用总结-so easy
  7. myeclipse 运行servlet
  8. Java培训班学费一般多少?Java自学成功率是多少?
  9. IE浏览器起始页通过注册表修改
  10. hping 详解_hping3 使用详解
  11. cad尺寸标注快捷键_CAD中还能这样快速标注尺寸?怪不得同事天天准时下班
  12. 【微信页面】移动端微信页面禁止字体放大
  13. 深度解密微信疯读狂加粉的伎俩
  14. 饿了么小程序容器首屏秒开优化实践
  15. Linux 打开文件显示: No such file or directory
  16. bios 刷 灵耀14_华硕灵耀Deluxe14笔记本装win10及bios设置教程(uefi+gpt)
  17. Bootstrap 导航元素( tab导航)标签页
  18. 历史笔记记录之 MySQL DBA 面试题目 答疑记
  19. Mysql访问日志记录
  20. SQLSERVER 2000 以及SQL Server 2005的版本号

热门文章

  1. 网页调用本地播放器的代码支持ie,chroome, 火狐不支持
  2. ios--用证书进行真机调试(转)
  3. 2011清华MBA备考全记录
  4. Re-Located Record in Grid
  5. Django REST framework API 指南(12):验证器
  6. python模块导入
  7. JavaScript检测之basevalidate.js
  8. MySQL服务启动脚本
  9. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
  10. 在Spring.Net中对于NHibernate.Caches.Prevalence的使用