RTMP協(xié)議(五)命令消息

上篇我們對(duì)消息的格式和大部分的消息類型進(jìn)行了梳理,本編主要對(duì)命令消息其中的定義進(jìn)行梳理。

命令消息(Command Message) 用于在客戶端和服務(wù)器端傳輸AMF編碼的數(shù)據(jù)交換命令,客戶端或者服務(wù)端可以通過命令消息和對(duì)端通信的流完成請(qǐng)求遠(yuǎn)程方法調(diào)用(RPC)。當(dāng)消息使用 AMF0編碼時(shí),消息類型為20,使用AMF3編碼時(shí)為17

命令消息使用場景基本都是——客戶端請(qǐng)求,服務(wù)端響應(yīng)

按來源分類

命令消息在客戶端和服務(wù)端中來回傳遞,為了方便區(qū)分,我根據(jù)請(qǐng)求和響應(yīng)根據(jù)場景將兩端為區(qū)分請(qǐng)求者和響應(yīng)者者。因此,請(qǐng)求者發(fā)出的就是請(qǐng)求命令信息,響應(yīng)者發(fā)出的就是響應(yīng)命令信息。

請(qǐng)求命令信息

請(qǐng)求者通過發(fā)送請(qǐng)求命令消息到對(duì)端,命令對(duì)端根據(jù)命令名執(zhí)行遠(yuǎn)程方法調(diào)用。例如發(fā)送connect(連接)、createStream(創(chuàng)建流)、pulish(發(fā)布)、play(播放)和pause(暫停)等命令。由于其消息數(shù)據(jù)進(jìn)行了 AMF 編碼,因此下面表格通過字段展示的是請(qǐng)求命令的結(jié)構(gòu):

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令名稱,設(shè)置為指定的命令,取值為 connect、 createStream、 pulish、playpause等等
Transaction ID Number 事務(wù)ID,該命令需要響應(yīng)則有指定ID,若不需要響應(yīng)填 0 即可
Command Object Object / Null 命令對(duì)象,如果一些命令消息需要就用,否則置空即可
Others Unknow 額外的參數(shù)值或?qū)ο?,根?jù)特定的命令來配置。若不需要,則省略整個(gè)字段即可。

響應(yīng)命令信息

響應(yīng)者接收到請(qǐng)求命令消息后,會(huì)對(duì)其消息進(jìn)行解析,并做相應(yīng)的處理。根據(jù)不同命令的要求,響應(yīng)者可能需要對(duì)請(qǐng)求者的請(qǐng)求進(jìn)行響應(yīng)。因此響應(yīng)者將發(fā)送相應(yīng)命令信息來完成響應(yīng)操作。響應(yīng)消息和請(qǐng)求消息類型,都是使用 AMF 編碼,因此通過字段來表示其命令的結(jié)構(gòu):

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令名稱,取值為_result、_erroronStatus
Transaction ID Number 事務(wù)ID,響應(yīng)的目標(biāo)請(qǐng)求的事務(wù) ID
Command Object Object / Null 命令對(duì)象,如果一些命令消息需要就用,否則置空即可
Others Unknow 額外的參數(shù)值或?qū)ο?,根?jù)特定的命令來配置。如果這個(gè)是結(jié)果命令,則該字段是指定的結(jié)果;如果這個(gè)是錯(cuò)誤命令,則該字段就是錯(cuò)誤信息。

由此可見,響應(yīng)命令其實(shí)就是一個(gè)結(jié)果命令、錯(cuò)誤命令狀態(tài)命令。

小結(jié):命令消息通過Command Name進(jìn)行區(qū)分,響應(yīng)命令通過Transaction ID與請(qǐng)求命令進(jìn)行關(guān)聯(lián)。

發(fā)送命令消息的類對(duì)象

NetConnectionNetStream是命令中常用的類對(duì)象,其含義如下:

  • NetConnection:網(wǎng)絡(luò)連接,服務(wù)端和客戶端之間進(jìn)行網(wǎng)絡(luò)連接的一種高級(jí)表示形式。
  • NetStream:網(wǎng)絡(luò)流,代表了發(fā)送音頻流,視頻流,或其他相關(guān)數(shù)據(jù)的頻道。當(dāng)然還有一些像播放,暫停之類的命令,用來控制數(shù)據(jù)流。

