精华内容
下载资源
问答
  • RTMP协议

    2021-08-13 08:37:31
    RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP...

    RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP与HTTP一样,都属于TCP/IP四层模型的应用层。(百度百科)

    协议握手的过程

    Client 发送 C0 和 C1 消息来启动握手过程。客户端必须接收到 S1 消息,然后发送 C2 消息。客户端必须接收到S2 消息,然后发送其他数据。服务端必须接收到 C0 或者 C1 消息,然后发送 S0 和 S1 消息。服务端必须接收到 C2 消息,然后发送其他数据。

    	+-------------+                           +-------------+
        |    Client   |       TCP/IP Network      |    Server   |
        +-------------+            |              +-------------+
              |                    |                     |
        Uninitialized              |               Uninitialized
              |          C0        |                     |
              |------------------->|         C0          |
              |                    |-------------------->|
              |          C1        |                     |
              |------------------->|         S0          |
              |                    |<--------------------|
              |                    |         S1          |
         Version sent              |<--------------------|
              |          S0        |                     |
              |<-------------------|                     |
              |          S1        |                     |
              |<-------------------|                Version sent
              |                    |         C1          |
              |                    |-------------------->|
              |          C2        |                     |
              |------------------->|         S2          |
              |                    |<--------------------|
           Ack sent                |                  Ack Sent
              |          S2        |                     |
              |<-------------------|                     |
              |                    |         C2          |
              |                    |-------------------->|
         Handshake Done            |               Handshake Done
              |                    |                     |
                  Pictorial Representation of Handshake
    

    请添加图片描述
    抓包分析一下,RTMP是在TCP协议基础之上的,首先要进行TCP握手,在实际中先会发送C0+C1,然后服务端响应S0+S1+S2,然后客户端再发送C2。
    通过wireshark了解到,RTMP应用层协议1537字节,版本号一个字节,数据占用1536字节。

    请添加图片描述

    RTMP连接的建立

    论文中是这样描述的:
    请添加图片描述
    实际上通过协议分析,有出入。请添加图片描述
    省略了客户端向服务端发送Peer bandwidth

    协议中RTMP流的创建

    论文中定义创建如下,但是在Abobe实现中,通过抓包工具看出,并非如此。
    请添加图片描述
    在这里插入图片描述
    请添加图片描述

    推送RTMP流

    进行四步操作:
    1.publish 告诉服务端我要进行推流了。
    2.onStatus 服务端说你开始吧。
    3.客户端发送MetaData:告诉服务端我推送的流媒体的信息。
    请添加图片描述
    4.发送Video/Audio Data

    请添加图片描述

    播放RTMP流

    请添加图片描述

    展开全文
  • rtmp协议

    2021-05-12 17:07:32
    播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。 1. RTMP连接都是以握手作为开始的; 2. 建立连接阶段用于建立客户端与服务器之间的“网络连接”; 3. 建立流阶段用于建立客户端...

    simple rtmp server:

    https://github.com/winlinvip/simple-rtmp-server

     

    RTMP协议:

    播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。

    1. RTMP连接都是以握手作为开始的;

    2. 建立连接阶段用于建立客户端与服务器之间的网络连接

    3. 建立流阶段用于建立客户端与服务器之间的网络流

    4. 播放阶段用于传输视音频数据。

     

    在一条TCP 连接中,包含着几条Message Stream,绝大部分情况下是Control Msg Stream Media Msg Stream

    而这些Msg Stream 由一段一段的Chunk Stream 组成,每个Chunk Stream 都带有一个Message Stream ID 以标识这个Chunk Stream 是属于哪一个Msg Stream

    设想一段用rtmp播放的视频,应该包含两条message stream,一条command,一条media;而media stream中又包含了两条chunk stream,一条video,一条audio

     

    RTMP消息:

    1. 消息是RTMP最基本的数据单元,包括消息头和消息负载:

    message type分为:

    user control message4);

    command message(20 for AMF0, 17 for AMF3)

    data message(18 for AMF015 for AMF3);

    shared object message(19 for AMF0, 16 for AMF3)

    audio message8

    video message9

    aggregate message22

     

    2. 消息负载一般被分为固定大小的chunk(默认128bytes):

    chunk basic header有三种,分别为1byte2bytes,和3bytes;根据chunk stream id的不同选择使用。

    chunk message header有四种,分别为11bytes7bytes3bytes0bytes,头里包含有stream id

    extended timstamp,当chunk message header里面的timestamp超过三字节范围时,补充使用。

     

    3. 消息分块:

     

    展开全文
  • RTMP 协议

    2020-12-04 10:21:45
    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。 RTMP协议从属于应用...

    一、概述
    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。

    RTMP协议从属于应用层,被设计用来在适合的传输协议(如TCP)上复用和打包多媒体传输流(如音频、视频和互动内容)。RTMP提供了一套全双工的可靠的多路复用消息服务,类似于TCP协议[RFC0793],用来在一对结点之间并行传输带时间戳的音频流,视频流,数据流。通常情况下,不同类型的消息会被分配不同的优先级,当网络传输能力受限时,优先级用来控制消息在网络底层的排队顺序。

    握手、消息块概念
    握手的目的是为了确认对端RTMP的Version和确认对端能互相通信。
    消息块就是消息的载体,是RTMP协议最重要的载体,这个载体是有一定格式的,如果把Client和Server端当作铁路的两个站点,
    那这个消息块就是火车,它负责运输货物。正如火车有火车头、车厢一样,消息块也有基本头,消息头和消息负载。RTMP协议当中,
    除了握手协议,其他的数据都是以消息块的方式发送的,发送一个消息时,当块大小比需要发送的消息的字节数更大时,
    一个消息块就相当于一个消息,否则消息需要分成多个消息块。


    握手
    要建立一个有效的RTMP Connection链接,首先要“握手”:客户端要向服务器发送C0,C1,C2(按序)三个chunk,服务器向客户端发送S0,S1,S2(按序)三个chunk,然后才能进行有效的信息传输。RTMP协议本身并没有规定这6个Message的具体传输顺序,但RTMP协议的实现者需要保证这几点如下:

    客户端要等收到S1之后才能发送C2

    客户端要等收到S2之后才能发送其他信息(控制信息和真实音视频等数据)

    服务端要等到收到C0之后发送S1

    服务端必须等到收到C1之后才能发送S2

    服务端必须等到收到C2之后才能发送其他信息(控制信息和真实音视频等数据)

    握手流程
    握手是一切的开始,Client和Server两个站点之前要运输货物,首先得先互相通知对方,确认铁轨是否符合火车运行,是否畅通无阻,是否能准确的运输货物到对端。
    实际的流程大概是这样的:

    Client发送带有1byte的C0和固定长度为1536byte的C1。
    Server发送S0S1S2给Client。
    Client发送C2。

     

    RTMP块流

    实时消息传递协议块流(RTMP块流)。RTMP块流作为一款高级多媒体流协议提供了流的多路复用和打包服务。RTMP块流被设计用来传输实时消息协议,它可以使用任何协议来发送消息流。每个消息都包含时间戳和有效类型标识。RTMP块流和RTMP适用于各种视听传播的应用程序,包括一对一的,和一对多的视频直播、点播服务、互动会议应用程序。

    当使用一个可靠的传输协议如TCP[RFC0793]时,RTMP块流提供了一种可以在多个流中,基于时间戳的端到端交付所有消息的方法。RTMP块流不提供任何优先级或类似形式的控制,但可以使用更高级别的协议来提供这样的优先级。

    RTMP块流不仅包含了自己的协议控制信息,同时也提供了一个更高级别的协议机制,用来嵌入用户控制信息。

     

    RMTP消息格式

    RMTP消息被分割成多个块,用来在更高的协议中支持多路复用。在消息格式时,应该包含以下字段:

    时间戳

    消息的时间戳。这个字段占用4字节。

    长度

    消息的有效长度。如果消息头不能被忽略,它应该包括长度。这个字段在块头中占用3字节。

    类型ID

    各种类型的协议控制消息的ID。这些消息使用RTMP块流协议和更高级别的协议来传输信息。所有其他类型的ID可以用在高级协议,这对于RTMP块流来说,是不透明的。事实上,RTMP块流中没有要求使用这些值作为类型;所有(无协议的)消息可能是相同的类型,或者应用程序使用这个字段来区分多个连接,而不是类型。这个字段在块头中占用1字节。

    消息流ID

    消息流ID可以是任意值。当同一个块流被复用到不同的消息流中时,可以通过消息流ID来区分它们。另外,对于RTMP块流而言,这是一个不透明值。该字段占用4字节,使用小端序。

    RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。

    消息

    消息是RTMP协议中基本的数据单元。不同种类的消息包含不同的Message Type ID,代表不同的功能。RTMP协议中一共规定了十多种消息类型,分别发挥着不同的作用。例如,Message Type ID在1-7的消息用于协议控制,这些消息一般是RTMP协议自身管理要使用的消息,用户一般情况下无需操作其中的数据。Message Type ID为8,9的消息分别用于传输音频和视频数据。Message Type ID为15-20的消息用于发送AMF编码的命令,负责用户与服务器之间的交互,比如播放,暂停等等。消息首部(Message Header)有四部分组成:标志消息类型的Message Type ID,标志消息长度的Payload Length,标识时间戳的Timestamp,标识消息所属媒体流的Stream ID。消息的报文结构如下图所示。

     

    消息块

    在网络上传输数据时,消息需要被拆分成较小的数据块,才适合在相应的网络环境上传输。RTMP协议中规定,消息在网络上传输时被拆分成消息块(Chunk)。消息块首部(Chunk Header)有三部分组成:用于标识本块的Chunk Basic Header,用于标识本块负载所属消息的Chunk Message Header,以及当时间戳溢出时才出现的Extended Timestamp。消息块的报文结构如下图所示。

     

    消息分块

    在消息被分割成几个消息块的过程中,消息负载部分(Message Body)被分割成大小固定的数据块(默认是128字节,最后一个数据块可以小于该固定长度),并在其首部加上消息块首部(Chunk Header),就组成了相应的消息块。消息分块过程如下图所示,一个大小为307字节的消息被分割成128字节的消息块(除了最后一个)。

    RTMP传输媒体数据的过程中,发送端首先把媒体数据封装成消息,然后把消息分割成消息块,最后将分割后的消息块通过TCP协议发送出去。接收端在通过TCP协议收到数据后,首先把消息块重新组合成消息,然后通过对消息进行解封装处理就可以恢复出媒体数据。

     

    而在RTMP协议中,最重要的就是流的建立,涉及到的握手协议。

    展开全文
  • plugin-rtmp the rtmp protocol plugin for...实现了RTMP协议的播放,可供rtmp协议播放器拉流播放。 插件名称 RTMP 配置 [RTMP] ListenAddr = ":1935" ChunkSize = 512 ListenAddr 代表监听的端口号 ChunkSize 分包大小
  • rtmp 协议规范 中文版

    千次下载 热门讨论 2013-11-16 20:06:29
    rtmp的协议规范,中文版的,学习RTMP协议的好资源。
  • RTMP协议详解

    2018-07-30 15:20:35
    流媒体协议:RTMP协议(中文)详解 流媒体协议:RTMP协议(中文)详解

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,002
精华内容 7,600
关键字:

rtmp协议