上篇我們對消息的格式和大部分的消息類型進行了梳理,本編主要對命令消息其中的定義進行梳理。
命令消息(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、play和pause等等 |
| 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、_error或onStatus
|
| Transaction ID | Number | 事務ID,響應的目標請求的事務 ID |
| Command Object | Object / Null | 命令對象,如果一些命令消息需要就用,否則置空即可 |
| Others | Unknow | 額外的參數(shù)值或?qū)ο?,根?jù)特定的命令來配置。如果這個是結果命令,則該字段是指定的結果;如果這個是錯誤命令,則該字段就是錯誤信息。 |
由此可見,響應命令其實就是一個結果命令、錯誤命令或狀態(tài)命令。
小結:命令消息通過
Command Name進行區(qū)分,響應命令通過Transaction ID與請求命令進行關聯(lián)。
發(fā)送命令消息的類對象
NetConnection和NetStream是命令中常用的類對象,其含義如下:
- 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
- 客戶端發(fā)送
connect命令到服務端以請求對服務端應用實例的連接 - 收到
connect命令后,服務端發(fā)送協(xié)議消息“窗口確認大小”到客戶端。同時,服務端也會連接到connect命令中提到的應用 - 服務端發(fā)送協(xié)議消息“設置對端寬帶”到客戶端
- 客戶端在處理完協(xié)議消息“設置對端寬帶”之后,發(fā)送協(xié)議消息“窗口確認大小”到服務端。
- 服務端發(fā)送用戶控制消息(
StreamBegin)類型的協(xié)議消息到客戶端 - 服??器端發(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
- 當客戶端與服務端握手完成,并進行了連接建立后,客戶端便發(fā)送
createStream到客戶端,請求創(chuàng)建一條新的塊流。 - 當客戶端從服務端接收到
createStream命令的結果是??success后,則發(fā)送play命令,請求后端開始播放。 - 一旦接收到
play命令,服務端會先發(fā)送一個協(xié)議消息來設置塊大小。 - 服務端隨后發(fā)送用戶控制消息,這個消息中定義了
StreamIsRecorded事件和流ID。消息在前兩個字節(jié)中保存事件類型,在后四個字節(jié)中保存流 ID。 - 服務端發(fā)送另一個用戶控制消息,這一消息包含
StreamBegin事件,用于發(fā)送給客戶端的流的起點。 - 如果客戶端
play命令執(zhí)行成功,服務端則發(fā)送????兩個onStatus命令消息,分別是NetStream.Play.Start和NetStream.Play.Reset。- 當客戶端發(fā)送的
play命令設置了reset時服務端才會發(fā)送NetStream.Play.Reset狀態(tài)。 - 如果要播放的流沒有找到,服務端發(fā)送
onStatus消息為NetStream.Play.StreamNotFound狀態(tài)
- 當客戶端發(fā)送的
之后,服務端開始發(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 Flag為false時,服務端不發(fā)送任何回復。 - 如果發(fā)送來的
receiveAudio命令Bool Flag為true時,服務端會以狀態(tài)消息NetStream.Seek.Notify和NetStream.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 Flag為false時,服務端不發(fā)送任何回復。 - 如果發(fā)送來的
receiveVideo命令Bool Flag為true時,服務端會以狀態(tài)消息NetStream.Seek.Notify和NetStream.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消息??