NetConnection 命令

NetConnection(網(wǎng)絡(luò)連接)管理著客戶端和服務(wù)端之間的雙向連接,另外,它也支持遠(yuǎn)程方法的異步調(diào)用。NetConnection允許使用的命令如下:

  • connect(連接)
  • call(調(diào)用)
  • createStrem(創(chuàng)建流)
  • close(關(guān)閉)

對(duì)于NetConnection Command ,其響應(yīng)請(qǐng)求命令為結(jié)果命令(_result)和錯(cuò)誤命令(_error)。

connect 命令

客戶端發(fā)送connect命令給服務(wù)器,來獲取一個(gè)服務(wù)端應(yīng)用實(shí)例的連接(connection)。

請(qǐng)求命令結(jié)構(gòu)

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令名稱,設(shè)置為connect
Transaction ID Number 總是設(shè)置為 1
Command Object Object 具有鍵值對(duì)(name-value pairs)的命令信息對(duì)象,其結(jié)構(gòu)見表格下方的ConnectInfo
Optional User Arguments Object 任意可選信息
ConnectInfo

connect命令的命令對(duì)象(Command Object)中的鍵值對(duì)說明:

屬性(Property 類型(Type 描述(Description 范例(Example Value
app String 客戶端連接到服務(wù)端應(yīng)用的名字 live
flashver String Flash Player 版本號(hào),和 ApplicationScript getversion ()方法返回的是用一個(gè)字符串 FMSc/1.0
swfUrl String 進(jìn)行當(dāng)前連接的 SWF 文件源地址 file://C:/FlvPlayer.swf
tcUrl String 服務(wù)器 URL,具有以下格式:protocol://servername:port/ appName/appInstance rtmp://localhost:1935/ testapp/instance1
fpad Boolean 如果使用了代理就為true true or false
audioCodecs Number 表示客戶端支持的音頻編碼 SUPPORT_SND_MP3
videoCodecs Number 表示客戶端支持的視頻編碼 SUPPORT_VID_SORENSON
videoFunction Number 表示支持的特殊視頻函數(shù) SUPPORT_VID_CLIENT_SEEK
pageUrl String SWF 文件所加載的網(wǎng)頁 URL http://somehost/sample.html
objectEncoding Number AMF 編碼方法 AMF3
audioCodecs

audioCodecs(音頻編碼屬性)的可選值:原始 PCM,ADPCM,MP3,NellyMoser(5,8,11,16,22,44kHz),AAC,Speex

Codec Flag Usage Value
SUPPORT_SND_NONE Raw sound, no compression 0x0001
SUPPORT_SND_ADPCM ADPCM compression 0x0002
SUPPORT_SND_MP3 mp3 compression 0x0004
SUPPORT_SND_INTEL Not used 0x0008
SUPPORT_SND_UNUSED Not used 0x0010
SUPPORT_SND_NELLY8 NellyMoser at 8-kHz compression 0x0020
SUPPORT_SND_NELLY NellyMoser compression(5, 11, 22, and 44 kHz) 0x0040
SUPPORT_SND_G711A G711A sound compression(Flash Media Server only) 0x0080
SUPPORT_SND_G711U G711U sound compression(Flash Media Server only) 0x0100
SUPPORT_SND_NELLY16 NellyMouser at 16-kHz compression 0x0200
SUPPORT_SND_AAC Advanced audio coding (AAC) codec 0x0400
SUPPORT_SND_SPEEX Speex Audio 0x0800
SUPPORT_SND_ALL All RTMP-supported audio codecs 0x0FFF
videoCodecs

videoCodecs(視頻編碼屬性)的可選值:Sorenson,V1,On2,V2,H264

Codec Flag Usage Value
SUPPORT_VID_UNUSED Obsolete value 0x0001
SUPPORT_VID_JPEG Obsolete value 0x0002
SUPPORT_VID_SORENSON Sorenson Flash video 0x0004
SUPPORT_VID_HOMEBREW V1 screen sharing 0x0008
SUPPORT_VID_VP6 (On2) On2 video (Flash 8+) 0x0010
SUPPORT_VID_VP6ALPHA(On2 with alpha channel) On2 video with alpha channel 0x0020
SUPPORT_VID_HOMEBREWV(screensharing v2) Screen sharing version 2 (Flash 8+) 0x0040
SUPPORT_VID_H264 H264 video 0x0080
SUPPORT_VID_ALL All RTMP-supported video codecs 0x00FF
videoFunction

videoFunction(視頻函數(shù)屬性)的可選值

Function Flag Usage Value
SUPPORT_VID_CLIENT_SEEK Indicates that the client can perform frame-accurate seeks. 1
objectEncoding

objectEncoding(編碼屬性)的可選值

Encoding Type Usage Value
AMF0 AMF0 object encoding supported by Flash 6 and later 0
AMF3 AMF3 encoding from Flash 9 (AS3) 3

響應(yīng)命令結(jié)構(gòu)

即服務(wù)器到客戶端的命令結(jié)構(gòu):

字段名(Field Name 類型(Type 描述(Description
Command Name String 表示響應(yīng)的是結(jié)果(result)還是錯(cuò)誤(error),取值為_result_error
Transaction ID Number 對(duì)于connect響應(yīng),取值為 1
Properties Object 描述連接屬性的鍵值對(duì),其結(jié)構(gòu)見表格下方的ConnectResp
Information Object 描述來自服務(wù)端的響應(yīng)的鍵值對(duì),即連接事件。包code,level,description,ObjectEncoding信息
ConnectResp
字段名(Field Name 類型(Type 描述(Description
fmsVer String Flash Media Server 版本號(hào)
capabilities Number 功能數(shù)量?

(※)命令執(zhí)行消息流

connect命令執(zhí)行過程中的消息流如下

    +--------------+                              +-------------+
    |    Client    |             |                |    Server   |
    +------+-------+             |                +------+------+
           |              Handshaking done               |
           |                     |                       |
           |                     |                       |
           |                     |                       |
           |                     |                       |
           |-----------1.Command Message(connect)------->|
           |                                             |
           |<-------2.Window Acknowledgement Size--------|
           |                                             |
           |<-----------3.Set Peer Bandwidth-------------|
           |                                             |
           |-------- Window Acknowledgement Size ------->|
           |                                             |
           |<------ User Control Message(StreamBegin) ---|
           |                                             |
           |<------------ Command Message ---------------|
           |       (_result- connect response)           |
           |                                             |
                 Message flow in the connect command
  1. 客戶端發(fā)送connect命令到服務(wù)端以請(qǐng)求對(duì)服務(wù)端應(yīng)用實(shí)例的連接
  2. 收到connect命令后,服務(wù)端發(fā)送協(xié)議消息“窗口確認(rèn)大小”到客戶端。同時(shí),服務(wù)端也會(huì)連接到connect命令中提到的應(yīng)用
  3. 服務(wù)端發(fā)送協(xié)議消息“設(shè)置對(duì)端寬帶”到客戶端
  4. 客戶端在處理完協(xié)議消息“設(shè)置對(duì)端寬帶”之后,發(fā)送協(xié)議消息“窗口確認(rèn)大小”到服務(wù)端。
  5. 服務(wù)端發(fā)送用戶控制消息(StreamBegin)類型的協(xié)議消息到客戶端
  6. 服??器端發(fā)送結(jié)果命令??消息告知客戶端連接狀態(tài) (success/fail),并攜帶指定信息。

call 方法

NetConnection對(duì)象的call方法執(zhí)行接收端遠(yuǎn)程方法的調(diào)用(RPC),被調(diào)用的 RPC 名字作為一個(gè)參數(shù)傳給調(diào)用命令。

請(qǐng)求命令結(jié)構(gòu)

發(fā)送端發(fā)給接收端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Procedure Name String 被調(diào)用遠(yuǎn)程程序的名字
Transaction ID Number 如果需要遠(yuǎn)程程序給予回復(fù)我們需要傳遞一個(gè)transaction Id,否則傳0即可
Command Object Object 如果一些命令消息需要就用,否則置空即可
Optional Arguments Object 任意要提供的可選參數(shù)

響應(yīng)命令結(jié)構(gòu)

接收端回復(fù)的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令的名字
Transaction ID Number 響應(yīng)所屬的命令的ID
Command Object Object 如果一些命令消息需要就用,否則置空即可
Response Object 調(diào)用方法的回復(fù)

createStream 命令

客戶端發(fā)送這一命令到服務(wù)端為消息連接創(chuàng)建一條邏輯通道——消息流。音頻、視頻和元數(shù)據(jù)使用createStream命令創(chuàng)建的流通道傳輸。

NetConnection是默認(rèn)的通信通道,信息流ID為0。協(xié)議消息和一些命令消息,包括createStream,使用默認(rèn)的通信通道。

請(qǐng)求命令結(jié)構(gòu)

客戶端發(fā)送給服務(wù)器端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令名,這里取值為createStream
Transaction ID Number 命令的事務(wù) ID
Command Object Object 如果一些命令消息需要就用,否則置空即可

響應(yīng)命令結(jié)構(gòu)

服務(wù)端回復(fù)客戶端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 表示響應(yīng)的是結(jié)果(result)還是錯(cuò)誤(error),取值為_result_error
Transaction ID Number 響應(yīng)所屬的命令的 ID
Command Object Object 如果一些命令消息需要就用,否則置空即可
Stream ID Number 返回值要么是一個(gè)流 ID,要么是一個(gè)錯(cuò)誤信息對(duì)象

該處的流ID(Stream ID)表示的是NetConnection的流ID,與塊流和消息流沒有直接關(guān)系

NetStream 命令

NetStream(網(wǎng)絡(luò)流)命令定義了傳輸通道,通過這個(gè)通道,音頻流、視頻流以及數(shù)據(jù)消息流可以通過連接客戶端到服務(wù)端的NetConnection傳輸。以下命令可以由客戶端使用 NetStream 往服務(wù)端發(fā)送

  • play(播放)
  • play2(播放2)
  • deleteStream(刪除流)
  • closeStream(關(guān)閉流)
  • receiveAudio(接收音頻)
  • receiveVideo(接收視頻)
  • publish(發(fā)布)
  • seek(定位)
  • pause(暫停)

對(duì)于NetStream Command ,其響應(yīng)請(qǐng)求命令為狀態(tài)命令(onStatus

狀態(tài)命令(響應(yīng))

對(duì)于NetStream命令,服務(wù)端使用onStatus命令向客戶端發(fā)送NetStream狀態(tài):

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令名,取值為onStatus
Transaction ID Number 事務(wù)ID,取值為 0
Command Object Null onStatus消息沒有命令對(duì)象
Info Object Object 一個(gè) AMF 對(duì)象至少要有“l(fā)evel”、“code”和“description”三個(gè)屬性

AMF 對(duì)象屬性字段要求

  • level(String):消息等級(jí),取值為“warning”、“status”、“error”;
  • code(String):消息碼,例如"NetStream.Play.Start";
    • 構(gòu)成:類名.方法名.狀態(tài)
  • description(String):關(guān)于這個(gè)消息的可讀描述。

play 命令

客戶端發(fā)送這一命令到服務(wù)端用來播放流,也可以多次使用這一命令創(chuàng)建一個(gè)播放列表。

如果你想要?jiǎng)?chuàng)建一個(gè)可以在不同的直播流或者錄制流之間進(jìn)行切換播放的動(dòng)態(tài)的播放列表,那么你就需要多次調(diào)用play方法,并在每次調(diào)用時(shí)傳遞重置字段為false。相反的,如果你想要立即播放指定流,則需要將其他等待播放的流清空,并用true進(jìn)行重置。

請(qǐng)求命令結(jié)構(gòu)

客戶端發(fā)送到服務(wù)端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令名,取值為“play”
Transaction ID Number 事務(wù) ID,取值為 0
Command Object Null 該命令不存在命令信息,取值為“null”
Stream Name String 播放流的名字,其命名規(guī)則見表格下方
Start Number 表示開始的時(shí)間,以秒為單位,是一個(gè)可選參數(shù)。默認(rèn)值為 -2,其值含義見表格下方
Duration Number 表示回放的持續(xù)時(shí)間,以秒為單位,是一個(gè)可選參數(shù),默認(rèn)值為 -1,其值含義見表格下方
Reset Boolean 表示重置操作,即是否對(duì)之前的播放列表進(jìn)行flush操作,是一個(gè)可選參數(shù)。

Stream Name 規(guī)范

根據(jù)不同的文件播放需求,會(huì)有不同的 Stream 命名規(guī)范,如下:

  • 對(duì)于 FLV 文件(sample.flv):不需要文件擴(kuò)展名,例如:sample
  • 對(duì)于 MP3 或 ID3 文件(sample.mp3):需要在名字前添加mp3:,例如:mp3:sample
  • 對(duì)于 H.264/ACC 文件(sample.m4v):需要在名字前添加mp4:,并且在名字后面指定文件擴(kuò)展名,例如:mp4:sample.m4v

Start 含義

Start 表示流名(Stream Name)的播放方式,主要用于區(qū)分播放的是直播流還是錄制流。

  • start = -2:表示用戶首次嘗試播放流名字段中定義的直播流
    • 如果沒有此名的直播流,則會(huì)播放流名相同的錄制流;
    • 如果沒有此名的錄制流,則會(huì)等待此名新的直播流。
  • start = 0:表示播放此流名指定的錄制流
    • 如果沒有此名的錄制流,則會(huì)播放播放列表的下一項(xiàng)
  • start = -1:表示播放此流名指定的直播流

Duration 含義

默認(rèn)值為 -1,表示直播流會(huì)播放至不可用,錄制流會(huì)播放到結(jié)束;如果Duration值為 0,那么只會(huì)播放從錄制流開始時(shí)間的一幀;如果Duration值為大于 0 的正數(shù),那么NetStream將會(huì)變?yōu)榭刹シ艩顟B(tài),或者播放指定的時(shí)間段內(nèi)的錄制流。(如果流在賦值的時(shí)間段內(nèi)結(jié)束,那么回放也會(huì)隨之結(jié)束);如果Duration為 -1 以外的負(fù)數(shù),將會(huì)被當(dāng)成 -1 處理。

Duration 表示回放的持續(xù)時(shí)間,其值的含義如下:

  • Duration = -1:表示直播流播到?jīng)]有了,或錄制流播放結(jié)束;
  • Duration = 0:表示只會(huì)播放從錄制流開始時(shí)間的一幀;
  • Duration > 0:表示在指定的時(shí)間內(nèi)播放直播流,或在指定的時(shí)間內(nèi)播放錄制流。
    • 如果該流在指定時(shí)間內(nèi)結(jié)束,那么播放也會(huì)隨之結(jié)束
  • Duration < 0 && Duration != -1:都會(huì)當(dāng)作-1的情況處理

play 命令執(zhí)行消息流

         +-------------+                            +----------+
         | Play Client |             |              |   Server |
         +------+------+             |              +-----+----+
                |        Handshaking and Application       |
                |             connect done                 |
                |                    |                     |
                |                    |                     |
                |                    |                     |
                |                    |                     |
       ---+---- |-----1.Command Message(createStream) ---->|
    Create|     |                                          |
    Stream|     |                                          |
       ---+---- |<---------- Command Message --------------|
                |     (_result- createStream response)     |
                |                                          |
       ---+---- |------2.Command Message (play)----------->|
          |     |                                          |
          |     |<------------3.SetChunkSize --------------|
          |     |                                          |
          |     |<----4.User Control (StreamIsRecorded)----|
     Play |     |                                          |
          |     |<----5.User Control (StreamBegin)---------|
          |     |                                          |
          |     |<--6.Command Message(onStatus-play reset)-|
          |     |                                          |
          |     |<--6.Command Message(onStatus-play start)-|
          |     |                                          |
          |     |<-------------Audio Message---------------|
          |     |                                          |
          |     |<-------------Video Message---------------|
          |     |                    |                     |
                                     |
             Keep receiving audio and video stream till finishes
                 Message flow in the play command
  1. 當(dāng)客戶端與服務(wù)端握手完成,并進(jìn)行了連接建立后,客戶端便發(fā)送createStream到客戶端,請(qǐng)求創(chuàng)建一條新的塊流。
  2. 當(dāng)客戶端從服務(wù)端接收到createStream命令的結(jié)果是??success后,則發(fā)送play命令,請(qǐng)求后端開始播放。
  3. 一旦接收到play命令,服務(wù)端會(huì)先發(fā)送一個(gè)協(xié)議消息來設(shè)置塊大小。
  4. 服務(wù)端隨后發(fā)送用戶控制消息,這個(gè)消息中定義了StreamIsRecorded事件和流ID。消息在前兩個(gè)字節(jié)中保存事件類型,在后四個(gè)字節(jié)中保存流 ID。
  5. 服務(wù)端發(fā)送另一個(gè)用戶控制消息,這一消息包含StreamBegin事件,用于發(fā)送給客戶端的流的起點(diǎn)。
  6. 如果客戶端play命令執(zhí)行成功,服務(wù)端則發(fā)送????兩個(gè)onStatus命令消息,分別是NetStream.Play.StartNetStream.Play.Reset。
    • 當(dāng)客戶端發(fā)送的play命令設(shè)置了reset時(shí)服務(wù)端才會(huì)發(fā)送NetStream.Play.Reset狀態(tài)。
    • 如果要播放的流沒有找到,服務(wù)端發(fā)送onStatus消息為NetStream.Play.StreamNotFound狀態(tài)

之后,服務(wù)端開始發(fā)送視頻和音頻數(shù)據(jù),客戶端對(duì)其進(jìn)行播放。

play2 命令(碼表應(yīng)用)

不同于play命令,play2命令可以在不改變播放的時(shí)間軸的情況下切換不同的比特率(即碼率)。服務(wù)端維護(hù)了多個(gè)不同碼率的文件,客戶端可以通過play2命令來使用。

請(qǐng)求命令結(jié)構(gòu)

客戶端發(fā)給服務(wù)端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令名,取值為play2
Transaction ID Number 事務(wù)ID,取值為 0
Command Object Null 該命令不存在命令信息,取值為“null”
Command Object Object 一個(gè) AMF 編碼的對(duì)象,該對(duì)象的屬性是為公開的flash.net.NetStreamPlayOptions ActionScript對(duì)象所描述的屬性。

NetStreamPlayOptions對(duì)象的公開屬性在ActionScript 3語言指南[AS3]中有所描述

play2 命令執(zhí)行消息流

        +--------------+                          +-------------+
        | Play2 Client |              |           |    Server   |
        +--------+-----+              |           +------+------+
                 |      Handshaking and Application      |
                 |               connect done            |
                 |                    |                  |
                 |                    |                  |
                 |                    |                  |
                 |                    |                  |
        ---+---- |---- Command Message(createStream) --->|
    Create |     |                                       |
    Stream |     |                                       |
        ---+---- |<---- Command Message (_result) -------|
                 |                                       |
        ---+---- |------ Command Message (play) -------->|
           |     |                                       |
           |     |<------------ SetChunkSize ------------|
           |     |                                       |
           |     |<--- UserControl (StreamIsRecorded)----|
      Play |     |                                       |
           |     |<------- UserControl (StreamBegin)-----|
           |     |                                       |
           |     |<--Command Message(onStatus-playstart)-|
           |     |                                       |
           |     |<---------- Audio Message -------------|
           |     |                                       |
           |     |<---------- Video Message -------------|
           |     |                                       |
                 |                                       |
        ---+---- |-------- Command Message(play2) ------>|
           |     |                                       |
           |     |<------- Audio Message (new rate) -----|
     Play2 |     |                                       |
           |     |<------- Video Message (new rate) -----|
           |     |                    |                  |
           |     |                    |                  |
           |  Keep receiving audio and video stream till finishes
                                      |
                  Message flow in the play2 command

deleteStream 命令

當(dāng) NetStream 對(duì)象銷毀時(shí),NetStream 發(fā)送 deleteStream 命令。

客戶端發(fā)送給服務(wù)端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令字,取值為“deleteStream”
Transaction ID Number 事務(wù)ID,取值為 0
Command Object Null 該命令不存在命令信息,取值為“null”
Stream ID Number 服務(wù)端需要銷毀的流 ID

服務(wù)端不會(huì)發(fā)送任何回復(fù)

receiveAudio 命令

NetStream 通過發(fā)送 receiveAudio 消息來通知服務(wù)端是否發(fā)送音頻到客戶端

客戶端發(fā)送給服務(wù)端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令字,取值為“receiveAudio”
Transaction ID Number 事務(wù)ID,取值為 0
Command Object Null 該命令不存在命令信息,取值為“null”
Bool Flag Boolean 表明客戶端是否接受音頻數(shù)據(jù),取值 true 或 false
  • 如果發(fā)送來的receiveAudio命令Bool Flagfalse時(shí),服務(wù)端不發(fā)送任何回復(fù)。
  • 如果發(fā)送來的receiveAudio命令Bool Flagtrue時(shí),服務(wù)端會(huì)以狀態(tài)消息NetStream.Seek.NotifyNetStream.Play.Start進(jìn)行回復(fù)

NetStream.Seek.Notify:進(jìn)度通知

NetStream.Play.Start:播放狀態(tài)(是否開始)

receiveVideo 命令

NetStream 通過發(fā)送 receiveVideo 消息來通知服務(wù)端是否發(fā)送視頻到客戶端

客戶端發(fā)送給服務(wù)端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令字,取值為“receiveVideo”
Transaction ID Number 事務(wù)ID,取值為 0
Command Object Null 該命令不存在命令信息,取值為“null”
Bool Flag Boolean 表明客戶端是否接受視頻數(shù)據(jù),取值 true 或 false
  • 如果發(fā)送來的receiveVideo命令Bool Flagfalse時(shí),服務(wù)端不發(fā)送任何回復(fù)。
  • 如果發(fā)送來的receiveVideo命令Bool Flagtrue時(shí),服務(wù)端會(huì)以狀態(tài)消息NetStream.Seek.NotifyNetStream.Play.Start進(jìn)行回復(fù)

publish 命令

客戶端通過發(fā)送給服務(wù)端這一命令來發(fā)布一個(gè)已命名的流。使用這個(gè)名字,任意客戶端都可以播放這個(gè)流,并接受發(fā)布的音頻、視頻和數(shù)據(jù)消息。

客戶端發(fā)送給服務(wù)端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令名,取值為“publish”
Transaction ID Number 事務(wù)ID,取值為 0
Command Object Null 該命令不存在命令信息,取值為“null”
Publishing Name String 發(fā)布的流的名字
Publishing Type String 表示發(fā)布類型,取值為“l(fā)ive”、“record”或者“append”

發(fā)布類型:

  • live:直播數(shù)據(jù)只被發(fā)布,并不對(duì)其進(jìn)行錄制
  • record:流被發(fā)布后,數(shù)據(jù)被錄制到一個(gè)新的文件,新文件被存儲(chǔ)在服務(wù)器上包含服務(wù)應(yīng)用目錄的子路徑。如果文件已存在,則覆蓋。
  • append:流被發(fā)布后,則添加數(shù)據(jù)到指定文件。如果文件不存在,則新建一個(gè)。

服務(wù)端回復(fù)onStatus命令以標(biāo)注發(fā)布的起始位置

seek 命令

客戶端通過發(fā)送seek命令查找一個(gè)多媒體文件或一個(gè)播放列表的偏移量,以毫秒為單位。

客戶端發(fā)送給服務(wù)端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令字,取值為“seek”
Transaction ID Number 事務(wù)ID,取值為 0
Command Object Null 該命令不存在命令信息,取值為“null”
milliSeconds Number 查找的毫秒數(shù)

seek命令執(zhí)行成功時(shí)服務(wù)端會(huì)發(fā)送一個(gè)狀態(tài)消息NetStream.Seek.Notify,失敗的話,服務(wù)端返回一個(gè)_error消息。

pause 命令

客戶端通過發(fā)送pause命令告知服務(wù)端當(dāng)前流是暫停還是重新播放。

客戶端發(fā)送給服務(wù)端的命令結(jié)構(gòu)如下:

字段名(Field Name 類型(Type 描述(Description
Command Name String 命令字,取值為“命令字,取值為“pause”
Transaction ID Number 事務(wù)ID,取值為 0
Command Object Null 該命令不存在命令信息,取值為“null”
Pause/Unpause Flag Boolean 表示暫停或重新播放,取值為"true"或"false"
milliSeconds Number 表示流暫停或者重新開始流所處的毫秒數(shù)。該值是客戶端暫停的當(dāng)前流時(shí)間,服務(wù)端會(huì)在重新播放的時(shí)候傳"timestamps"更大的消息出來
  • 當(dāng)流暫停時(shí),服??器端發(fā)??一個(gè)NetStream.Pause.Notify ??狀態(tài)消息
  • 當(dāng)流重新播放時(shí),服??器端發(fā)??一個(gè)NetStream.Unpause.Notify` 狀態(tài)消息
  • 失敗的話,服??器端返回一個(gè)_error消息??
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容