rtmp信令交互过程分析五-播放(play)

概述

连接成功之后由客户端选择publish还是play,这里讲的是play。

1、C->S : createStream

2、S->C : _result

服务端对客户端createStream请求的反馈

3、C->S : getStreamLength、play、Set Buffer Length

  • getStreamLength:获取stream的时间长度
  • play:请求播放
  • Set Buffer Length:

4、S->C : Stream Begin 1

5、S->C : onStatus

服务端对客户端play请求的反馈

6、S->C : |RtmpSampleAccess

举例

以下为使用wireshark抓包的部分内容:

C->S

AMF0 Command createStream()

Response to this call in frame: 940
RTMP Header
    01.. .... = Format: 1
    ..00 0011 = Chunk Stream ID: 3
    Timestamp delta: 0
    Timestamp: 0 (calculated)
    Body size: 25
    Type ID: AMF0 Command (0x14)
RTMP Body
    String 'createStream'
    Number 2
        AMF0 type: Number (0x00)
        Number: 2
    Null
        AMF0 type: Null (0x05)
S->C

AMF0 Command _result()

RTMP Header
    00.. .... = Format: 0
    ..00 0011 = Chunk Stream ID: 3
    Timestamp: 0
    Body size: 29
    Type ID: AMF0 Command (0x14)
    Stream ID: 0
RTMP Body
    String '_result'
    Number 2
    Null
    Number 1
C->S

AMF0 Command getStreamLength()

RTMP Header
    00.. .... = Format: 0
    ..00 1000 = Chunk Stream ID: 8
    Timestamp: 0
    Body size: 39
    Type ID: AMF0 Command (0x14)
    Stream ID: 0
RTMP Body
    String 'getStreamLength'
    Number 3
    Null
    String 'stream01'

AMF0 Command play(‘stream01’)

RTMP Header
    00.. .... = Format: 0
    ..00 1000 = Chunk Stream ID: 8
    Timestamp: 0
    Body size: 37
    Type ID: AMF0 Command (0x14)
    Stream ID: 1
RTMP Body
    String 'play'
    Number 4
    Null
    String 'stream01'
    Number -2000

User Control Message Set Buffer Length 1,3000ms

RTMP Header
    01.. .... = Format: 1
    ..00 0010 = Chunk Stream ID: 2
    Timestamp delta: 1
    Timestamp: 1 (calculated)
    Body size: 10
    Type ID: User Control Message (0x04)
RTMP Body
    Event type: Set Buffer Length (3)
S->C

User Control Message Stream Begin 1

RTMP Header
    00.. .... = Format: 0
    ..00 0010 = Chunk Stream ID: 2
    Timestamp: 0
    Body size: 6
    Type ID: User Control Message (0x04)
    Stream ID: 0
RTMP Body
    Event type: Stream Begin (0)

AMF0 Command onStatus(‘NetStream.Play.Start’)

RTMP Header
    00.. .... = Format: 0
    ..00 0101 = Chunk Stream ID: 5
    Timestamp: 0
    Body size: 96
    Type ID: AMF0 Command (0x14)
    Stream ID: 1
RTMP Body
    String 'onStatus'
    Number 0
    Null
    Object (3 items)
        AMF0 type: Object (0x03)
        Property 'level' String 'status'
        Property 'code' String 'NetStream.Play.Start'
        Property 'description' String 'Start live'
        End Of Object Marker

AMF0 Data |RtmpSampleAccess()

RTMP Header
    00.. .... = Format: 0
    ..00 0101 = Chunk Stream ID: 5
    Timestamp: 0
    Body size: 24
    Type ID: AMF0 Data (0x12)
    Stream ID: 1
RTMP Body
    String '|RtmpSampleAccess'
    Boolean true
    Boolean true