rtmp信令交互过程分析四-发布(publish)

概述

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

1、C->S : releaseStream、FCPublish、createStream

  • releaseStream:释放stream,这一步的作用是通知服务端释放对应的stream,以便接下来重新创建stream。
  • FCPublish
  • createStream

2、S->C : _result

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

3、C->S : publish

客户端向服务端请求publish

4、C->S : Set Chunk Size

客户端向服务端指定Chunk的大小

5、S->C : onStatus

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

举例

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

C->S

AMF0 Command releaseStream(‘stream01?user=aj001&token=tk123456’)

RTMP Header
    00.. .... = Format: 0
    ..00 0011 = Chunk Stream ID: 3
    Timestamp: 0
    Body size: 63
    Type ID: AMF0 Command (0x14)
    Stream ID: 0
RTMP Body
    String 'releaseStream'
    Number 0
        AMF0 type: Number (0x00)
        Number: 0
    Null
        AMF0 type: Null (0x05)
    String 'stream01?user=aj001&token=tk123456'

AMF0 Command FCPublish(‘stream01?user=aj001&token=tk123456’)

RTMP Header
    00.. .... = Format: 0
    ..00 0011 = Chunk Stream ID: 3
    Timestamp: 0
    Body size: 59
    Type ID: AMF0 Command (0x14)
    Stream ID: 0
RTMP Body
    String 'FCPublish'
    Number 0
    Null
    String 'stream01?user=aj001&token=tk123456'

AMF0 Command createStream()

RTMP Header
    00.. .... = Format: 0
    ..00 0011 = Chunk Stream ID: 3
    Timestamp: 0
    Body size: 25
    Type ID: AMF0 Command (0x14)
    Stream ID: 0
RTMP Body
    String 'createStream'
    Number 2
    Null
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 publish(‘stream01?user=aj001&token=tk123456’)

RTMP Header
    00.. .... = Format: 0
    ..00 0011 = Chunk Stream ID: 3
    Timestamp: 0
    Body size: 64
    Type ID: AMF0 Command (0x14)
    Stream ID: 1
RTMP Body
    String 'publish'
    Number 0
    Null
    String 'stream01?user=aj001&token=tk123456'
    String 'live'
C->S

Set Chunk Size 4000

RTMP Header
    00.. .... = Format: 0
    ..00 0010 = Chunk Stream ID: 2
    Timestamp: 0
    Body size: 4
    Type ID: Set Chunk Size (0x01)
    Stream ID: 0
RTMP Body
    Chunk size: 4000
S->C

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

RTMP Header
    00.. .... = Format: 0
    ..00 0101 = Chunk Stream ID: 5
    Timestamp: 0
    Body size: 105
    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.Publish.Start'
        Property 'description' String 'Start publishing'
        End Of Object Marker