从流程上对rtmp协议经行总结_can not support cmd onbwdone,物联网嵌入式开发技术类校招面试题汇总

54 阅读4分钟

 

复杂握手:

        作用:说明是明文还是密文。如果使用的是明文(0X03),同时代表当前使用的rtmp协议的版本号。如果是密文,该位为0x06

3、C1: C—>S

4、S1: S—>C

        名称:C1 & S1

        长度:1536字节

简单握手:

        作用:

        包结构:

          

       time(4字节)+zero(4字节)+ random data(1528字节)

        Time(4字节):这个字段包含一个timestamp,用于本终端发送的所有后续块的时间起点。这个值可以是0,或者一些任意值。要同步多个块流,终端可以发送其他块流当前的timestamp的值,以此让当前流跟要同步的流保持时间上的同步。

        Zero (4个字节):这个字段必须都是0。如果不是0,代表要使用complex handshack。

        Random data (1528个字节):这个字段可以包含任意值。终端需要区分出响应来自它发起的握手还是对端发起的握手,这个数据应该发送一些足够随机的数。这个不需要对随机数进行加密保护,也不需要动态值。

复杂握手:

**作用:**用于验证服务器端或者client端的有效性。

包结构:

        time(4字节)+version(4字节)+key(764字节)+digest(764字节)。总共1536字节

        其中,key和digest可能会交换位置,也就如下图有两种格式:schemal0&schemal1。

        客户端决定使用哪种schema方式,服务器端比较倒霉,需要将两种方式都尝试,一般是先按照schema0解析,失败则使用schema1解析。但是无论key和digest位置如何,它们的结构是不变的。

        Time(4字节):这个字段包含一个timestamp,用于本终端发送的所有后续块的时间起点。这个值可以是0,或者一些任意值。要同步多个块流,终端可以发送其他块流当前的timestamp的值,以此让当前流跟要同步的流保持时间上的同步。

        Version(4个字节):4bytes 为程序版本。C1一般是0x80000702。S1是0x04050001。貌似这个可以随意填写,但是要采用非0值跟simple handshack区分。

        Key(764个字节):

        random-data:长度由这个字段的最后4个byte决定,即761-764

        key-data:128个字节。Key字段对应C1和S1有不同的算法,这个需要注意。后面会详细解释。发送端(C1)中的Key应该是随机的,接收端(S1)的key需要按照发送端的key去计算然后返回给发送端。

        random-data:(764-offset-128-4)个字节

        key_offset:4字节, 最后4字节定义了key的offset(相对于KeyBlock开头而言,相当于第一个random_data的长度)

        Digest(764个字节):

        offset:4字节, 开头4字节定义了digest的offset(相对于DigestBlock的第5字节而言,offset=3表示digestBlock[7~38]为digest,【4-6】即为第一个random_data)

        random-data:长度由这个字段起始的4个byte决定

        digest-data:32个字节。Digest字段对应C1和S1有不同的算法,这个需要注意。后面会详细解释。

        random-data:(764-4-offset-32)个字节

算法:

       C1的key为128bytes随机数。C1_32bytes_digest= HMACsha256(P1+P2, 1504, FPKey, 30) ,其中P1为digest之前的部分,P2为digest之后的部分,P1+P2是将这两部分拷贝到新的数组,共1536-32长度。S1的key根据 C1的key算出来。

        S1的digest算法同C1。注意,必须先计算S1的key,因为key变化后digest也重新计算

 

5、C2:    c—>s

6、S2:    s—>c

        名称:C2 & S2

        长度:1536字节

简单握手:

        作用:基本是C1&S1的副本

        包结构:

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取