小白入门音视频第十一天

1.RTMP

1.1 简介

        RTMP 是 Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。

        RTMP 协议是应用层协议,是要靠底层可靠的传输层协议(通常是 TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建立完成后,RTMP 协议也要客户端和服务器通过“RTMP 握手”来建立基于传输层链接之上的 RTMP Connection 链接,在 Connection 链接上会传输一些控制信息。

       RTMP 协议传输时会对数据(直播流,推本地视频文件)做自己的格式(Message/Chunk),这种格式的消息我们称之为 RTMP Message,而实际传输的时候为了更好地实现多路复用、分包和信息的公平性,发送端会把 Message 划分为带有 Message ID 的 Chunk,每个 Chunk 可能是一个单独的 Message,也可能是 Message 的一部分,在接受端会根据 chunk 中包含的 data 的长度,message id 和 message 的长度把 chunk 还原成完整的 Message,从而实现信息的收发。

1.2 Message

        这里的 Message 是指满足该协议格式的、可以切分成 Chunk 发送的消息,消息包含的字段如下:

  • Timestamp(时间戳):消息的时间戳,4 个字节
  • Length(长度):是指 Message Payload(消息负载)即音视频等信息的数据的长度,3 个字节
  • TypeId(类型 Id):消息的类型 Id,1 个字节
  • Message Stream ID(消息的流 ID):每个消息的唯一标识,划分成 Chunk 和还原 Chunk 为 Message 的时候都是根据这个 ID 来辨识是否是同一个消息的 Chunk 的,4 个字节,并且以小端格式(little-endian)存储

1.3 Chunk

       Chunk的格式由 Basic Header(基本的头部信息)包含了 chunk stream ID(流通道 Id)和 chunk type(chunk 的类型)构成

1.4 运行过程

        RTMP 协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接NetConnection);第二步,建立一个网络流NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。

他们的关系如下图所示:

1)握手(HandShake)   

一个 RTMP 连接以握手开始,双方分别发送大小固定的三个数据块

  1. 握手开始于客户端发送 C0、C1 块。服务器收到 C0 或 C1 后发送 S0 和 S1。
  2. 当客户端收齐 S0 和 S1 后,开始发送 C2。当服务器收齐 C0 和 C1 后,开始发送 S2。
  3. 当客户端和服务器分别收到 S2 和 C2 后,握手完成。

2) 建立网络连接(NetConnection

  1. 客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。
  2. 服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。
  3. 服务器发送设置带宽()协议消息到客户端。
  4. 客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。
  5. 服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。
  6. 服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。

3)建立网络流(NetStream)

1.客户端发送命令消息中的“创建流”(createStream)命令到服务器端。 

2.服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。

 

4)播放(Play)

1.客户端发送命令消息中的“播放”(play)命令到服务器。

2.接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。

3.服务器发送用户控制消息中的“streambegin”,告知客户端流 ID。

4.播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start &

NetStream.Play.reset,告知客户端“播放”命令执行成功。

5.在此之后服务器发送客户端要播放的音频和视频数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蔚蓝i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值