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

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

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

命令消息使用場景基本都是——客戶端請求,服務端響應

按來源分類

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

請求命令信息

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

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

響應命令信息

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

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

由此可見,響應命令其實就是一個結果命令、錯誤命令狀態(tài)命令

小結:命令消息通過Command Name進行區(qū)分,響應命令通過Transaction ID與請求命令進行關聯(lián)。

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

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

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

NetConnection 命令

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

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

對于NetConnection Command ,其響應請求命令為結果命令(_result)和錯誤命令(_error)。

connect 命令

客戶端發(fā)送connect命令給服務器,來獲取一個服務端應用實例的連接(connection)。

請求命令結構

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

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

屬性(Property 類型(Type 描述(Description 范例(Example Value
app String 客戶端連接到服務端應用的名字 live
flashver String Flash Player 版本號,和 ApplicationScript getversion ()方法返回的是用一個字符串 FMSc/1.0
swfUrl String 進行當前連接的 SWF 文件源地址 file://C:/FlvPlayer.swf
tcUrl String 服務器 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

響應命令結構

即服務器到客戶端的命令結構:

字段名(Field Name 類型(Type 描述(Description
Command Name String 表示響應的是結果(result)還是錯誤(error),取值為_result_error
Transaction ID Number 對于connect響應,取值為 1
Properties Object 描述連接屬性的鍵值對,其結構見表格下方的ConnectResp
Information Object 描述來自服務端的響應的鍵值對,即連接事件。包code,level,description,ObjectEncoding信息
ConnectResp
字段名(Field Name 類型(Type 描述(Description
fmsVer String Flash Media Server 版本號
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命令到服務端以請求對服務端應用實例的連接
  2. 收到connect命令后,服務端發(fā)送協(xié)議消息“窗口確認大小”到客戶端。同時,服務端也會連接到connect命令中提到的應用
  3. 服務端發(fā)送協(xié)議消息“設置對端寬帶”到客戶端
  4. 客戶端在處理完協(xié)議消息“設置對端寬帶”之后,發(fā)送協(xié)議消息“窗口確認大小”到服務端。
  5. 服務端發(fā)送用戶控制消息(StreamBegin)類型的協(xié)議消息到客戶端
  6. 服??器端發(fā)送結果命令??消息告知客戶端連接狀態(tài) (success/fail),并攜帶指定信息。

call 方法

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

請求命令結構

發(fā)送端發(fā)給接收端的命令結構如下:

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

響應命令結構

接收端回復的命令結構如下:

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

createStream 命令

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

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

請求命令結構

客戶端發(fā)送給服務器端的命令結構如下:

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

響應命令結構

服務端回復客戶端的命令結構如下:

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

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

NetStream 命令

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

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

對于NetStream Command ,其響應請求命令為狀態(tài)命令(onStatus

狀態(tài)命令(響應)

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

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

AMF 對象屬性字段要求

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

play 命令

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

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

請求命令結構

客戶端發(fā)送到服務端的命令結構如下:

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

Stream Name 規(guī)范

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

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

Start 含義

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

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

Duration 含義

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

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

  • Duration = -1:表示直播流播到?jīng)]有了,或錄制流播放結束;
  • Duration = 0:表示只會播放從錄制流開始時間的一幀;
  • Duration > 0:表示在指定的時間內(nèi)播放直播流,或在指定的時間內(nèi)播放錄制流。
    • 如果該流在指定時間內(nèi)結束,那么播放也會隨之結束
  • Duration < 0 && Duration != -1:都會當作-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. 當客戶端與服務端握手完成,并進行了連接建立后,客戶端便發(fā)送createStream到客戶端,請求創(chuàng)建一條新的塊流。
  2. 當客戶端從服務端接收到createStream命令的結果是??success后,則發(fā)送play命令,請求后端開始播放。
  3. 一旦接收到play命令,服務端會先發(fā)送一個協(xié)議消息來設置塊大小。
  4. 服務端隨后發(fā)送用戶控制消息,這個消息中定義了StreamIsRecorded事件和流ID。消息在前兩個字節(jié)中保存事件類型,在后四個字節(jié)中保存流 ID。
  5. 服務端發(fā)送另一個用戶控制消息,這一消息包含StreamBegin事件,用于發(fā)送給客戶端的流的起點。
  6. 如果客戶端play命令執(zhí)行成功,服務端則發(fā)送????兩個onStatus命令消息,分別是NetStream.Play.StartNetStream.Play.Reset
    • 當客戶端發(fā)送的play命令設置了reset時服務端才會發(fā)送NetStream.Play.Reset狀態(tài)。
    • 如果要播放的流沒有找到,服務端發(fā)送onStatus消息為NetStream.Play.StreamNotFound狀態(tài)

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

play2 命令(碼表應用)

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

請求命令結構

客戶端發(fā)給服務端的命令結構如下:

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

NetStreamPlayOptions對象的公開屬性在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 命令

當 NetStream 對象銷毀時,NetStream 發(fā)送 deleteStream 命令。

客戶端發(fā)送給服務端的命令結構如下:

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

服務端不會發(fā)送任何回復

receiveAudio 命令

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

客戶端發(fā)送給服務端的命令結構如下:

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

NetStream.Seek.Notify:進度通知

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

receiveVideo 命令

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

客戶端發(fā)送給服務端的命令結構如下:

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

publish 命令

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

客戶端發(fā)送給服務端的命令結構如下:

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

發(fā)布類型:

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

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

seek 命令

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

客戶端發(fā)送給服務端的命令結構如下:

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

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

pause 命令

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

客戶端發(fā)送給服務端的命令結構如下:

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

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