流媒体协议--RTMP

RTMP(Real Time Messaging Protocol)是一个应用层协议,主要用于在Flash player和服务器之间传输视频、音频、控制命令等内容。
该协议的突出优点是: 低延时。
RTMP基于TCP(tcp默认使用端口1935)

RTMP播放基本流程

  1. TCP三次握手
  2. RTMP握手
  3. connect连接
  4. createStream创建流
  5. play 播放流
  6. deleteStream删除流
TCP握手过程

流顺序: c–客户端 s–服务端
c – s
s–c
c–s
在这里插入图片描述

RTMP握手过程

c–s
s–c
c–s在这里插入图片描述在这里插入图片描述
一般的发送顺序如下:
1.客户端向服务端同时发送C0+C1
2. 服务端确认版本号后,向客户端同时发送S0+S1+S2
3. 客户端接收到S2后发送C2到服务端

C0: 客户端版本
C1: 服务器版本
当前版本为3

在这里插入图片描述
C1 和 S1数据包长度为1536字节,C2 和 S2 数据包长度都是 1536 字节,基本就是 S1 和 C1 的副本。

connect连接

c–s:
在这里插入图片描述

不同的 Application Instance可根据功能等进行区分,比如直播可以用live来表示,点播回放可以用vod来表示
如 rtmp://192.168.152.21/lrun/s1
run: 为Application Instance
s1: 为房间号

createStream 创建流

c–s
s–c
在这里插入图片描述
服务器返回的stream ID为1,为后续的视频或者音频ID
在这里插入图片描述
createStream命令用于创建逻辑通道,该通道用于传输视频、音频、metadata,在服务器的响应报文中会返回 ,用于唯一的标示该Stream

play 播放命令

客户端发送play命令来播放指定流。开始传输音视频数据。
如果发送play命令后想要立即播放,需要清空play队列中的其它流,并将reset置为true

deleteStream删除流

客户端发送删除流,指定Stream ID, 服务器不对次消息回应

RTMP数据组成

发送:
在这里插入图片描述
接收:
在这里插入图片描述
组成:

在这里插入图片描述

在这里插入图片描述
Messgae消息主要分为三类: 协议控制消息、数据消息、命令消息等
协议控制消息: Type ID = 1 2 3 5 6
数据消息: Message Type ID = 8 9 18
8: Audio 音频数据
9: Video 视频数据
18: Metadata 包括音视频编码、视频宽高等信息。
命令消息:Message Type ID =17,20

Message StreamID是音视频流的唯一ID, 一路流如果既有音频包又有视频包,那么这路流音频包的StreamID和他视频包的StreamID相同

默认的Chunk Size是128字节, 实际发送多为一个Message包含一个Chunk

RTMP消息优先级:在RTMP中,消息(Message)主要分为两大类:控制消息和数据消息。分优先级,优先级高的先行。优先级低的不能阻塞优先级高的。
在这里插入图片描述

相关推荐

  1. 网络媒体协议——RTMP

    2024-04-21 23:24:07       29 阅读
  2. 一文详解RTSP协议媒体传输控制协议

    2024-04-21 23:24:07       56 阅读
  3. 网络媒体协议——HLS协议

    2024-04-21 23:24:07       35 阅读
  4. Nginx媒体服务器RTMP直播同步录像

    2024-04-21 23:24:07       34 阅读
  5. 媒体传输开源协议SRT

    2024-04-21 23:24:07       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 23:24:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 23:24:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 23:24:07       87 阅读
  4. Python语言-面向对象

    2024-04-21 23:24:07       96 阅读

热门阅读

  1. 什么是显卡服务器?

    2024-04-21 23:24:07       34 阅读
  2. Linux 中解压不同的压缩文件用到不同的命令详解

    2024-04-21 23:24:07       33 阅读
  3. 计算机网络(第7版谢希仁)笔记

    2024-04-21 23:24:07       29 阅读
  4. 蓝桥杯刷题-游戏

    2024-04-21 23:24:07       31 阅读
  5. docker下debian8编译安装nginx+php

    2024-04-21 23:24:07       30 阅读
  6. RESTful API构建 web 应用程序

    2024-04-21 23:24:07       39 阅读
  7. 面试经典150题——H指数

    2024-04-21 23:24:07       38 阅读
  8. ubuntu,curl(56):openssl ssl_read:error:0A000126:报错

    2024-04-21 23:24:07       39 阅读