6月7号日报内容

siyuan 2024-06-09 11:42:56 +08:00
parent 72da421ae9
commit 19a376fcef

@ -34,4 +34,71 @@ RTMP可以在本身的基础上添加自定义的消息类型和控制命令来
2.2 RTMP数据块Chunk
数据块是RTMP协议传输的基本单位用与客户端和服务端之间传递数据单元。在传输的过程中·数据单元会被分成多个数据块以便有效的利用网络带宽减少网络延迟提高实时性每个RTMP数据块包含下面的部分。
- 块头
块头包含了块类型、块长度、时间戳、流ID等信息。块头的长度块类型和所包含的字段
- 负载
实际的音视频数据片段或者控制信息。
根据格式类型,可分为四种格式,分别为:
- 类型0包含了完整的块头信息用于传输一个新的数据单元。适用于新消息
- 类型1相比类型0省略了消息流ID适用于同一流的后续消息
- 类型2相比类型1省略了消息长度和消息类型ID适用同一流的同类型消息
- 类型3没有块头表示与上一个数据块完全相同仅负载部分内容不同
2.3 RTMP流控制和命令消息
RTMP支持多种流控制和命令消息用于实现流媒体播放、暂停、拖动等功能流控制消息用于控制数据流的传输包括数据流的处理调节流传输速度和同步视频等。下面是常见的命令消息。
- connect客户端想服务端发起请求参数应包含应用名称、版本、支持的功能等等
- createStream客户端创建一个新的流
- deleteStream客户端删除一个流
- closeStream客户端关闭一个流
- play客户端请求播放流参数应包含流名称、开始时间、结束时间、是否本地播放等。
- pause::客户端请求暂停或者恢复播放
- seek客户端请求跳转到特定时间点
- publish客户端向服务端发布一个流用于直播参数一般包含流名称
- onStatus服务端向客户端发送状态信息如播放开始、播放结束等。
流控制和命令消息通过RTMP的控制流默认为流ID为0的流进行传输确保此消息的优先级高于音视频数据。
2.4 握手
一个RTMP的connection由握手开始RTMP的握手是由三个固定长度的块组成而不是向其他协议一样带有报文的可变长度块。首先客户端会向发送C0、C1、C2按序发送的三个Chunk服务端向客户端发送S0、S1、S2按序发送的三个Chunk,才能握手成功。以下是握手顺序
- 客户端要等收到S1之后才能发送C2
- 客户端要等收到S2之后才能发送其他信息例如命令消息和音视频数据
- 服务端要等到收到C0之后发送S1
- 服务端必须等到收到C1之后才能发送S2
- 服务端必须等到收到C2之后才能发送其他信息例如命令消息和音视频数据
2.5 建立连接 NetConnection和从参数交换
在进行上诉的握手之后,客户端和服务端还要建立一个连接,用于音视频数据的传输和播放,以下是建立连接的主要流程
- 发送Connect命令其中参数参数应包含应用名称、版本、支持的功能等等。
- 服务端响应当服务端接受到Connect命令之后会进行验证并返回一个“result”or“error”的响应消息。响应消息会包含一个事务ID用于客户端和服务端之间的消息匹配还会包含服务器的相关信息。
- 交换控制消息在成功的建立连接之后客户端和服务端可以相互发送控制消息如Window Acknowledgement Size窗口大小设置Set Peer Bandwidth对等带宽
- 创建流:客户端在、建立连接后需要创建一个或者多个流,用于传输音频、视频或者数据。
在经过以上的步骤客户端和服务器可以开始进行音视频数据的传输和播放目前只是初步了解RTMP的流程后续会对每一快内容进行深入以填补RTMP知识体系
#未完成的任务
还没有完全的观看SDserver项目的代码没有对项目有一个非常清楚的认知目前就知道SDK相关的内容。