久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RTMP协议中文翻译(首发)(转)

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RTMP协议中文翻译(首发)(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 Adobe公司的實時消息傳輸協議

摘要

  此備忘錄描述了 Adobe公司的實時消息傳輸協議(RTMP),此協議從屬于應用層,被設計用來在適合的傳輸協議(如TCP)上復用和打包多媒體傳輸流(如音頻、視頻和互動內容)。

目錄

1.簡介
1.1.術語
2.貢獻者
3.定義
4.字節序,對齊,和時間格式
5.RTMP塊流
5.1.消息格式
5.2.握手
5.2.1.握手序列
5.2.2.C0和S0格式
5.2.3.C1和S1格式
5.2.4.C2和S2格式
5.2.5.握手流程圖
5.3.組塊
5.3.1.塊格式
5.3.1.1.塊的基本頭
5.3.1.2.塊的消息頭
5.3.1.2.1.類型0
5.3.1.2.2.類型1
5.3.1.2.3.類型2
5.3.1.2.4.類型3
5.3.1.2.5.常見的頭字段
5.3.1.3.擴展的時間戳
5.3.2.示例
5.3.2.1.示例1
5.3.2.2.示例2
5.4.協議控制消息
5.4.1.設置塊大小 (1)
5.4.2.中斷消息 (2)
5.4.3.應答 (3)
5.4.4.應答窗口大小 (5)
5.4.5.設置流帶寬 (6)
6.RTMP消息格式
6.1.RTMP消息格式
6.1.1.消息頭
6.1.2.消息有效數據
6.2.用戶控制消息 (4)
7.RTMP命令消息
7.1.消息類型
7.1.1.命令消息 (20, 17)
7.1.2.數據消息 (18, 15)
7.1.3.共享對象消息 (19, 16)
7.1.4.音頻消息 (8)
7.1.5.視頻消息 (9)
7.1.6.集合消息 (22)
7.1.7.用戶控制消息事件
7.2.命令類型
7.2.1.網絡連接命令
7.2.1.1.連接
7.2.1.2.調用
7.2.1.3.創建流
7.2.2.網絡流命令
7.2.2.1.播放
7.2.2.2.播放2
7.2.2.3.刪除流
7.2.2.4.接收音頻
7.2.2.5.接收視頻
7.2.2.6.發布
7.2.2.7.定位
7.2.2.8.暫停
7.3.消息交互示例
7.3.1.發布錄制的視頻
7.3.2.廣播共享對象消息
7.3.3.從錄制的流發布元數據
8.引用
作者的聯系方式

簡介

Adobe公司的實時消息傳輸協議(RTMP)提供了一套全雙工的可靠的多路復用消息服務,類似于TCP協議[RFC0793],用來在一對結點之間并行傳輸帶時間戳的音頻流,視頻流,數據流。通常情況下,不同類型的消息會被分配不同的優先級,當網絡傳輸能力受限時,優先級用來控制消息在網絡底層的排隊順序。

  當前文章描述了實時消息傳輸協議(RTMP)的語法和實現。

術語

當前文章中的這些關鍵字“MUST”“MUST NOT”“REQUIRED”“SHALL”“SHALL NOT”“SHOULD”“SHOULD NOT”“RECOMMENDED”“NOT RECOMMENDED”“MAY”“OPTIONAL”的說明請參照[RFC2119]中對應的描述。

貢獻者

Rajesh Mallipeddi,Adobe公司前員工,是這份規范的原始作者,并且提供了大部分的原始文本。
Mohit Srivastava,Adobe公司員工,為這份規范的完善做出了很大貢獻。

定義

有效數據
RTMP包中的數據,例如音頻采樣、壓縮后的視頻數據。有效數據的格式和說明不在本文中詳述。
備注:有效數據格式的定義請參考FLV定義。


一個數據包包括固定的包頭和有效數據。一些底層協議可能需要封裝包的定義。

端口
傳輸協議使用端口來區分同一個主機上的多個目標地址。TCP/IP協議根據正整數(端口號)來識別端口。OSI傳輸層使用的傳輸選擇器(TSEL)相當于端口。

傳輸地址
一個網絡地址和端口的組合,用來標識傳輸層的一端,例如IP地址和TCP端口。數據包從源地址傳輸到目的地址。

消息流
一個信息流的邏輯通信信道。

消息流ID
每條消息都有一個與之相關聯的ID,用來區分這條消息屬于哪個流。


消息的一個分片。消息在被發送到網絡之前,被分割成更小的部分。塊可以確保在多個流之間,使用基于時間戳的方式,端到端的交付所有消息。

塊流
一個邏輯通信信道,允許塊在一個特定的方向上流動。塊流可以從客戶機傳輸到服務器,也可以反向傳輸。

塊流ID
每個塊都有一個與之相關聯的ID,用來區分塊屬于哪個流。

多路復用
將獨立的音頻或視頻數據組合為連貫的音視頻數據流,使同時傳輸多個視頻和音頻成為可能。

多路分解
多路復用的逆向過程,將混合的音視頻數據拆分成獨立的音頻和視頻數據。

遠程過程調用(RPC)
允許客戶端或服務器請求對端調用程序或子程序。

元數據
描述數據。電影的元數據包括標題、時間、創建日期、等等。

應用實例
當客戶端發送連接請求到服務器時,會在服務器端建立一個應用實例。

動作消息格式(AMF)
一種緊湊的二進制格式,用來序列化AS對象。AMF有兩個版本:AMF0、AMF3。
注: AMF0代表早期的flex對象,AMF3代表flash對象;

字節序,對齊,和時間格式

所有的整形字段使用網絡字節序的方式傳輸,第零字節位于第一位,第零比特是雙字節或字段的標志位。這種節字排序方式通常稱為大端。傳輸順序的描述詳見IP協議[RFC0791]。除非特別聲明,本文中的數字一律為十進制。
注: 網絡字節序為大端排序方式。

除非特別說明,RTMP協議中的數據都以字節對齊。例如,一個16比特數字可能位于奇數偏移字節。涉及到追加數據的,追加字節應該為零。

RTMP的時間戳,是以毫秒為單位的整型數,使用相對時間。通常,每個流以零作為時間戳的起始,但這不是必需的,只要他們的基準時間一樣即可。注意,這意味著,任何同步傳輸的多個流(特別是單一主機)的時間戳需要在RTMP協議外做一些額外處理。

時間戳是一個32位整型數,使用周期為49天17時2分47.296秒。由于,流允許連續傳輸數年時間,RTMP應用程序在處理時間戳時,應該使用序列號算法[RFC1982]。例如,應用程序假設所有相鄰的時間戳都在1到2^32毫秒之間,比如4000000000后面跟著10000,3000000000在4000000000的前面。

時間戳增量是相對于前一個時間戳的無符號整型數。時間戳增量可以是24位或者32位。

RTMP塊流

本講述了實時消息傳遞協議塊流(RTMP塊流)。它作為一款高級多媒體流協議提供了流的多路復用和打包服務。RTMP塊流被設計用來傳輸實時消息協議(第6章),它可以使用任何協議來發送消息流。每個消息都包含時間戳和有效類型標識。RTMP塊流和RTMP適用于各種視聽傳播的應用程序,包括一對一的,和一對多的視頻直播、點播服務、互動會議應用程序。

當使用一個可靠的傳輸協議如TCP[RFC0793]時,RTMP塊流提供了一種可以在多個流中,基于時間戳的端到端交付所有消息的方法。RTMP塊流不提供任何優先級或類似形式的控制,但可以使用更高級別的協議來提供這樣的優先級。例如,一個視頻服務器可以根據發送的時間或確認每個消息的時間,來決定為一個網絡差的用戶丟棄視頻信息,以確保音頻信息的及時接收。

RTMP塊流不僅包含了自己的協議控制信息,同時也提供了一個更高級別的協議機制,用來嵌入用戶自定義控制信息。

消息格式

消息格式可以被分割成多個塊,用來在更高的協議中支持多路復用。在創建塊消息格式時,應該包含以下字段:

時間戳
消息的時間戳。這個字段占用4字節。

長度
消息的有效長度。如果消息頭不能被忽略,它應該包括長度。這個字段在塊頭中占用3字節。

類型ID
各種類型的協議控制消息的ID。這些消息使用RTMP塊流協議和更高級別的協議來傳輸信息。所有其他類型的ID可以用在高級協議,這對于RTMP塊流來說,是不透明的。事實上,RTMP塊流中沒有要求使用這些值作為類型;所有(無協議的)消息可能是相同的類型,或者應用程序使用這個字段來區分多個連接,而不是類型。這個字段在塊頭中占用1字節。

消息流ID
消息流ID可以是任意值。當同一個塊流被復用到不同的消息流中時,可以通過消息流ID來區分它們。另外,對于RTMP塊流而言,這是一個不透明值。該字段占用4字節,使用小端序。

握手

RTMP連接從握手開始。它包含三個固定大小的塊,不像其他的協議,是由頭部大小可變的塊組成的。

客戶端(初始化連接的一端)和服務端發送同樣的三個塊。為了方便描述,客戶端發送的三個塊命名為C0,C1,C2;服務端發送的三個塊命名為S0,S1,S2。

握手序列

客戶端通過發送C0和C1消息來啟動握手過程??蛻舳吮仨毥邮盏絊1消息,然后發送C2消息??蛻舳吮仨毥邮盏絊2消息,然后發送其他數據。

服務端必須接收到C0或者C1消息,然后發送S0和S1消息。服務端必須接收到C1消息,然后發送S2消息。服務端必須接收到C2消息,然后發送其他數據。

C0和S0格式

C0和S0包由一個字節組成,下面是C0/S0包內的字段:

??????????????????????????????0?1?2?3?4?5?6?7 ?????????????????????????????+-+-+-+-+-+-+-+-+ ?????????????????????????????|???version?????| ?????????????????????????????+-+-+-+-+-+-+-+-+ ??????????????????????????????C0?and?S0?bits

1-4B 版本

版本(8比特)
在C0包內,這個字段代表客戶端請求的RTMP版本號。在S0包內,這個字段代表服務端選擇的RTMP版本號。此文檔使用的版本是3。版本0-2用在早期的產品中,現在已經被棄用;版本4-31被預留用于后續產品;版本32-255(為了區分RTMP協議和文本協議,文本協議通常以可打印字符開始)不允許使用。如果服務器無法識別客戶端的版本號,應該回復版本3??蛻舳丝梢赃x擇降低到版本3,或者中止握手過程。

C1和S1格式

C1和S1包長度為1536字節,包含以下字段:

??????0???????????????????1???????????????????2???????????????????30?1?2?3?4?5?6?7?8?9?0?1?2?3?4?5?6?7?8?9?0?1?2?3?4?5?6?7?8?9?0?1 ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?????|????????????????????????time?(4?bytes)?????????????????????????| ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?????|????????????????????????zero?(4?bytes)?????????????????????????| ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?????|????????????????????????random?bytes???????????????????????????| ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?????|?????????????????????????random?bytes??????????????????????????| ?????|????????????????????????????(cont)?????????????????????????????| ?????|?????????????????????????????....??????????????????????????????| ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ??????????????????????????????C1?and?S1?bits

1-4B 時間
5-8B 零
9-1536B 其他數據

時間(4字節)
本字段包含一個時間戳,客戶端應該使用此字段來標識所有流塊的時刻。時間戳取值可以為零或其他任意值。為了同步多個塊流,客戶端可能希望多個塊流使用相同的時間戳。

零(4字節)
本字段必須為零。

隨機數據(1528字節)
本字段可以包含任意數據。由于握手的雙方需要區分另一端,此字段填充的數據必須足夠隨機(以防止與其他握手端混淆)。不過沒必要為此使用加密數據或動態數據。

C2和S2格式

C2和S2包長度為1536字節,作為C1和S1的回應,包含以下字段:

??????0???????????????????1???????????????????2???????????????????30?1?2?3?4?5?6?7?8?9?0?1?2?3?4?5?6?7?8?9?0?1?2?3?4?5?6?7?8?9?0?1 ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?????|????????????????????????time?(4?bytes)?????????????????????????| ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?????|???????????????????????time2?(4?bytes)?????????????????????????| ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?????|????????????????????????random?echo????????????????????????????| ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ?????|?????????????????????????random?echo???????????????????????????| ?????|????????????????????????????(cont)?????????????????????????????| ?????|?????????????????????????????....??????????????????????????????| ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ??????????????????????????????C2?and?S2?bits

1-4B 時間
5-8B 時間
9-1536B 其他數據

時間(4字節)
本字段必須包含對端發送的時間戳。

時間(4字節)
本字段必須包含時間戳,取值為接收對端發送過來的握手包的時刻。

隨機數據(1528字節)
本字段必須包含對端發送過來的隨機數據。握手的雙方可以使用時間1和時間2字段來估算網絡連接的帶寬和/或延遲,但是不一定有用。

握手過程示意圖

+-------------+ +-------------+| Client | TCP/IP Network | Server | +-------------+ | +-------------+ | | | Uninitialized | Uninitialized | C0 | | |------------------->| C0 | | |-------------------->| | C1 | | |------------------->| S0 | | |<--------------------| | | S1 | Version sent |<--------------------| | S0 | | |<-------------------| | | S1 | | |<-------------------| Version sent | | C1 | | |-------------------->| | C2 | | |------------------->| S2 | | |<--------------------| Ack sent | Ack Sent | S2 | | |<-------------------| | | | C2 | | |-------------------->| Handshake Done | Handshake Done | | | Pictorial Representation of Handshake [譯]握手示意圖

下面是握手示意圖中提到的狀態:

未初始化
協議版本號在此階段發送。客戶端和服務器均處于未初始化狀態??蛻舳税l送攜帶協議版本號的C0包。如果服務器支持此版本,回復S0和S1包。如果服務器不支持此版本,使用適當的動作回復。在RTMP協議中,此動作是中止連接。
注: 在"C0和S0格式"章節中提及,如果服務器不支持客戶端的版本號,可以選擇降到版本3或中止。

發送版本
客戶端和服務器雙方在未初始化狀態后,會進入發送版本狀態。之后,客戶端等待S1包,服務器等待C1包。待接收到數據包,客戶端發送C2包,服務器發送S2包。然后,雙方都進入答復狀態??蛻舳说却鼵2的答復,服務器等待S2的答復。

握手完成
客戶端和服務器交換消息。

組塊

握手完成之后,此連接可以復用于一到多個塊流。每個塊流攜帶一個消息流的某種類型的消息。塊通過網絡進行傳輸。傳輸過程中,每個塊必須被完整的發送后,才能發送下一個塊。接收端接收完成之后,根據塊流ID把塊組裝成完整的消息。

塊允許把高級協議的大消息分割成更小的消息分片,例如為了防止低優先級的大消息(如視頻消息)阻礙高優先級的小消息(如音頻和控制消息)。

塊允許以更少的開銷來發送小消息,減少開銷的方法是壓縮必須攜帶的塊頭的數據。

塊的大小是可配置的。配置的方法詳見5.4.1章節的設置塊大小控制消息。大的塊消息可以減少CPU使用率,但是在帶寬比較小時會導致其他內容的延遲。小的塊消息不利于高碼率流的傳輸。流的每一個方向都可以配置獨立的塊大小。

塊格式

每一個塊包含了頭和數據。塊頭包含了三個部分:

+--------------+----------------+--------------------+--------------+| Basic Header | Message Header | Extended Timestamp | Chunk Data | +--------------+----------------+--------------------+--------------+ | | |<------------------- Chunk Header ----------------->| Chunk Format

基本頭(1-3字節)
這個字段包含塊流ID和塊類型。塊類型決定了編碼過的消息頭的格式。這個字段是一個變長字段,長度取決于塊流ID。

消息頭(0,3,7,11字節)
這個字段包含被發送的消息信息(無論是全部,還是部分)。字段長度由塊頭中的塊類型來決定。

擴展時間戳(0,4字節)
這個字段是否存在取決于塊消息頭中編碼的時間戳。更多詳情參考5.3.1.3章節。

塊數據(可變大小)
當前塊的有效數據,上限為配置的最大塊大小。

塊的基本頭

塊的基本頭包含塊流ID和塊類型(下面的fmt字段)。塊類型代表了編碼過的消息頭的格式。此字段根據塊流ID的不同,長度可能為1,2或3字節。

在實現協議時,此字段應該使用可以容納ID的最小長度。

此協議支持最多65597個流,ID從3到65599。0,1,2這三個為保留ID。當塊的基本頭長度為2字節時,第3-8比特取值為0。當長度為3字節時,第3-8比特取值為1。塊流ID為2時保留作為低級協議的控制消息和命令消息。

1字節長度的基本頭包含了2到63的塊流ID。

0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |fmt| cs id | +-+-+-+-+-+-+-+-+ Chunk basic header 1

2字節長度的基本頭包含了64到319的塊流ID。塊流ID的計算方法為,第2個字節加上64。

0 10 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |fmt| 0 | cs id - 64 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Chunk basic header 2

3字節長度的基本頭包含了64到65599的塊流ID。塊流ID的計算方法為,第3個字節乘以256,加上第2個字節,再加上64。

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |fmt| 1 | cs id - 64 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Chunk basic header 3

塊流ID(6比特)
本字段包含了從2到63的塊流ID。當塊的基本頭長度為2字節時,此字段取值為0。當塊的基本頭長度為3字節時,此字段取值為1。

類型(2比特)
本字段標識了塊消息頭的類型。塊消息頭的4種類型,會在下一小節中說明。

塊流ID(8或16比特)
本字段的取值為塊流ID減去64。例如,塊流ID為365的存儲方式為,第3-8比特為1,第9-24比特為301。

64-319之間的塊流ID,既可以使用2字節頭長度,也可以使用3頭長度。不過前面曾經提到過“在實現協議時,此字段應該使用可以容納ID的最小長度”,因此應該選擇使用2字節頭長度。

塊的消息頭

根據塊的基本頭中類型字段的取值不同,塊的消息頭有4種類型。

在實現協議時,此字段應該使用可以容納消息頭的最小長度。

類型0

類型為0的消息頭長度為11字節。塊流必須以這種類型的消息開始,當塊流的時間戳回環時,也必須以這種類型的消息開始。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | timestamp |message length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | message length (cont) |message type id| msg stream id | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | message stream id (cont) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Chunk Message Header - Type 0

時間戳(3字節)
類型為0的塊,此字段必須為絕對時間戳。如果時間戳大于等于16777215(0xFFFFFF),此字段的取值必須為16777215,并且與擴展時間戳一起組成32比特的完整時間戳。如果時間戳小于16777215,那么此字段代表了完整的時間戳。

類型1

類型為1的消息頭長度為7字節。不包含消息流ID;當前塊和上一個塊使用相同的流ID。擁有可變大小消息(視頻數據)的流應該首個消息之后,在每個消息的第1個塊使用這種類型。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | timestamp delta |message length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | message length (cont) |message type id| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Chunk Message Header - Type 1
類型2

類型為2的消息頭長度為3字節。不包含消息流ID或消息長度;當前塊和上一個塊使用相同的流ID和流長度。擁有固定大小消息(音頻或其他數據)的流應該在首個消息之后,在每個消息的第1個塊使用這種類型。

0 1 20 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | timestamp delta | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Chunk Message Header - Type 2
類型3

類型為3的塊沒有消息頭。消息頭內的相關字段都不存在。當前塊和上一個塊使用相同的流ID,長度和時間間隔。

當一個獨立的消息被分割成塊時,從第二個塊開始使用這種類型。第5.3.2.2章節的示例2展示了這種情況。

如果流由完全相同大小的消息,流ID,間隔時間組成時,應該在類型為2的塊之后使用這種類型。第5.3.2.1章節的示例1展示了這種情況。

如果第一個和第二個消息之間的時間間隔和第一個消息的時間戳相同,那么類型為0的塊后面跟隨類型為3的塊,沒有必要再使用類型為2的塊來標識時間間隔。

如果類型為0的塊后面跟隨著類型為3的塊,那么類型為3的塊的時間間隔與類型為1的塊的時間戳相同。

常見的頭字段

塊消息頭里面的每個字段的描述:

時間間隔(3字節)
類型為1或2的塊里,本字段代表當前塊和上一個塊的時間戳之差。如果時間間隔大于等于16777215(0xFFFFFF),此字段的取值必須為16777215,并且與擴展時間戳一起組成32比特的完整時間戳。如果時間戳小于16777215,那么此字段代表了完整的時間戳。

消息長度(3字節)
類型為0或1的塊里,本字段代表消息的長度。這個值通常情況下跟塊的有效數據長度是不相等的。塊的有效數據長度是塊大小的最大值。

消息類型ID(1字節)
類型為0或1的塊里,本字段代表消息的類型。

消息流ID(4字節)
類型為0的塊里,本字段代表消息流的ID。并使用小端方式存儲。通常情況下,相同塊流里面的消息來自于相同的消息流。由于消息頭的壓縮,可能導致獨立的消息流被混合到相同的塊流。無論如何,如果關閉了一個消息流,又打開了另一個,那么已經存在的塊流不能被用于發送新的類型為0的塊。

擴展的時間戳

擴展的時間戳字段用來表示時間戳或時間間隔取值大于16777215(0xFFFFFF)的。也就是說,類型為0或1或2的塊中,時間戳或時間間隔的取值超出了24比特。本字段與之前的時間字段一起構成完整的32比特時間戳或時間間隔。完整時間值的前一部分(24比特)位于類型為0的塊的時間戳字段,或類型為1或2的時間間隔字段,取值為16777215(0xFFFFFF)。類型為3的塊中,擴展時間戳字段與上一個塊中(可能為類型0或1或2)的擴展時間戳相等。

示例

示例1

本示例展示了一個音頻消息流。流中包含有冗余信息。

+---------+-----------------+-----------------+-----------------+| |Message Stream ID| Message Type ID | Time | Length |+---------+-----------------+-----------------+-------+---------+| Msg # 1 | 12345 | 8 | 1000 | 32 | +---------+-----------------+-----------------+-------+---------+ | Msg # 2 | 12345 | 8 | 1020 | 32 | +---------+-----------------+-----------------+-------+---------+ | Msg # 3 | 12345 | 8 | 1040 | 32 | +---------+-----------------+-----------------+-------+---------+ | Msg # 4 | 12345 | 8 | 1060 | 32 | +---------+-----------------+-----------------+-------+---------+ Sample audio messages to be made into chunks

下面的表格展示了由此音頻流產生的塊信息。從第3條消息開始,數據傳輸達到最大優化。每條消息的頭部只增加了1字節長度。

+--------+---------+-----+------------+------- ---+------------+| | Chunk |Chunk|Header Data |No.of Bytes|Total No.of | | |Stream ID|Type | | After |Bytes in the| | | | | |Header |Chunk | +--------+---------+-----+------------+-----------+------------+ |Chunk#1 | 3 | 0 | delta: 1000| 32 | 44 | | | | | length: 32,| | | | | | | type: 8, | | | | | | | stream ID: | | | | | | | 12345 (11 | | | | | | | bytes) | | | +--------+---------+-----+------------+-----------+------------+ |Chunk#2 | 3 | 2 | 20 (3 | 32 | 36 | | | | | bytes) | | | +--------+---------+-----+----+-------+-----------+------------+ |Chunk#3 | 3 | 3 | none (0 | 32 | 33 | | | | | bytes) | | | +--------+---------+-----+------------+-----------+------------+ |Chunk#4 | 3 | 3 | none (0 | 32 | 33 | | | | | bytes) | | | +--------+---------+-----+------------+-----------+------------+ Format of each of the chunks of audio messages

示例2

本示例展示了一條長消息,由于消息的長度超過了塊的最大長度(128字節),此消息在傳輸時將被分割成若干個塊。

+-----------+-------------------+-----------------+-----------------+| | Message Stream ID | Message Type ID | Time | Length |+-----------+-------------------+-----------------+-----------------+| Msg # 1 | 12346 | 9 (video) | 1000 | 307 |+-----------+-------------------+-----------------+-----------------+Sample Message to be broken to chunks

下面是消息分割后產生的塊:

+-------+------+-----+-------------+-----------+------------+| |Chunk |Chunk|Header |No. of |Total No. of| | |Stream| Type|Data |Bytes after| bytes in | | | ID | | | Header | the chunk | +-------+------+-----+-------------+-----------+------------+ |Chunk#1| 4 | 0 | delta: 1000 | 128 | 140 | | | | | length: 307 | | | | | | | type: 9, | | | | | | | stream ID: | | | | | | | 12346 (11 | | | | | | | bytes) | | | +-------+------+-----+-------------+-----------+------------+ |Chunk#2| 4 | 3 | none (0 | 128 | 129 | | | | | bytes) | | | +-------+------+-----+-------------+-----------+------------+ |Chunk#3| 4 | 3 | none (0 | 51 | 52 | | | | | bytes) | | | +-------+------+-----+-------------+-----------+------------+ Format of each of the chunks

第一個塊的頭數據顯示了消息的長度為307字節。

在這兩個示例中,類型為3的塊有兩種使用方式。第一種是說明消息的繼續。第二種是說明新消息的頭信息可以由前面已經存在的消息推導出來。

協議控制消息

RTMP塊流使用消息類型ID 1、2、3、5、6作為控制消息。這些消息包含了必要的RTMP塊流協議信息。

這些協議控制消息必須使用0作為消息流ID(作為已知的控制流ID),同時使用2作為塊流ID。協議控制消息接收立即生效;解析時,時間戳字段被忽略。

設置塊大小 (1)

協議控制消息(1),設置塊大小,被用來通知對方新的最大的塊大小。

默認最大的塊大小為128字節,客戶端和服務器可以使用此消息來修改默認的塊大小。例如,假設客戶端想要發送的音頻數據大小為131字節,而塊大小為128字節。在這種情況下,客戶端可以通知服務器新的塊大小為131字節,然后就可以使用一個塊來發送完整的音頻數據了。

最大的塊大小至少為128字節,塊至少攜帶1個字節的內容。通信的每一個方向(例如從客戶端到服務器)擁有獨立的塊大小設置。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|0| chunk size (31 bits) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Payload for the ‘Set Chunk Size’ protocol message

0
當前比特位必須為零。

chunk size (31 bits): This field holds the new maximum chunk size,
in bytes, which will be used for all of the sender’s subsequent
chunks until further notice. Valid sizes are 1 to 2147483647
(0x7FFFFFFF) inclusive; however, all sizes greater than 16777215
(0xFFFFFF) are equivalent since no chunk is larger than one
message, and no message is larger than 16777215 bytes.
塊大小(31比特)
本字段標識了新的最大塊大小,以字節為單位,發送端之后將使用此值作為最大的塊大小。本字段的有效值為1-2147483647(0x7FFFFFFF),由于消息的最大長度為16777215(0xFFFFFF),而一個塊最多只能攜帶一條消息,因此本字段的實際有效值為1-16777215(0xFFFFFF)。

中斷消息 (2)

協議控制消息(2),中斷消息,用來通知通信的對方,如果正在等待一條消息的部分塊(已經接收了一部分),那么可以丟棄之前已經接收到的塊。通信的一方將接收到塊流ID作為當前協議消息的有效數據。應用程序可以發送此消息來通知對方,當前正在傳輸的消息沒有必要再處理了。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | chunk stream id (32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload for the ‘Abort Message’ protocol message

塊流ID(32比特)
本字段包含了塊流ID,用來標識哪個塊流ID的消息將被丟棄。

應答 (3)

客戶端和服務器在接收到與接收窗口大小相等的數據后,必須發送答應消息給對方。窗口大小的定義為發送方在接收到接收方的任何應答前,可以發送的最大數據量。本消息包含了序列號,序列號為截止目前接收到的數據總和,以字節為單位。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | sequence number (4 bytes) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload for the ‘Acknowledgement’ protocol message

序列號(32比特)
本字段包含了截止目前接收到的數據總和,以字節為單位。

應答窗口大小 (5)

客戶端和服務器發送這個消息來通知對方答應窗口的大小。發送方在發送了等于窗口大小的數據之后,等待接收對方的應答消息(在接收到答應之前停止發送數據)。接收方必須發送應答消息,在會話開始時,或從上一次發送應答之后接收到了等于窗口大小的數據。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgement Window size (4 bytes) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload for the ‘Window Acknowledgement Size’ protocol message

設置流帶寬 (6)

客戶端和服務器發送此消息來說明對方的出口帶寬限制。接收方以此來限制自己的出口帶寬,即限制未被答應的消息數據大小。接收到此消息的一方,如果窗口大小與上次發送的不一致,應該回復答應窗口大小的消息。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgement Window size | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Limit Type | +-+-+-+-+-+-+-+-+ Payload for the ‘Set Peer Bandwidth’ protocol message

限制類型的取值為下面之一:

硬限制(0)
應該限制出口帶寬為指明的窗口大小。

軟限制(1)
應該限制出口帶寬為指明的窗口大小,或已經生效的小一點的窗口大小。

動態限制(2)
如果上一次為硬限制,此消息被視為硬限制,否則忽略此消息。

RTMP消息格式

本章描述了RTMP消息的格式,使用網絡傳輸層在兩個實體端之間做數據傳輸,例如RTMP塊流。由于RTMP協議基于RTMP塊流,因此可以適配任何傳輸協議。RTMP塊流和RTMP相結合,可以廣泛的使用于音視頻應用,點對點,點對多的廣播應用,點播服務,以及交互式會議應用。

RTMP消息格式

服務器和客戶端通過網絡發送RTMP消息來和對方交流。消息可以包含音頻,視頻,或其他消息。

RTMP消息有兩部分組成,頭部和有效數據。

消息頭

消息頭部包含以下字段:

消息類型
消息類型,1字節長度。從1到6的ID被保留用于協議控制消息。

長度
消息的有效數據大小,3字節長度。使用大端方式。

時間戳
消息的時間戳,4字節長度。使用大端方式。

消息流ID
消息流標識,3字節長度。使用大端方式。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Type | Payload length | | (1 byte) | (3 bytes) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Timestamp | | (4 bytes) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Stream ID | | (3 bytes) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Message Header

消息的有效數據

RTMP消息的另一部分是有效數據,存放的是真正的消息數據內容。例如,一些音頻采樣,或壓縮過的視頻數據。有關數據的格式和解釋不在本章節說明。

用戶控制消息 (4)

用戶控制消息的類型為4。此消息位于RTMP協議流層。RTMP塊流使用消息類型ID 1、2、3、5、6作為控制消息(見第5.4章)。

用戶控制消息應該使用0作為消息流ID,當通過RTMP塊流發送此消息時,塊流ID為2。RTMP流中的用戶控制消息在接收時立即生效,消息中的時間戳被忽略。

客戶端或服務器發送此消息用來通知對方用戶控制事件。此消息包含事件類型和事件數據。

+------------------------------+------------------------| Event Type (16 bits) | Event Data+------------------------------+-------------------------Payload for the ‘User Control’ protocol message

用戶控制消息的前2個字節數據用來標識事件類型。事件類型后面是事件數據。事件數據字段是可變的。由于此消息是通過RTMP塊流層發送的,塊大小的最大值(第5.4.1章節)應該滿足在一個塊里包含此消息。

有關事件類型和事件數據格式的說明見第7.1.7章節。

RTMP命令消息

這部分描述了服務器和客戶端之間交互使用到的不同類型的消息和命令。

服務器和客戶端之間交互的消息類型包括:用于發送音頻數據的音頻消息,用于發送視頻數據的視頻消息,用于發送用戶自定義數據、共享對象和命令的數據消息。共享對象提供了一種通用的方式來管理多個客戶端和服務器之間的分布式消息。命令消息使用AMF編碼的命令在客戶端和服務器之間交互??蛻舳嘶蚍掌骺梢酝ㄕ埱筮h程過程調用(RPC),使用命令消息和對方交流。

消息類型

服務器和客戶端通過網絡進行消息交互。消息可以是音頻消息、視頻消息、命令消息、共享對象消息、數據消息和用戶自定義消息。

命令消息(20, 17)

服務器和客戶端之間使用AMF編碼的命令消息交互。命令消息在AMF0編碼中,類型為20;在AMF3編碼中,類型為17。一些命令消息被用來發送操作指令,比如connect, createStream, publish, play, pause。另外一些命令消息被用來通知發送方請求命令的狀態,比如onstatus, result等。一條命令消息包括命令名稱、交互ID、包含相關參數的命令對象。服務器和客戶端通過在創建的流中遠程調用的方式,使用命令消息來進行交互。

數據消息 (18, 15)

客戶端或服務器使用此消息來發送元數據或其他用戶數據。元數據包含了(音視頻)數據的細節信息,像流的創建時間,時間點,主題等等。數據消息在AMF0編碼中,類型為18;在AMF3編碼中,類型為15。

共享對象消息 (19, 16)

共享對象是Flash對象,可以通過多客戶端,實例同步傳輸。在AMF0編碼中,類型為19;在AMF3編碼中,類型為16。每個消息可以包含多個事件。

+------+------+-------+-----+-----+------+-----+ +-----+------+-----+|Header|Shared|Current|Flags|Event|Event |Event|.|Event|Event |Event| | |Object|Version| |Type |data |data |.|Type |data |data | | |Name | | | |length| |.| |length| | +------+------+-------+-----+-----+------+-----+ +-----+------+-----+ | | |<- - - - - - - - - - - - - - - - - - - - - - - - - - - - - >| | AMF Shared Object Message body | The shared object message format

下面是共享消息支持的事件類型:

+---------------+--------------------------------------------------+| Event | Description |+---------------+--------------------------------------------------+| Use(=1) | The client sends this event to inform the server | | | about the creation of a named shared object. | +---------------+--------------------------------------------------+ | Release(=2) | The client sends this event to the server when | | | the shared object is deleted on the client side. | +---------------+--------------------------------------------------+ | Request Change| The client sends this event to request that the | | (=3) | change the value associated with a named | | | parameter of the shared object. | +---------------+--------------------------------------------------+ | Change (=4) | The server sends this event to notify all | | | clients, except the client originating the | | | request, of a change in the value of a named | | | parameter. | +---------------+--------------------------------------------------+ | Success (=5) | The server sends this event to the requesting | | | client in response to RequestChange event if the | | | request is accepted. | +---------------+--------------------------------------------------+ | SendMessage | The client sends this event to the server to | | (=6) | broadcast a message. On receiving this event, | | | the server broadcasts a message to all the | | | clients, including the sender. | +---------------+--------------------------------------------------+ | Status (=7) | The server sends this event to notify clients | | | about error conditions. | +---------------+--------------------------------------------------+ | Clear (=8) | The server sends this event to the client to | | | clear a shared object. The server also sends | | | this event in response to Use event that the | | | client sends on connect. | +---------------+--------------------------------------------------+ | Remove (=9) | The server sends this event to have the client | | | delete a slot. | +---------------+--------------------------------------------------+ | Request Remove| The client sends this event to have the client | | (=10) | delete a slot. | +---------------+--------------------------------------------------+ | Use Success | The server sends this event to the client on a | | (=11) | successful connection. | +---------------+--------------------------------------------------+

音頻消息 (8)

客戶端或服務器使用此消息來發送音頻消息。此消息的類型為8。

視頻消息 (9)

客戶端或服務器使用此消息來發送視頻消息。此消息的類型為9。

集合消息 (22)

集合消息是一個獨立消息,包含了一系列的RTMP消息,格式描述見6.1章。此消息的類型為22。

集合消息由消息頭和消息內容組成。
消息內容由子消息組成,子消息由消息頭,消息數據,回放指針組成。

+---------+-------------------------+| Header | Aggregate Message body |+---------+-------------------------+The Aggregate Message format+--------+-------+---------+--------+-------+---------+ - - - -|Header 0|Message|Back |Header 1|Message|Back || |Data 0 |Pointer 0| |Data 1 |Pointer 1| +--------+-------+---------+--------+-------+---------+ - - - - The Aggregate Message body format

集合消息的消息流ID覆蓋此消息內的子消息流的ID。

集合消息和第一個子消息的時間戳之間的偏移量,用來將子消息的時間戳處理為流的時間刻度。每個子消息的時間戳可以通過添加偏移量來處理為正常的流時間。第一個子消息的時間戳應該和集合消息的時間戳相同,因此偏移量應該為零。

反向指針包含了以前的消息(包含頭信息)的大小。集合消息包含此字段,一是為了適配FLV文件格式,二是為了回放定位。

使用集合消息有如下幾個優勢:

塊流在一個塊內至多可以攜帶一條完整的消息。使用集合消息之后,不僅可以增加塊大小,同時還減少了發送的塊數量。

集合消息的子消息可以連續的存儲在內存中。當系統調用網絡發送數據時更高效。

用戶控制消息事件

客戶端或服務器通過發送此消息來通知對方用戶控制事件。此消息的格式信息詳見第6.2章節。

用戶控制事件支持如下類型:

流開始事件(0)

+---------------+--------------------------------------------------+| Event | Description |+---------------+--------------------------------------------------+|Stream Begin | The server sends this event to notify the client | | (=0) | that a stream has become functional and can be | | | used for communication. By default, this event | | | is sent on ID 0 after the application connect | | | command is successfully received from the | | | client. The event data is 4-byte and represents | | | the stream ID of the stream that became | | | functional. | +---------------+--------------------------------------------------+ | Stream EOF | The server sends this event to notify the client | | (=1) | that the playback of data is over as requested | | | on this stream. No more data is sent without | | | issuing additional commands. The client discards | | | the messages received for the stream. The | | | 4 bytes of event data represent the ID of the | | | stream on which playback has ended. | +---------------+--------------------------------------------------+ | StreamDry | The server sends this event to notify the client | | (=2) | that there is no more data on the stream. If the | | | server does not detect any message for a time | | | period, it can notify the subscribed clients | | | that the stream is dry. The 4 bytes of event | | | data represent the stream ID of the dry stream. | +---------------+--------------------------------------------------+ | SetBuffer | The client sends this event to inform the server | | Length (=3) | of the buffer size (in milliseconds) that is | | | used to buffer any data coming over a stream. | | | This event is sent before the server starts | | | processing the stream. The first 4 bytes of the | | | event data represent the stream ID and the next | | | 4 bytes represent the buffer length, in | | | milliseconds. | +---------------+--------------------------------------------------+ | StreamIs | The server sends this event to notify the client | | Recorded (=4) | that the stream is a recorded stream. The | | | 4 bytes event data represent the stream ID of | | | the recorded stream. | +---------------+--------------------------------------------------+ | PingRequest | The server sends this event to test whether the | | (=6) | client is reachable. Event data is a 4-byte | | | timestamp, representing the local server time | | | when the server dispatched the command. The | | | client responds with PingResponse on receiving | | | MsgPingRequest. | +---------------+--------------------------------------------------+ | PingResponse | The client sends this event to the server in | | (=7) | response to the ping request. The event data is | | | a 4-byte timestamp, which was received with the | | | PingRequest request. | +---------------+--------------------------------------------------+

命令類型

客戶端和服務器通過AMF編碼的數據交換命令。發送者發送包含命令名稱,事務ID,包含相關參數的命令對象的消息。例如,通過連接命令中包含的APP參數來告訴服務器連接的對方是哪個客戶端。接收方處理命令消息,并使用相同的事務ID應答。應答字符串為_result或_error或方法名,例如verifyClient或contactExternalServer。事務ID標明了應答指向的命令。事務ID相當于IMAP協議或其他協議中的標簽。命令字符串中的方法名,表明了發送端想要在接收端執行的方法。

下面的類對象被用來發送各種命令:

NetConnection
服務器和客戶端之間進行網絡連接的一種高級表示形式。

NetStream
代表了發送音頻流,視頻流,或其他相關數據的頻道。當然還有一些像播放,暫停之類的命令,用來控制數據流。

網絡連接命令

網絡連接管理著客戶端和服務器之初是的雙向連接。另外,它也支持異步遠程命令調用。
網絡連接允許使用以下的命令:
連接 connect
調用 call
停止 close
創建流 createStream

連接

客戶端發送連接命令給服務器,來獲取一個和服務器通信的實例??蛻舳税l送給服務器的命令結構如下:

+----------------+---------+---------------------------------------+| Field Name | Type | Description |+--------------- +---------+---------------------------------------+| Command Name | String | Name of the command. Set to "connect".| +----------------+---------+---------------------------------------+ | Transaction ID | Number | Always set to 1. | +----------------+---------+---------------------------------------+ | Command Object | Object | Command information object which has | | | | the name-value pairs. | +----------------+---------+---------------------------------------+ | Optional User | Object | Any optional information | | Arguments | | | +----------------+---------+---------------------------------------+

下面是連接命令的命令對象里包含的鍵值對的說明:

+-----------+--------+-----------------------------+----------------+| Property | Type | Description | Example Value | +-----------+--------+-----------------------------+----------------+ | app | String | The Server application name | testapp | | | | the client is connected to. | | +-----------+--------+-----------------------------+----------------+ | flashver | String | Flash Player version. It is | FMSc/1.0 | | | | the same string as returned | | | | | by the ApplicationScript | | | | | getversion () function. | | +-----------+--------+-----------------------------+----------------+ | swfUrl | String | URL of the source SWF file | file://C:/ | | | | making the connection. | FlvPlayer.swf | +-----------+--------+-----------------------------+----------------+ | tcUrl | String | URL of the Server. | rtmp://local | | | | It has the following format.| host:1935/test | | | | protocol://servername:port/ | app/instance1 | | | | appName/appInstance | | +-----------+--------+-----------------------------+----------------+ | fpad | Boolean| True if proxy is being used.| true or false | +-----------+--------+-----------------------------+----------------+ |audioCodecs| Number | Indicates what audio codecs | SUPPORT_SND | | | | the client supports. | _MP3 | +-----------+--------+-----------------------------+----------------+ |videoCodecs| Number | Indicates what video codecs | SUPPORT_VID | | | | are supported. | _SORENSON | +-----------+--------+-----------------------------+----------------+ |videoFunct-| Number | Indicates what special video| SUPPORT_VID | |ion | | functions are supported. | _CLIENT_SEEK | +-----------+--------+-----------------------------+----------------+ | pageUrl | String | URL of the web page from | http:// | | | | where the SWF file was | somehost/ | | | | loaded. | sample.html | +-----------+--------+-----------------------------+----------------+ | object | Number | AMF encoding method. | AMF3 | | Encoding | | | | +-----------+--------+-----------------------------+----------------+

音頻編碼屬性的可選值:
原始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 | 0x0020 | | | compression | | +----------------------+----------------------------+--------------+ | SUPPORT_SND_NELLY | NellyMoser compression | 0x0040 | | | (5, 11, 22, and 44 kHz) | | +----------------------+----------------------------+--------------+ | SUPPORT_SND_G711A | G711A sound compression | 0x0080 | | | (Flash Media Server only) | | +----------------------+----------------------------+--------------+ | SUPPORT_SND_G711U | G711U sound compression | 0x0100 | | | (Flash Media Server only) | | +----------------------+----------------------------+--------------+ | SUPPORT_SND_NELLY16 | NellyMouser at 16-kHz | 0x0200 | | | compression | | +----------------------+----------------------------+--------------+ | SUPPORT_SND_AAC | Advanced audio coding | 0x0400 | | | (AAC) codec | | +----------------------+----------------------------+--------------+ | SUPPORT_SND_SPEEX | Speex Audio | 0x0800 | +----------------------+----------------------------+--------------+ | SUPPORT_SND_ALL | All RTMP-supported audio | 0x0FFF | | | codecs | | +----------------------+----------------------------+--------------+

視頻編碼屬性的可選值:
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 video with alpha | 0x0020 | | (On2 with alpha | channel | | | channel) | | | +----------------------+----------------------------+--------------+ | SUPPORT_VID_HOMEBREWV| Screen sharing version 2 | 0x0040 | | (screensharing v2) | (Flash 8+) | | +----------------------+----------------------------+--------------+ | SUPPORT_VID_H264 | H264 video | 0x0080 | +----------------------+----------------------------+--------------+ | SUPPORT_VID_ALL | All RTMP-supported video | 0x00FF | | | codecs | | +----------------------+----------------------------+--------------+

視頻函數屬性的可選值:

+----------------------+----------------------------+--------------+| Function Flag | Usage | Value |+----------------------+----------------------------+--------------+| SUPPORT_VID_CLIENT | Indicates that the client | 1 || _SEEK | can perform frame-accurate | || | seeks. | |+----------------------+----------------------------+--------------+

對象編碼屬性的可選值:

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

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

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | _result or _error; indicates whether || | | the response is result or error. |+--------------+----------+----------------------------------------+| Transaction | Number | Transaction ID is 1 for connect || ID | | responses || | | |+--------------+----------+----------------------------------------+| Properties | Object | Name-value pairs that describe the | | | | properties(fmsver etc.) of the | | | | connection. | +--------------+----------+----------------------------------------+ | Information | Object | Name-value pairs that describe the | | | | response from|the server. ’code’, | | | | ’level’, ’description’ are names of few| | | | among such information. | +--------------+----------+----------------------------------------+ +--------------+ +-------------+| Client | | | Server |+------+-------+ | +------+------+| Handshaking done | | | | | | | | | | | | | |----------- Command Message(connect) ------->| | | |<------- Window Acknowledgement Size --------| | | |<----------- Set Peer Bandwidth -------------| | | |-------- Window Acknowledgement Size ------->| | | |<------ User Control Message(StreamBegin) ---| | | |<------------ Command Message ---------------| | (_result- connect response) | | | Message flow in the connect command

命令執行過程中的消息流如下:
客戶端發送連接命令給服務器,獲得與服務器連接的實例。
服務器在接收到連接命令后,發送應答窗口大小的消息給客戶端。同時與連接命令中接到的應用建立連接。
服務器發送設置流帶寬消息給客戶端。
客戶端在接收并處理了設置流帶寬的消息后,發送應答窗口大小的消息給服務器。
服務器接著發送開始流的用戶控制消息給客戶端。
服務器發送result命令消息給客戶端,通知連接狀態是成功或失敗。命令消息中包含了事務ID。消息中還包含了像FMS版本之類的屬性,以及級別,編碼,描述,對象編碼等信息。

調用

網絡連接對象中包含的call方法,會在接收端執行遠程過程調用(RPC)。被調用的RPC方法名作為call方法的參數傳輸。

從發送端到接收端的命令結構如下:

+--------------+----------+----------------------------------------+|Field Name | Type | Description |+--------------+----------+----------------------------------------+| Procedure | String | Name of the remote procedure that is || Name | | called. |+--------------+----------+----------------------------------------+| Transaction | Number | If a response is expected we give a | | | | transaction Id. Else we pass a value of| | ID | | 0 | +--------------+----------+----------------------------------------+ | Command | Object | If there exists any command info this | | Object | | is set, else this is set to null type. | +--------------+----------+----------------------------------------+ | Optional | Object | Any optional arguments to be provided | | Arguments | | | +--------------+----------+----------------------------------------+

應答的命令結構如下:

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command. || | | |+--------------+----------+----------------------------------------+| Transaction | Number | ID of the command, to which the || ID | | response belongs.+--------------+----------+----------------------------------------+| Command | Object | If there exists any command info this | | Object | | is set, else this is set to null type. | +--------------+----------+----------------------------------------+ | Response | Object | Response from the method that was | | | | called. | +------------------------------------------------------------------+
創建流

客戶端通過發送此消息給服務器來創建一個用于消息交互的邏輯通道。音頻,視頻,和元數據都是通過createStream命令創建的流通道發布出去的。

NetConnection是默認的交互通道,流ID為0。協議和一部分命令消息,包含createStream,都是使用默認的交互通道發布的。

從客戶端發送給服務器的命令結構如下:

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command. Set to || | | "createStream". | +--------------+----------+----------------------------------------+ | Transaction | Number | Transaction ID of the command. | | ID | | | +--------------+----------+----------------------------------------+ | Command | Object | If there exists any command info this | | Object | | is set, else this is set to null type. | +--------------+----------+----------------------------------------+

從服務器發送給客戶端的命令結構:

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | _result or _error; indicates whether || | | the response is result or error. |+--------------+----------+----------------------------------------+| Transaction | Number | ID of the command that response belongs|| ID | | to. |+--------------+----------+----------------------------------------+| Command | Object | If there exists any command info this || Object | | is set, else this is set to null type. | +--------------+----------+----------------------------------------+ | Stream | Number | The return value is either a stream ID | | ID | | or an error information object. | +--------------+----------+----------------------------------------+

網絡流命令

網絡流定義了通過網絡連接把音頻,視頻和數據消息流在客戶端和服務器之間進行交換的通道。一個網絡連接對象可以多個網絡流,進而支持多個數據流。

客戶端可以通過網絡流發送到服務器的命令如下:

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

服務器通過發送onStatus命令給客戶端來通知網絡流狀態的更新。

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | The command name "onStatus". |+--------------+----------+----------------------------------------+| Transaction | Number | Transaction ID set to 0. | | ID | | | +--------------+----------+----------------------------------------+ | Command | Null | There is no command object for | | Object | | onStatus messages. | +--------------+----------+----------------------------------------+ | Info Object | Object | An AMF object having at least the | | | | following three properties: "level" | | | | (String): the level for this message, | | | | one of "warning", "status", or "error";| | | | "code" (String): the message code, for | | | | example "NetStream.Play.Start"; and | | | | "description" (String): a human- | | | | readable description of the message. | | | | The Info object MAY contain other | | | | properties as appropriate to the code. | +--------------+----------+----------------------------------------+ Format of NetStream status message commands.
播放

客戶端發送此命令來通知服務器開始播放流。多次使用此命令可以創建一個播放列表。如果想要創建一個動態播放列表來在不同的直播或點播流之間切換,可以通過多次調用播放命令,同時將Reset字段設置為false。相反,如果想要立即播放指定的流,先清理掉之前的播放隊列,再調用播放命令,同時將Reset字段設置為true。

從客戶端發送給服務器的命令結構如下:

+--------------+----------+-----------------------------------------+| Field Name | Type | Description |+--------------+----------+-----------------------------------------+| Command Name | String | Name of the command. Set to "play". | +--------------+----------+-----------------------------------------+ | Transaction | Number | Transaction ID set to 0. | | ID | | | +--------------+----------+-----------------------------------------+ | Command | Null | Command information does not exist. | | Object | | Set to null type. | +--------------+----------+-----------------------------------------+ | Stream Name | String | Name of the stream to play. | | | | To play video (FLV) files, specify the | | | | name of the stream without a file | | | | extension (for example, "sample"). To | | | | play back MP3 or ID3 tags, you must | | | | precede the stream name with mp3: | | | | (for example, "mp3:sample". To play | | | | H.264/AAC files, you must precede the | | | | stream name with mp4: and specify the | | | | file extension. For example, to play the| | | | file sample.m4v,specify "mp4:sample.m4v"| | | | | +--------------+----------+-----------------------------------------+ | Start | Number | An optional parameter that specifies | | | | the start time in seconds. The default | | | | value is -2, which means the subscriber | | | | first tries to play the live stream | | | | specified in the Stream Name field. If a| | | | live stream of that name is not found,it| | | | plays the recorded stream of the same | | | | name. If there is no recorded stream | | | | with that name, the subscriber waits for| | | | a new live stream with that name and | | | | plays it when available. If you pass -1 | | | | in the Start field, only the live stream| | | | specified in the Stream Name field is | | | | played. If you pass 0 or a positive | | | | number in the Start field, a recorded | | | | stream specified in the Stream Name | | | | field is played beginning from the time | | | | specified in the Start field. If no | | | | recorded stream is found, the next item | | | | in the playlist is played. | +--------------+----------+-----------------------------------------+ | Duration | Number | An optional parameter that specifies the| | | | duration of playback in seconds. The | | | | default value is -1. The -1 value means | | | | a live stream is played until it is no | | | | longer available or a recorded stream is| | | | played until it ends. If you pass 0, it | | | | plays the single frame since the time | | | | specified in the Start field from the | | | | beginning of a recorded stream. It is | | | | assumed that the value specified in | | | | the Start field is equal to or greater | | | | than 0. If you pass a positive number, | | | | it plays a live stream for | | | | the time period specified in the | | | | Duration field. After that it becomes | | | | available or plays a recorded stream | | | | for the time specified in the Duration | | | | field. (If a stream ends before the | | | | time specified in the Duration field, | | | | playback ends when the stream ends.) | | | | If you pass a negative number other | | | | than -1 in the Duration field, it | | | | interprets the value as if it were -1. | +--------------+----------+-----------------------------------------+ | Reset | Boolean | An optional Boolean value or number | | | | that specifies whether to flush any | | | | previous playlist. | +--------------+----------+-----------------------------------------+ +-------------+ +----------+| Play Client | | | Server |+------+------+ | +-----+----+ | Handshaking and Application | | connect done | | | | | | | | | | | | | ---+---- |------Command Message(createStream) ----->| Create| | | Stream| | | ---+---- |<---------- Command Message --------------| | (_result- createStream response) | | | ---+---- |------ Command Message (play) ----------->| | | | | |<------------ SetChunkSize --------------| | | | | |<---- User Control (StreamIsRecorded) ----| Play | | | | |<---- User Control (StreamBegin) ---------| | | | | |<--Command Message(onStatus-play reset) --| | | | | |<--Command Message(onStatus-play start) --| | | | | |<-------------Audio Message---------------| | | | | |<-------------Video Message---------------| | | | | | Keep receiving audio and video stream till finishes Message flow in the play command

命令執行過程中的消息流如下:
當客戶端接收到服務器返回的createStream成功的消息時,開始發送播放命令。
服務器接收到播放命令后,發送設置塊大小的消息。
服務器發送一條用戶控制消息,消息內包含了StreamIsRecorded事件和流ID。事件類型位于消息的前2個字節,流ID位于消息的最后4個字節。
服務器發送一條用戶控制消息,消息內包含了StreamBegin事件,用于通知客戶端開始播放流。
如果客戶端已經成功發送了播放命令,那么服務器發送兩條onStatus命令給客戶端,命令的內容為NetStream.Play.Start 和 NetStream.Play.Reset。服務器只有在客戶端發送了設置有重置標簽的播放命令后,才能發送NetStream.Play.Reset命令。如果服務器找不到客戶端請求播放的流,那么發送NetStream.Play.StreamNotFound命令給客戶端。
之后,服務器發送音頻和視頻數據給客戶端。

播放2

與播放命令的不同之處在于,播放2命令可以在不修改播放內容時間線的前提下切換到一個不同碼率的流。服務器包含了多個不同碼率的流文件用于支持客戶端的播放2請求。

The command structure from the client to the server is as follows:+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command, set to "play2". | +--------------+----------+----------------------------------------+ | Transaction | Number | Transaction ID set to 0. | | ID | | | +--------------+----------+----------------------------------------+ | Command | Null | Command information does not exist. | | Object | | Set to null type. | +--------------+----------+----------------------------------------+ | Parameters | Object | An AMF encoded object whose properties | | | | are the public properties described | | | | for the flash.net.NetStreamPlayOptions | | | | ActionScript object. | +--------------+----------+----------------------------------------+

有關NetStreamPlayOptions對象的公開屬性的說明詳見AS3語言的文檔。

此命令的消息流如下圖所示:

+--------------+ +-------------+| 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
刪除流

如果需要銷毀網絡流對象,可以通過網絡流發送刪除流消息給服務器。

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

The command structure from the client to the server is as follows:+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command, set to || | | "deleteStream". | +--------------+----------+----------------------------------------+ | Transaction | Number | Transaction ID set to 0. | | ID | | | +--------------+----------+----------------------------------------+ | Command | Null | Command information object does not | | Object | | exist. Set to null type. | +--------------+----------+----------------------------------------+ | Stream ID | Number | The ID of the stream that is destroyed | | | | on the server. | +--------------+----------+----------------------------------------+

服務器接收到此消息后,不做任何回復。

接收音頻

網絡流發送此消息通知服務器,是否要發送音頻數據給客戶端。

The command structure from the client to the server is as follows:+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command, set to || | | "receiveAudio". | +--------------+----------+----------------------------------------+ | Transaction | Number | Transaction ID set to 0. | | ID | | | +--------------+----------+----------------------------------------+ | Command | Null | Command information object does not | | Object | | exist. Set to null type. | +--------------+----------+----------------------------------------+ | Bool Flag | Boolean | true or false to indicate whether to | | | | receive audio or not. | +--------------+----------+----------------------------------------+

如果服務器接收到帶有flase標簽的消息后,不做任何回復。如果接收到帶有true標簽的消息,服務器回復帶有NetStream.Seek.Notify和NetStream.Play.Start的消息給客戶端。

接收視頻

網絡流發送此消息通知服務器,是否要發送視頻數據給客戶端。

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

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command, set to || | | "receiveVideo". | +--------------+----------+----------------------------------------+ | Transaction | Number | Transaction ID set to 0. | | ID | | | +--------------+----------+----------------------------------------+ | Command | Null | Command information object does not | | Object | | exist. Set to null type. | +--------------+----------+----------------------------------------+ | Bool Flag | Boolean | true or false to indicate whether to | | | | receive video or not. | +--------------+----------+----------------------------------------+

如果服務器接收到帶有flase標簽的消息后,不做任何回復。如果接收到帶有true標簽的消息,服務器回復帶有NetStream.Seek.Notify和NetStream.Play.Start的消息給客戶端。

發布

客戶端發送此消息,用來發布一個有名字的流到服務器。其他客戶端可以使用此流名來播放流,接收發布的音頻,視頻,以及其他數據消息。

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

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command, set to "publish". | +--------------+----------+----------------------------------------+ | Transaction | Number | Transaction ID set to 0. | | ID | | | +--------------+----------+----------------------------------------+ | Command | Null | Command information object does not | | Object | | exist. Set to null type. | +--------------+----------+----------------------------------------+ | Publishing | String | Name with which the stream is | | Name | | published. | +--------------+----------+----------------------------------------+ | Publishing | String | Type of publishing. Set to "live", | | Type | | "record", or "append". | | | | record: The stream is published and the| | | | data is recorded to a new file.The file| | | | is stored on the server in a | | | | subdirectory within the directory that | | | | contains the server application. If the| | | | file already exists, it is overwritten.| | | | append: The stream is published and the| | | | data is appended to a file. If no file | | | | is found, it is created. | | | | live: Live data is published without | | | | recording it in a file. | +--------------+----------+----------------------------------------+

服務器接收到此消息后,回復onStatus命令來標記發布的開始。

定位

客戶端發送此消息來定位多媒體文件或播放列表的偏移(以毫秒為單位)。

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

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command, set to "seek". | +--------------+----------+----------------------------------------+ | Transaction | Number | Transaction ID set to 0. | | ID | | | +--------------+----------+----------------------------------------+ | Command | Null | There is no command information object | | Object | | for this command. Set to null type. | +--------------+----------+----------------------------------------+ | milliSeconds | Number | Number of milliseconds to seek into | | | | the playlist. | +--------------+----------+----------------------------------------+

當定位完成后,服務器回復NetStream.Seek.Notify狀態消息給客戶端。如果定位失敗,將回復_error消息。

暫停

客戶端發送此消息來通知服務器暫?;蜷_始播放。

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

+--------------+----------+----------------------------------------+| Field Name | Type | Description |+--------------+----------+----------------------------------------+| Command Name | String | Name of the command, set to "pause". | +--------------+----------+----------------------------------------+ | Transaction | Number | There is no transaction ID for this | | ID | | command. Set to 0. | +--------------+----------+----------------------------------------+ | Command | Null | Command information object does not | | Object | | exist. Set to null type. | +--------------+----------+----------------------------------------+ |Pause/Unpause | Boolean | true or false, to indicate pausing or | | Flag | | resuming play | +--------------+----------+----------------------------------------+ | milliSeconds | Number | Number of milliseconds at which the | | | | the stream is paused or play resumed. | | | | This is the current stream time at the | | | | Client when stream was paused. When the| | | | playback is resumed, the server will | | | | only send messages with timestamps | | | | greater than this value. | +--------------+----------+----------------------------------------+

當流暫停成功,服務器發送NetStream.Pause.Notify狀態消息經給客戶端,如果流未暫停,服務器發送NetStream.Unpause.Notify狀態消息給客戶端。如果暫停失敗,則發送_error消息。

消息交互示例

下面是一些使用RTMP協議交互消息的示例。

發布錄制的視頻

此示例闡述了發布者如何發布視頻流到服務器。其他客戶端可以訂閱并播放此視頻流。

+--------------------+ +-----------+| Publisher Client | | | Server |+----------+---------+ | +-----+-----+ | Handshaking Done | | | | | | | ---+---- |----- Command Message(connect) ----->| | | | | |<----- Window Acknowledge Size ------| Connect | | | | |<-------Set Peer BandWidth ----------| | | | | |------ Window Acknowledge Size ----->| | | | | |<------User Control(StreamBegin)-----| | | | ---+---- |<---------Command Message -----------| | (_result- connect response) | | | ---+---- |--- Command Message(createStream)--->| Create | | | Stream | | | ---+---- |<------- Command Message ------------| | (_result- createStream response) | | | ---+---- |---- Command Message(publish) ------>| | | | | |<------User Control(StreamBegin)-----| | | | | |-----Data Message (Metadata)-------->| | | | Publishing| |------------ Audio Data ------------>| Content | | | | |------------ SetChunkSize ---------->| | | | | |<----------Command Message ----------| | | (_result- publish result) | | | | | |------------- Video Data ----------->| | | | | | | | | | Until the stream is complete | | | | Message flow in publishing a video stream

廣播共享對象消息

此示例闡述了流創建過程中的消息交換,和共享對象的變換過程。同時還展示了共享對象消息廣播的處理過程。

+----------+ +----------+| Client | | | Server |+-----+----+ | +-----+----+| Handshaking and Application || connect done || | || | || | || | |Create and ---+---- |---- Shared Object Event(Use)---->| connect | | | Shared Object | | | ---+---- |<---- Shared Object Event---------| | (UseSuccess,Clear) | | | ---+---- |------ Shared Object Event ------>| Shared object | | (RequestChange) | Set Property | | | ---+---- |<------ Shared Object Event ------| | (Success) | | | ---+---- |------- Shared Object Event ----->| Shared object| | (SendMessage) | Message | | | Broadcast ---+---- |<------- Shared Object Event -----| | (SendMessage) | | | | | Shared object message broadcast

從錄制的流發布元數據

本示例展示了發布元數據的消息交換過程。

+------------------+ +---------+| Publisher Client | | | FMS |+---------+--------+ | +----+----+| Handshaking and Application || connect done || | || | |---+--- |---Command Messsage(createStream) -->|Create | | |Stream | | |---+--- |<---------Command Message------------| | (_result - command response) | | | ---+--- |---- Command Message(publish) ------>| Publishing | | | metadata | |<------ UserControl(StreamBegin)-----| from file | | | | |-----Data Message (Metadata) ------->| | | Publishing metadata

轉載于:https://www.cnblogs.com/workhardkangwei/p/6231596.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的RTMP协议中文翻译(首发)(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

99久久久国产精品无码免费 | 人人妻人人藻人人爽欧美一区 | 精品国产国产综合精品 | 亚洲国产日韩a在线播放 | 色婷婷香蕉在线一区二区 | 久久久久成人精品免费播放动漫 | 亚洲欧美日韩国产精品一区二区 | 无套内谢的新婚少妇国语播放 | 久久久中文字幕日本无吗 | 少妇高潮喷潮久久久影院 | 亚洲精品一区二区三区大桥未久 | 搡女人真爽免费视频大全 | 欧美黑人巨大xxxxx | 九九热爱视频精品 | 色老头在线一区二区三区 | 午夜无码人妻av大片色欲 | 欧美高清在线精品一区 | 玩弄少妇高潮ⅹxxxyw | 日本大乳高潮视频在线观看 | 76少妇精品导航 | 俺去俺来也www色官网 | 东京一本一道一二三区 | 亚洲七七久久桃花影院 | 内射后入在线观看一区 | 天天爽夜夜爽夜夜爽 | 亚洲欧美日韩成人高清在线一区 | 天天躁夜夜躁狠狠是什么心态 | 精品成在人线av无码免费看 | 曰本女人与公拘交酡免费视频 | 欧美人与物videos另类 | 成人亚洲精品久久久久软件 | 强伦人妻一区二区三区视频18 | 熟女少妇人妻中文字幕 | 亚洲の无码国产の无码影院 | 成人精品视频一区二区三区尤物 | 免费看少妇作爱视频 | 无码一区二区三区在线观看 | 无码成人精品区在线观看 | 偷窥日本少妇撒尿chinese | 97无码免费人妻超级碰碰夜夜 | 色欲综合久久中文字幕网 | 两性色午夜免费视频 | 国产精品爱久久久久久久 | 国产精品99久久精品爆乳 | 国产精品a成v人在线播放 | 亚洲爆乳大丰满无码专区 | 国产麻豆精品一区二区三区v视界 | 国产特级毛片aaaaaa高潮流水 | 夜夜高潮次次欢爽av女 | 亚洲天堂2017无码 | 漂亮人妻洗澡被公强 日日躁 | 成人无码影片精品久久久 | 中文精品无码中文字幕无码专区 | 国产午夜手机精彩视频 | 台湾无码一区二区 | 亚洲人交乣女bbw | 国产av剧情md精品麻豆 | 午夜男女很黄的视频 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产在线精品一区二区三区直播 | 捆绑白丝粉色jk震动捧喷白浆 | 精品人妻人人做人人爽夜夜爽 | 国产又粗又硬又大爽黄老大爷视 | 国产精品免费大片 | 精品一二三区久久aaa片 | 蜜桃视频韩日免费播放 | 无码纯肉视频在线观看 | 中文毛片无遮挡高清免费 | 黄网在线观看免费网站 | 成人aaa片一区国产精品 | 一二三四社区在线中文视频 | 国精产品一品二品国精品69xx | 福利一区二区三区视频在线观看 | 国产精品久久久av久久久 | 在线a亚洲视频播放在线观看 | 又大又黄又粗又爽的免费视频 | 88国产精品欧美一区二区三区 | 人妻少妇精品无码专区二区 | 中文字幕无线码 | av人摸人人人澡人人超碰下载 | 最近中文2019字幕第二页 | 亚洲中文字幕va福利 | 在线播放亚洲第一字幕 | 四虎影视成人永久免费观看视频 | 亚洲va欧美va天堂v国产综合 | 欧美亚洲国产一区二区三区 | 人妻插b视频一区二区三区 | 亚洲国产精品一区二区第一页 | 人人爽人人爽人人片av亚洲 | 内射老妇bbwx0c0ck | av无码久久久久不卡免费网站 | 精品国产青草久久久久福利 | 无码av岛国片在线播放 | 一区二区传媒有限公司 | 久久久婷婷五月亚洲97号色 | 日韩少妇内射免费播放 | 国产成人精品优优av | 精品亚洲成av人在线观看 | 99久久精品国产一区二区蜜芽 | 国产精品99久久精品爆乳 | 亚洲国产一区二区三区在线观看 | 国产黄在线观看免费观看不卡 | 精品国产乱码久久久久乱码 | 国产 浪潮av性色四虎 | 亚洲熟妇自偷自拍另类 | 亚洲精品美女久久久久久久 | 波多野结衣一区二区三区av免费 | 日本护士xxxxhd少妇 | 一区二区三区乱码在线 | 欧洲 | 亚洲综合精品香蕉久久网 | 天干天干啦夜天干天2017 | 网友自拍区视频精品 | 久久久久久久女国产乱让韩 | 欧美人与禽zoz0性伦交 | 又粗又大又硬毛片免费看 | 欧美一区二区三区视频在线观看 | 丰腴饱满的极品熟妇 | 精品亚洲韩国一区二区三区 | 熟妇人妻中文av无码 | 亚洲无人区午夜福利码高清完整版 | 小泽玛莉亚一区二区视频在线 | 国产婷婷色一区二区三区在线 | 日日橹狠狠爱欧美视频 | 亚洲s码欧洲m码国产av | 高潮毛片无遮挡高清免费 | 亚洲成a人片在线观看无码 | 小泽玛莉亚一区二区视频在线 | 女高中生第一次破苞av | 日韩人妻无码一区二区三区久久99 | 国产精品久久久久9999小说 | 免费人成网站视频在线观看 | 国产办公室秘书无码精品99 | 无码一区二区三区在线观看 | 欧美人与物videos另类 | 亚洲国产精华液网站w | 大地资源中文第3页 | 漂亮人妻洗澡被公强 日日躁 | 在线 国产 欧美 亚洲 天堂 | 国产精品高潮呻吟av久久 | 小鲜肉自慰网站xnxx | 最近的中文字幕在线看视频 | 国产亚洲精品精品国产亚洲综合 | 国产亚洲日韩欧美另类第八页 | 国产热a欧美热a在线视频 | 欧美激情内射喷水高潮 | 天天拍夜夜添久久精品 | 亚洲国产欧美国产综合一区 | 亚洲自偷自偷在线制服 | 亚洲男人av香蕉爽爽爽爽 | 无码精品人妻一区二区三区av | 中文字幕 亚洲精品 第1页 | 网友自拍区视频精品 | 亚洲欧美精品aaaaaa片 | 无码国产色欲xxxxx视频 | 国产一区二区三区影院 | 亚洲熟妇色xxxxx欧美老妇 | 性做久久久久久久久 | 欧美国产日韩久久mv | 国产精品18久久久久久麻辣 | 蜜臀av无码人妻精品 | 欧美日韩色另类综合 | 99精品视频在线观看免费 | 成人免费视频视频在线观看 免费 | 国产亚洲欧美在线专区 | 亚洲成a人片在线观看无码 | 亚洲小说春色综合另类 | 麻豆人妻少妇精品无码专区 | 午夜精品久久久久久久 | 国内丰满熟女出轨videos | 日韩欧美中文字幕在线三区 | 青青青爽视频在线观看 | 全球成人中文在线 | 内射巨臀欧美在线视频 | 无码任你躁久久久久久久 | 欧美日韩一区二区综合 | 又大又黄又粗又爽的免费视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 人人爽人人澡人人人妻 | 国产成人精品一区二区在线小狼 | 亚洲小说春色综合另类 | 亚洲国产精品久久人人爱 | 特黄特色大片免费播放器图片 | 人妻互换免费中文字幕 | 九九在线中文字幕无码 | 99久久精品无码一区二区毛片 | 300部国产真实乱 | 98国产精品综合一区二区三区 | 国内综合精品午夜久久资源 | 成人欧美一区二区三区黑人 | 野外少妇愉情中文字幕 | 国产午夜亚洲精品不卡 | 国产精品第一国产精品 | 亚洲欧美日韩国产精品一区二区 | 无码av最新清无码专区吞精 | 精品无码av一区二区三区 | 高中生自慰www网站 | 久久久精品456亚洲影院 | 一二三四在线观看免费视频 | 久久亚洲国产成人精品性色 | 国产真实伦对白全集 | 2019午夜福利不卡片在线 | 久久综合狠狠综合久久综合88 | 99久久亚洲精品无码毛片 | 18精品久久久无码午夜福利 | 无码av免费一区二区三区试看 | 亚洲国产午夜精品理论片 | 狠狠色噜噜狠狠狠7777奇米 | 俄罗斯老熟妇色xxxx | 亚洲狠狠婷婷综合久久 | 亚洲无人区一区二区三区 | 亚洲码国产精品高潮在线 | 欧美日本免费一区二区三区 | 国产成人无码av一区二区 | 青青青爽视频在线观看 | 性欧美大战久久久久久久 | 亚洲精品鲁一鲁一区二区三区 | 人妻互换免费中文字幕 | 99在线 | 亚洲 | 国产两女互慰高潮视频在线观看 | 日韩在线不卡免费视频一区 | 国内揄拍国内精品人妻 | 99国产精品白浆在线观看免费 | 1000部夫妻午夜免费 | 精品无人国产偷自产在线 | 免费看男女做好爽好硬视频 | 亚洲热妇无码av在线播放 | 一本久久a久久精品vr综合 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 久久人妻内射无码一区三区 | 亚洲日本一区二区三区在线 | 亲嘴扒胸摸屁股激烈网站 | 国产精品a成v人在线播放 | 性欧美疯狂xxxxbbbb | 国产精品无码成人午夜电影 | 国产精品久久久久久久影院 | 日韩欧美中文字幕在线三区 | 在线观看欧美一区二区三区 | 任你躁国产自任一区二区三区 | 九九久久精品国产免费看小说 | 亚洲精品午夜无码电影网 | 国产另类ts人妖一区二区 | 国产肉丝袜在线观看 | 在线 国产 欧美 亚洲 天堂 | 天海翼激烈高潮到腰振不止 | 扒开双腿吃奶呻吟做受视频 | 色婷婷综合中文久久一本 | 小泽玛莉亚一区二区视频在线 | 精品厕所偷拍各类美女tp嘘嘘 | 国产精品爱久久久久久久 | 妺妺窝人体色www在线小说 | 奇米影视888欧美在线观看 | 亚洲欧洲日本无在线码 | 人妻插b视频一区二区三区 | 中文无码成人免费视频在线观看 | 少妇无套内谢久久久久 | 国产艳妇av在线观看果冻传媒 | 蜜桃视频插满18在线观看 | 又大又硬又黄的免费视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品国产一区二区三区av 性色 | 久久成人a毛片免费观看网站 | 久久五月精品中文字幕 | 高清国产亚洲精品自在久久 | 久久精品国产亚洲精品 | 午夜无码区在线观看 | 图片小说视频一区二区 | 久久久久se色偷偷亚洲精品av | 激情人妻另类人妻伦 | 精品人妻人人做人人爽夜夜爽 | 国产无套粉嫩白浆在线 | 波多野结衣aⅴ在线 | 国产精品二区一区二区aⅴ污介绍 | 国产av一区二区精品久久凹凸 | 精品少妇爆乳无码av无码专区 | 亚洲一区二区三区在线观看网站 | 亚洲精品成a人在线观看 | 无遮挡国产高潮视频免费观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久久久久av无码免费看大片 | 性生交大片免费看女人按摩摩 | 亚洲中文字幕乱码av波多ji | 在线看片无码永久免费视频 | 六月丁香婷婷色狠狠久久 | 国产成人一区二区三区在线观看 | 99久久精品日本一区二区免费 | а√天堂www在线天堂小说 | 国产香蕉97碰碰久久人人 | 成人综合网亚洲伊人 | 精品人妻人人做人人爽夜夜爽 | 欧美自拍另类欧美综合图片区 | 综合人妻久久一区二区精品 | 一本大道伊人av久久综合 | 国产成人无码午夜视频在线观看 | 亚洲精品中文字幕久久久久 | 狠狠噜狠狠狠狠丁香五月 | 久久久亚洲欧洲日产国码αv | 亚洲另类伦春色综合小说 | 久久精品国产日本波多野结衣 | 国产熟妇另类久久久久 | 精品国偷自产在线视频 | 99久久精品无码一区二区毛片 | 全球成人中文在线 | 国产精品自产拍在线观看 | 中文字幕精品av一区二区五区 | 亚洲人成网站免费播放 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | av小次郎收藏 | 国产综合在线观看 | 国产精品久久久久久久9999 | 综合人妻久久一区二区精品 | 老司机亚洲精品影院无码 | 牲欲强的熟妇农村老妇女视频 | 人人妻人人藻人人爽欧美一区 | 国产成人精品三级麻豆 | 国产suv精品一区二区五 | 久久人人爽人人爽人人片av高清 | 蜜桃无码一区二区三区 | 欧美丰满少妇xxxx性 | 色婷婷香蕉在线一区二区 | √8天堂资源地址中文在线 | 日韩欧美群交p片內射中文 | 天堂а√在线中文在线 | 2019午夜福利不卡片在线 | 国产麻豆精品精东影业av网站 | 亚洲国产精品毛片av不卡在线 | 国产精品久久久久久久影院 | 亚洲综合伊人久久大杳蕉 | 亚洲国产精品一区二区第一页 | 自拍偷自拍亚洲精品10p | 中文精品无码中文字幕无码专区 | 欧美人与牲动交xxxx | 少妇人妻偷人精品无码视频 | 麻豆av传媒蜜桃天美传媒 | 久久久久久av无码免费看大片 | 久久久av男人的天堂 | 乌克兰少妇性做爰 | 国产精品无码成人午夜电影 | 中文毛片无遮挡高清免费 | 精品无人国产偷自产在线 | 亚洲成av人在线观看网址 | 中文字幕乱码亚洲无线三区 | 奇米影视7777久久精品人人爽 | 国产精品沙发午睡系列 | 国产无遮挡吃胸膜奶免费看 | 日本大乳高潮视频在线观看 | 欧美日韩亚洲国产精品 | 97精品国产97久久久久久免费 | 国产精品怡红院永久免费 | 精品亚洲成av人在线观看 | 无码任你躁久久久久久久 | 亚洲中文字幕在线无码一区二区 | 麻豆精品国产精华精华液好用吗 | 国产精品久久久久影院嫩草 | 欧美国产亚洲日韩在线二区 | 午夜精品一区二区三区的区别 | 蜜桃视频韩日免费播放 | 久久成人a毛片免费观看网站 | 国精产品一区二区三区 | 少妇人妻大乳在线视频 | 丰满肥臀大屁股熟妇激情视频 | 久久久中文字幕日本无吗 | 精品aⅴ一区二区三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产精品久久国产三级国 | 国产网红无码精品视频 | 亚洲狠狠婷婷综合久久 | 国産精品久久久久久久 | 日韩av无码一区二区三区不卡 | 人人超人人超碰超国产 | 免费无码一区二区三区蜜桃大 | 亚洲国产欧美日韩精品一区二区三区 | 男人扒开女人内裤强吻桶进去 | 99久久亚洲精品无码毛片 | 国产精品无码永久免费888 | 国内老熟妇对白xxxxhd | 国产熟妇另类久久久久 | v一区无码内射国产 | 在线观看国产一区二区三区 | 亚洲精品中文字幕久久久久 | 国产精品国产三级国产专播 | 久久久精品国产sm最大网站 | 亚洲色www成人永久网址 | 成人综合网亚洲伊人 | 亚洲自偷自偷在线制服 | 国产免费无码一区二区视频 | 亚洲gv猛男gv无码男同 | 欧美高清在线精品一区 | 亚洲精品美女久久久久久久 | 国产欧美亚洲精品a | 一本大道久久东京热无码av | 国产在线精品一区二区三区直播 | 给我免费的视频在线观看 | 人人超人人超碰超国产 | 正在播放东北夫妻内射 | 99久久精品国产一区二区蜜芽 | 久久精品一区二区三区四区 | 波多野结衣aⅴ在线 | 中文字幕色婷婷在线视频 | 成人亚洲精品久久久久 | 亚洲午夜无码久久 | 精品熟女少妇av免费观看 | 日韩人妻系列无码专区 | www国产亚洲精品久久网站 | 55夜色66夜色国产精品视频 | 久久久精品欧美一区二区免费 | 国产精品无码mv在线观看 | aⅴ亚洲 日韩 色 图网站 播放 | 国产精品久久久午夜夜伦鲁鲁 | 精品成在人线av无码免费看 | 欧美人与物videos另类 | 国产av无码专区亚洲awww | 欧美黑人性暴力猛交喷水 | 国产激情无码一区二区app | 东北女人啪啪对白 | 少妇高潮一区二区三区99 | 国产色视频一区二区三区 | 无码国内精品人妻少妇 | 亚洲午夜福利在线观看 | 一本大道久久东京热无码av | 东京无码熟妇人妻av在线网址 | 久久精品无码一区二区三区 | 18禁止看的免费污网站 | 亚洲色大成网站www国产 | 国产精品久久久久久亚洲影视内衣 | 亚洲无人区一区二区三区 | 欧美丰满老熟妇xxxxx性 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 波多野结衣av在线观看 | 国产精品va在线观看无码 | 亚洲 高清 成人 动漫 | 伊人久久大香线焦av综合影院 | 亚洲欧美日韩综合久久久 | 久久人人爽人人人人片 | 欧美 丝袜 自拍 制服 另类 | 久久久无码中文字幕久... | 日欧一片内射va在线影院 | 欧美高清在线精品一区 | 在线a亚洲视频播放在线观看 | 天海翼激烈高潮到腰振不止 | 亚洲综合精品香蕉久久网 | 久久久久久久久888 | 99久久久无码国产精品免费 | 中文毛片无遮挡高清免费 | 中文字幕 亚洲精品 第1页 | 中文字幕乱码人妻二区三区 | 中文字幕乱码人妻二区三区 | 久久国产36精品色熟妇 | 亚洲精品一区国产 | 国产综合色产在线精品 | 国产成人一区二区三区在线观看 | 日日橹狠狠爱欧美视频 | 少妇高潮喷潮久久久影院 | 亚洲精品综合一区二区三区在线 | 性生交大片免费看l | 亚洲va欧美va天堂v国产综合 | 午夜肉伦伦影院 | 亚洲一区二区三区无码久久 | 老太婆性杂交欧美肥老太 | 亚洲综合另类小说色区 | 色综合久久久久综合一本到桃花网 | 国产精品亚洲专区无码不卡 | 久久国产精品偷任你爽任你 | 久久久成人毛片无码 | 最新国产麻豆aⅴ精品无码 | 蜜桃视频插满18在线观看 | 久久精品国产99精品亚洲 | 欧美三级a做爰在线观看 | 成人片黄网站色大片免费观看 | 高潮毛片无遮挡高清免费 | 色婷婷香蕉在线一区二区 | 国产香蕉尹人视频在线 | 国产女主播喷水视频在线观看 | 国产激情无码一区二区 | 亚洲 日韩 欧美 成人 在线观看 | 久久久久人妻一区精品色欧美 | 丰满人妻翻云覆雨呻吟视频 | 国产精品无码mv在线观看 | 人妻熟女一区 | 日日夜夜撸啊撸 | 国产精华av午夜在线观看 | 超碰97人人做人人爱少妇 | 自拍偷自拍亚洲精品10p | 大地资源网第二页免费观看 | 在线а√天堂中文官网 | 性欧美videos高清精品 | 久久国产自偷自偷免费一区调 | 国产成人综合色在线观看网站 | 日本精品人妻无码免费大全 | 亚洲午夜久久久影院 | 精品一区二区不卡无码av | 欧美人与禽zoz0性伦交 | 又湿又紧又大又爽a视频国产 | 久久久久久久人妻无码中文字幕爆 | 激情内射日本一区二区三区 | 欧美熟妇另类久久久久久多毛 | 麻豆成人精品国产免费 | 国产激情无码一区二区app | 国产成人综合在线女婷五月99播放 | 欧美一区二区三区 | 亚洲无人区一区二区三区 | 精品久久久无码人妻字幂 | 永久黄网站色视频免费直播 | 色妞www精品免费视频 | 窝窝午夜理论片影院 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 成熟妇人a片免费看网站 | 妺妺窝人体色www在线小说 | 国产精品久久久av久久久 | 97精品国产97久久久久久免费 | 无码人中文字幕 | 日本乱人伦片中文三区 | 亚洲自偷自拍另类第1页 | 亚洲人交乣女bbw | 疯狂三人交性欧美 | 欧美 日韩 人妻 高清 中文 | 97无码免费人妻超级碰碰夜夜 | 免费观看激色视频网站 | 未满成年国产在线观看 | 欧美亚洲国产一区二区三区 | 国产人妖乱国产精品人妖 | 97资源共享在线视频 | 国产色在线 | 国产 | 无码av最新清无码专区吞精 | 亚洲国精产品一二二线 | 水蜜桃色314在线观看 | a国产一区二区免费入口 | 久久久久99精品成人片 | 午夜熟女插插xx免费视频 | 久久天天躁夜夜躁狠狠 | 免费观看又污又黄的网站 | 大屁股大乳丰满人妻 | 蜜臀av无码人妻精品 | 亚洲欧洲日本综合aⅴ在线 | 18禁止看的免费污网站 | 亚洲色在线无码国产精品不卡 | 欧美日韩视频无码一区二区三 | 成人免费视频视频在线观看 免费 | 人人澡人人透人人爽 | 欧美35页视频在线观看 | 日产精品高潮呻吟av久久 | 风流少妇按摩来高潮 | 亚洲精品美女久久久久久久 | 国产精品久久精品三级 | 欧美日本日韩 | 成人免费视频视频在线观看 免费 | 国产乱码精品一品二品 | 黑人大群体交免费视频 | 亚洲中文字幕无码中字 | 高潮喷水的毛片 | 少妇无套内谢久久久久 | 无码人妻丰满熟妇区五十路百度 | 无码国产乱人伦偷精品视频 | 欧美亚洲国产一区二区三区 | 中文毛片无遮挡高清免费 | 国产无遮挡又黄又爽又色 | 国产精品久久国产三级国 | 国产麻豆精品一区二区三区v视界 | 婷婷六月久久综合丁香 | 亚洲欧洲日本无在线码 | 精品国产av色一区二区深夜久久 | 亚洲小说图区综合在线 | 少妇被粗大的猛进出69影院 | 国产精华av午夜在线观看 | 亚洲精品国产品国语在线观看 | 中文字幕无码日韩欧毛 | 免费人成在线视频无码 | 国产内射爽爽大片视频社区在线 | 岛国片人妻三上悠亚 | 夜先锋av资源网站 | 午夜时刻免费入口 | 99riav国产精品视频 | 国产97在线 | 亚洲 | 色偷偷人人澡人人爽人人模 | 欧洲精品码一区二区三区免费看 | 无码一区二区三区在线观看 | av人摸人人人澡人人超碰下载 | www国产精品内射老师 | 野外少妇愉情中文字幕 | 四虎永久在线精品免费网址 | 无码人妻黑人中文字幕 | 一本久道高清无码视频 | 中文精品久久久久人妻不卡 | а天堂中文在线官网 | 国产激情综合五月久久 | www成人国产高清内射 | 中文字幕无码日韩欧毛 | 国产亚洲精品精品国产亚洲综合 | 国产亚洲人成a在线v网站 | 国产卡一卡二卡三 | 国产精品久久久久无码av色戒 | 爽爽影院免费观看 | 国产精品人人爽人人做我的可爱 | 亚洲 另类 在线 欧美 制服 | 亚洲一区二区三区播放 | 亚洲精品国产品国语在线观看 | 夜精品a片一区二区三区无码白浆 | 无码av免费一区二区三区试看 | 国产麻豆精品精东影业av网站 | 色五月丁香五月综合五月 | 久久亚洲精品中文字幕无男同 | 2019午夜福利不卡片在线 | 亚洲欧美日韩综合久久久 | 日日摸夜夜摸狠狠摸婷婷 | 国产97人人超碰caoprom | 午夜肉伦伦影院 | 亚洲精品成人av在线 | 日日天干夜夜狠狠爱 | 18黄暴禁片在线观看 | 国内少妇偷人精品视频免费 | 人妻人人添人妻人人爱 | 精品国产一区二区三区四区 | 国产香蕉尹人综合在线观看 | 人妻体内射精一区二区三四 | 日韩欧美群交p片內射中文 | 国产av久久久久精东av | 欧美人与善在线com | 国产欧美亚洲精品a | 内射白嫩少妇超碰 | 国产偷自视频区视频 | 久久99久久99精品中文字幕 | 亚洲精品午夜国产va久久成人 | 亚洲中文字幕无码一久久区 | 香港三级日本三级妇三级 | 丰满妇女强制高潮18xxxx | 夜夜躁日日躁狠狠久久av | 久久zyz资源站无码中文动漫 | 欧美乱妇无乱码大黄a片 | 中文字幕无码免费久久9一区9 | 四虎影视成人永久免费观看视频 | 精品无码av一区二区三区 | 亚洲国产综合无码一区 | 秋霞成人午夜鲁丝一区二区三区 | 色婷婷综合激情综在线播放 | 国产精品内射视频免费 | 亚洲aⅴ无码成人网站国产app | 免费人成在线观看网站 | 九九久久精品国产免费看小说 | 精品无码国产自产拍在线观看蜜 | 国产av一区二区三区最新精品 | 大地资源网第二页免费观看 | 99精品国产综合久久久久五月天 | 免费乱码人妻系列无码专区 | 国产精品久久久久7777 | 国产婷婷色一区二区三区在线 | 东京无码熟妇人妻av在线网址 | 久久亚洲a片com人成 | 无码纯肉视频在线观看 | 亚洲国产精品久久久久久 | 欧美三级a做爰在线观看 | 欧美丰满少妇xxxx性 | ass日本丰满熟妇pics | 亚洲啪av永久无码精品放毛片 | 一个人看的www免费视频在线观看 | 久久午夜无码鲁丝片 | 两性色午夜视频免费播放 | 国色天香社区在线视频 | 国产猛烈高潮尖叫视频免费 | 久久精品女人的天堂av | 好爽又高潮了毛片免费下载 | 亚洲人成影院在线无码按摩店 | 久久久久亚洲精品男人的天堂 | 精品水蜜桃久久久久久久 | 亚洲欧美精品伊人久久 | 欧美亚洲国产一区二区三区 | 天堂久久天堂av色综合 | 强伦人妻一区二区三区视频18 | 亚洲伊人久久精品影院 | 亚洲中文字幕无码中字 | 嫩b人妻精品一区二区三区 | 一个人免费观看的www视频 | 亚洲人成网站在线播放942 | 国产极品视觉盛宴 | 亚洲乱码国产乱码精品精 | 国产黑色丝袜在线播放 | 欧美自拍另类欧美综合图片区 | 国精产品一品二品国精品69xx | 成人一区二区免费视频 | 亚洲中文字幕在线观看 | 高清国产亚洲精品自在久久 | 日韩人妻无码中文字幕视频 | 东京热无码av男人的天堂 | 少妇无码一区二区二三区 | 国产精品久久福利网站 | 亚洲精品久久久久中文第一幕 | 久久精品国产99精品亚洲 | 性生交大片免费看l | 领导边摸边吃奶边做爽在线观看 | 成人免费视频视频在线观看 免费 | 青春草在线视频免费观看 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲国产精品久久久天堂 | 亚洲精品一区国产 | 最近的中文字幕在线看视频 | 国内老熟妇对白xxxxhd | 精品成在人线av无码免费看 | 无码帝国www无码专区色综合 | 国产精品理论片在线观看 | 天堂а√在线中文在线 | 无码人妻精品一区二区三区不卡 | 久久五月精品中文字幕 | 久久国语露脸国产精品电影 | 亚洲日韩中文字幕在线播放 | 无码av最新清无码专区吞精 | 久久99精品久久久久婷婷 | 丁香花在线影院观看在线播放 | 极品嫩模高潮叫床 | 亚洲国产欧美国产综合一区 | 精品午夜福利在线观看 | 国产成人无码午夜视频在线观看 | 在线播放无码字幕亚洲 | 日本精品高清一区二区 | 久久久久久久久888 | 国产亚洲人成在线播放 | 欧美熟妇另类久久久久久多毛 | 欧美 丝袜 自拍 制服 另类 | 亚洲成av人影院在线观看 | 亚洲国产精品成人久久蜜臀 | 亚洲精品鲁一鲁一区二区三区 | 国产精品人妻一区二区三区四 | 老头边吃奶边弄进去呻吟 | 久久精品女人的天堂av | 国产成人综合色在线观看网站 | 一本无码人妻在中文字幕免费 | 中文字幕 人妻熟女 | v一区无码内射国产 | 亚洲毛片av日韩av无码 | 亚洲aⅴ无码成人网站国产app | 国产免费久久精品国产传媒 | 国模大胆一区二区三区 | 熟妇人妻中文av无码 | 国产熟妇高潮叫床视频播放 | 中文字幕无码乱人伦 | 午夜理论片yy44880影院 | 99久久人妻精品免费一区 | 国产人妻精品一区二区三区不卡 | 激情爆乳一区二区三区 | 无码人妻精品一区二区三区下载 | 人妻aⅴ无码一区二区三区 | 国产婷婷色一区二区三区在线 | 露脸叫床粗话东北少妇 | 亚洲欧美日韩综合久久久 | 午夜嘿嘿嘿影院 | 荫蒂被男人添的好舒服爽免费视频 | 久久综合九色综合欧美狠狠 | 亚洲中文字幕无码中文字在线 | 色婷婷久久一区二区三区麻豆 | 无遮无挡爽爽免费视频 | 亚洲狠狠婷婷综合久久 | 欧美黑人乱大交 | 亚洲 另类 在线 欧美 制服 | 亚洲区欧美区综合区自拍区 | 天天躁夜夜躁狠狠是什么心态 | 少妇高潮一区二区三区99 | 精品久久久中文字幕人妻 | 人妻aⅴ无码一区二区三区 | 欧美日本免费一区二区三区 | 亚洲日韩一区二区三区 | 久久精品国产精品国产精品污 | 亚洲乱亚洲乱妇50p | www国产精品内射老师 | 欧美怡红院免费全部视频 | 2019nv天堂香蕉在线观看 | 亚洲成a人片在线观看无码3d | 日韩精品一区二区av在线 | 亚洲人成影院在线无码按摩店 | 精品久久久久久亚洲精品 | 无套内谢的新婚少妇国语播放 | 亚洲精品国产第一综合99久久 | 成 人 免费观看网站 | 国产亚洲人成a在线v网站 | 国内精品久久久久久中文字幕 | 国产xxx69麻豆国语对白 | 欧美日韩一区二区三区自拍 | 中文字幕人妻丝袜二区 | 精品无码国产一区二区三区av | 中文无码精品a∨在线观看不卡 | 亚洲熟妇自偷自拍另类 | 久久99久久99精品中文字幕 | 国产无套内射久久久国产 | 人人澡人摸人人添 | 天堂а√在线地址中文在线 | 帮老师解开蕾丝奶罩吸乳网站 | 97夜夜澡人人爽人人喊中国片 | 日本丰满熟妇videos | 亚洲区欧美区综合区自拍区 | 一本色道久久综合狠狠躁 | 国内综合精品午夜久久资源 | 99久久99久久免费精品蜜桃 | 欧美日韩一区二区三区自拍 | 久久久久亚洲精品中文字幕 | 午夜精品久久久久久久久 | 性做久久久久久久免费看 | 99er热精品视频 | 亚洲国产精品久久久天堂 | 一本久久a久久精品亚洲 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 中文字幕无码av激情不卡 | 国产无套粉嫩白浆在线 | 亚洲欧洲日本无在线码 | 国内老熟妇对白xxxxhd | 国产精品美女久久久久av爽李琼 | 东京热无码av男人的天堂 | 日本饥渴人妻欲求不满 | 无码福利日韩神码福利片 | 午夜熟女插插xx免费视频 | 狠狠亚洲超碰狼人久久 | 国产精品无套呻吟在线 | 帮老师解开蕾丝奶罩吸乳网站 | 国产性生交xxxxx无码 | 狠狠色色综合网站 | 精品国产一区av天美传媒 | 国产亚洲精品久久久ai换 | 免费乱码人妻系列无码专区 | 美女黄网站人色视频免费国产 | 国产精品久久久久久久9999 | 亚洲成色在线综合网站 | 亚洲 a v无 码免 费 成 人 a v | 久久99精品久久久久久动态图 | 欧美日韩视频无码一区二区三 | 色综合久久久久综合一本到桃花网 | 日本丰满护士爆乳xxxx | 久精品国产欧美亚洲色aⅴ大片 | 久久国内精品自在自线 | 亚洲 激情 小说 另类 欧美 | 日本一区二区三区免费高清 | 国产真实乱对白精彩久久 | 国产97人人超碰caoprom | 亚洲精品无码人妻无码 | 东北女人啪啪对白 | 国精产品一品二品国精品69xx | 无码乱肉视频免费大全合集 | 强奷人妻日本中文字幕 | 精品aⅴ一区二区三区 | 真人与拘做受免费视频 | 亚洲欧美中文字幕5发布 | 久久精品人妻少妇一区二区三区 | 中文字幕av无码一区二区三区电影 | 成 人 网 站国产免费观看 | 99久久婷婷国产综合精品青草免费 | 亚洲精品成a人在线观看 | 国内揄拍国内精品少妇国语 | 中文字幕乱妇无码av在线 | 久久99精品国产麻豆蜜芽 | 少妇的肉体aa片免费 | 亚洲无人区一区二区三区 | 日本免费一区二区三区最新 | 亚洲乱码国产乱码精品精 | 强开小婷嫩苞又嫩又紧视频 | 欧美国产日产一区二区 | 日产精品99久久久久久 | 国产精品沙发午睡系列 | 无码av岛国片在线播放 | 亚洲欧美精品伊人久久 | 欧美 丝袜 自拍 制服 另类 | 久久精品成人欧美大片 | 久久久精品456亚洲影院 | 精品无码一区二区三区爱欲 | 扒开双腿疯狂进出爽爽爽视频 | 亚无码乱人伦一区二区 | 天下第一社区视频www日本 | 亚洲va中文字幕无码久久不卡 | 中文字幕乱码人妻二区三区 | 成人片黄网站色大片免费观看 | 欧美黑人乱大交 | 国产亚洲人成a在线v网站 | 1000部夫妻午夜免费 | 国产一区二区三区四区五区加勒比 | 国产午夜福利亚洲第一 | 成人三级无码视频在线观看 | 亚洲成熟女人毛毛耸耸多 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲第一无码av无码专区 | 欧美xxxx黑人又粗又长 | 国产精品亚洲综合色区韩国 | 色婷婷综合激情综在线播放 | 国产69精品久久久久app下载 | 精品欧洲av无码一区二区三区 | 亚洲 a v无 码免 费 成 人 a v | 玩弄人妻少妇500系列视频 | 人妻尝试又大又粗久久 | 成年美女黄网站色大免费视频 | 国产成人人人97超碰超爽8 | 性啪啪chinese东北女人 | 色五月丁香五月综合五月 | 日韩欧美中文字幕公布 | 国产猛烈高潮尖叫视频免费 | 国产精品18久久久久久麻辣 | 亚洲自偷精品视频自拍 | 在线看片无码永久免费视频 | 日韩精品成人一区二区三区 | 久久人妻内射无码一区三区 | 天天躁夜夜躁狠狠是什么心态 | 成人三级无码视频在线观看 | 欧美怡红院免费全部视频 | 成人无码影片精品久久久 | 国产无遮挡又黄又爽免费视频 | 激情五月综合色婷婷一区二区 | 国内精品人妻无码久久久影院 | 亚洲国产一区二区三区在线观看 | 国产精品久久久一区二区三区 | 成人精品一区二区三区中文字幕 | 国产又爽又黄又刺激的视频 | 日本一区二区更新不卡 | 国产精品久久久久影院嫩草 | 亚洲 日韩 欧美 成人 在线观看 | 久久人人97超碰a片精品 | 日韩精品a片一区二区三区妖精 | 午夜福利一区二区三区在线观看 | 亚洲精品成人福利网站 | 欧美精品国产综合久久 | 久久久精品国产sm最大网站 | 中国大陆精品视频xxxx | 久久亚洲精品中文字幕无男同 | 成年美女黄网站色大免费全看 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 人人妻人人澡人人爽人人精品 | 日韩精品乱码av一区二区 | 国产深夜福利视频在线 | 内射老妇bbwx0c0ck | 国产xxx69麻豆国语对白 | 又大又硬又爽免费视频 | 国产无遮挡吃胸膜奶免费看 | 国产精品成人av在线观看 | 国产无遮挡吃胸膜奶免费看 | 国产亚洲日韩欧美另类第八页 | 亚洲熟妇色xxxxx亚洲 | 欧美精品无码一区二区三区 | 亚洲欧美国产精品久久 | 国产精品福利视频导航 | 欧美日韩人成综合在线播放 | 国产免费无码一区二区视频 | 丰满少妇高潮惨叫视频 | 国产av无码专区亚洲a∨毛片 | 亚洲精品综合五月久久小说 | 国产人成高清在线视频99最全资源 | 亚洲色欲色欲天天天www | 无码av中文字幕免费放 | 人妻aⅴ无码一区二区三区 | 97无码免费人妻超级碰碰夜夜 | 中文字幕无线码免费人妻 | 老子影院午夜伦不卡 | 人人妻在人人 | 男女下面进入的视频免费午夜 | 色偷偷人人澡人人爽人人模 | 美女扒开屁股让男人桶 | a在线观看免费网站大全 | 久久国产精品二国产精品 | 国产无遮挡又黄又爽免费视频 | 熟女少妇在线视频播放 | 国产成人精品一区二区在线小狼 | 无码人妻丰满熟妇区五十路百度 | 荫蒂添的好舒服视频囗交 | 婷婷丁香六月激情综合啪 | 亚洲一区av无码专区在线观看 | 午夜不卡av免费 一本久久a久久精品vr综合 | 欧美激情一区二区三区成人 | 99久久精品午夜一区二区 | 99久久精品无码一区二区毛片 | 中文久久乱码一区二区 | 欧洲熟妇色 欧美 | 波多野42部无码喷潮在线 | 国产在线精品一区二区三区直播 | 高清无码午夜福利视频 | 我要看www免费看插插视频 | 牲欲强的熟妇农村老妇女 | 亚洲国产精品一区二区第一页 | 国产农村乱对白刺激视频 | 色老头在线一区二区三区 | 麻豆蜜桃av蜜臀av色欲av | 天天燥日日燥 | 久久午夜夜伦鲁鲁片无码免费 | 精品成人av一区二区三区 | 老子影院午夜伦不卡 | 亚洲中文字幕av在天堂 | 亚洲一区二区三区国产精华液 | a片免费视频在线观看 | 色欲av亚洲一区无码少妇 | 亚洲精品中文字幕乱码 | 色五月五月丁香亚洲综合网 | 麻豆国产97在线 | 欧洲 | 国产无套粉嫩白浆在线 | 国产精品久久久久久亚洲影视内衣 | 中文无码伦av中文字幕 | 久久国产精品二国产精品 | 成人三级无码视频在线观看 | 强伦人妻一区二区三区视频18 | 亚洲精品午夜无码电影网 | 色一情一乱一伦 | 日日摸日日碰夜夜爽av | 亚洲国产欧美日韩精品一区二区三区 | 国产精品成人av在线观看 | 88国产精品欧美一区二区三区 | 人人澡人人妻人人爽人人蜜桃 | 18禁止看的免费污网站 | 国产精品久久福利网站 | 又黄又爽又色的视频 | 成熟女人特级毛片www免费 | 亚洲日韩一区二区三区 | 一本无码人妻在中文字幕免费 | 亚洲无人区午夜福利码高清完整版 | 亚洲成av人在线观看网址 | 无码人妻久久一区二区三区不卡 | 中文无码成人免费视频在线观看 | 少妇性俱乐部纵欲狂欢电影 | 红桃av一区二区三区在线无码av | 久久久久久a亚洲欧洲av冫 | 福利一区二区三区视频在线观看 | 一本大道久久东京热无码av | 丰满人妻被黑人猛烈进入 | 亚洲欧美日韩国产精品一区二区 | 亚洲综合色区中文字幕 | 丰满人妻一区二区三区免费视频 | 国产婷婷色一区二区三区在线 | 亚洲中文字幕在线观看 | 国产成人一区二区三区在线观看 | 日韩精品无码一区二区中文字幕 | 少妇性l交大片 | 亚洲一区二区三区播放 | 亚洲精品鲁一鲁一区二区三区 | 亚洲大尺度无码无码专区 | 成人精品视频一区二区三区尤物 | 特黄特色大片免费播放器图片 | 无码午夜成人1000部免费视频 | 亚洲理论电影在线观看 | 一本精品99久久精品77 | 久久99精品久久久久久 | 日本大乳高潮视频在线观看 | 国产精品久久久午夜夜伦鲁鲁 | a片在线免费观看 | 亚洲男女内射在线播放 | 亚洲va中文字幕无码久久不卡 | 国产艳妇av在线观看果冻传媒 | 国产亚洲视频中文字幕97精品 | 国产成人无码午夜视频在线观看 | 亚洲成av人片天堂网无码】 | 国产亚洲人成a在线v网站 | 扒开双腿疯狂进出爽爽爽视频 | 最近的中文字幕在线看视频 | 野狼第一精品社区 | 中文字幕无码日韩欧毛 | 女人被男人爽到呻吟的视频 | 国产精品无码永久免费888 | 国产av一区二区精品久久凹凸 | 精品无码成人片一区二区98 | 精品日本一区二区三区在线观看 | 熟妇女人妻丰满少妇中文字幕 | 国产亚洲人成a在线v网站 | 国产精品a成v人在线播放 | 熟妇女人妻丰满少妇中文字幕 | 亚洲熟妇色xxxxx欧美老妇 | 99久久99久久免费精品蜜桃 | 国产xxx69麻豆国语对白 | 牛和人交xxxx欧美 | 国产精品久久久久久久影院 | 成人免费视频一区二区 | 麻豆精品国产精华精华液好用吗 | 超碰97人人射妻 | 男女超爽视频免费播放 | 日韩无套无码精品 | 又湿又紧又大又爽a视频国产 | 国产精品久久久午夜夜伦鲁鲁 | 国产极品美女高潮无套在线观看 | 亚洲熟悉妇女xxx妇女av | 捆绑白丝粉色jk震动捧喷白浆 | 国产精品无码一区二区桃花视频 | 熟妇激情内射com | 日韩av无码一区二区三区 | 嫩b人妻精品一区二区三区 | 久久99精品国产麻豆 | 久久久久av无码免费网 | 亚洲国产欧美日韩精品一区二区三区 | 国产电影无码午夜在线播放 | 久久久久久国产精品无码下载 | 欧美人与物videos另类 | 国产精品久久久久7777 | 亚洲日韩av一区二区三区四区 | 少女韩国电视剧在线观看完整 | 国产99久久精品一区二区 | 国产精品久久久一区二区三区 | 风流少妇按摩来高潮 | 免费观看的无遮挡av | 蜜臀av在线观看 在线欧美精品一区二区三区 | 久久综合香蕉国产蜜臀av | 日韩av无码一区二区三区 | 中文字幕乱码人妻无码久久 | aⅴ亚洲 日韩 色 图网站 播放 | 欧美freesex黑人又粗又大 | 天下第一社区视频www日本 | 亚洲中文字幕无码中字 | 性史性农村dvd毛片 | 99久久精品无码一区二区毛片 | 亚洲经典千人经典日产 | 无人区乱码一区二区三区 | 67194成是人免费无码 | 亚洲小说春色综合另类 | 中文无码精品a∨在线观看不卡 | 在线a亚洲视频播放在线观看 | 熟妇人妻无乱码中文字幕 | 亚洲中文字幕无码一久久区 | 国产亚av手机在线观看 | 色婷婷av一区二区三区之红樱桃 | 欧美人与禽猛交狂配 | 88国产精品欧美一区二区三区 | 国产亚洲欧美日韩亚洲中文色 | 亚洲成av人片在线观看无码不卡 | 中国女人内谢69xxxxxa片 | 在线观看国产一区二区三区 | 久久久久成人精品免费播放动漫 | av在线亚洲欧洲日产一区二区 | 啦啦啦www在线观看免费视频 | 成年女人永久免费看片 | 国产成人av免费观看 | 成人av无码一区二区三区 | 日韩av激情在线观看 | 无码一区二区三区在线观看 | 国产超级va在线观看视频 | 色综合久久久无码网中文 | 伊人久久大香线蕉午夜 | 在线 国产 欧美 亚洲 天堂 | 国产av剧情md精品麻豆 | 激情综合激情五月俺也去 | 99久久无码一区人妻 | 2019nv天堂香蕉在线观看 | 国产绳艺sm调教室论坛 | 欧美老妇与禽交 | 午夜男女很黄的视频 | 欧美国产日产一区二区 | 色一情一乱一伦一视频免费看 | 久久综合给合久久狠狠狠97色 | 丰满岳乱妇在线观看中字无码 | 男女性色大片免费网站 | 最近免费中文字幕中文高清百度 | 99麻豆久久久国产精品免费 | 色五月五月丁香亚洲综合网 | 在线欧美精品一区二区三区 | 成人片黄网站色大片免费观看 | 精品国产精品久久一区免费式 | 日本熟妇大屁股人妻 | 老太婆性杂交欧美肥老太 | 成人无码精品1区2区3区免费看 | 免费中文字幕日韩欧美 | 欧美亚洲日韩国产人成在线播放 | 日韩精品a片一区二区三区妖精 | 大色综合色综合网站 | 免费男性肉肉影院 | 免费观看的无遮挡av | 精品无码国产一区二区三区av | 亚洲色无码一区二区三区 | 在线视频网站www色 | 国产精品久久久一区二区三区 | 国产精品久久久久久亚洲影视内衣 | 色综合天天综合狠狠爱 | а√天堂www在线天堂小说 | 亚洲日韩av一区二区三区四区 | 国产精品久久久久久亚洲影视内衣 | 欧美激情一区二区三区成人 | 亚洲国产精品美女久久久久 | 成人无码精品一区二区三区 | 久久亚洲国产成人精品性色 | 色老头在线一区二区三区 | 天天做天天爱天天爽综合网 | 亚洲国产精品无码久久久久高潮 | 一区二区三区高清视频一 | 亚洲午夜久久久影院 | 日本xxxx色视频在线观看免费 | 久久午夜无码鲁丝片秋霞 | 国产亚洲精品久久久久久国模美 | 最新国产乱人伦偷精品免费网站 | 久久国产劲爆∧v内射 | 在线观看国产一区二区三区 | 美女黄网站人色视频免费国产 | 美女黄网站人色视频免费国产 | 亚洲成a人片在线观看日本 | 无码一区二区三区在线 | 人妻少妇精品无码专区二区 | 大地资源网第二页免费观看 | 国产亚洲美女精品久久久2020 | 精品国产aⅴ无码一区二区 | 中文字幕无码日韩欧毛 | 国产精品对白交换视频 | 色噜噜亚洲男人的天堂 | 男人和女人高潮免费网站 | 中文字幕无码av波多野吉衣 | 亚洲中文字幕无码一久久区 | 中文字幕无线码免费人妻 | 两性色午夜免费视频 | 无码人妻精品一区二区三区不卡 | 久久久久久亚洲精品a片成人 | 国产农村乱对白刺激视频 | 成熟女人特级毛片www免费 | 国产综合久久久久鬼色 | 国产精品国产自线拍免费软件 | 国产疯狂伦交大片 | 日韩精品无码免费一区二区三区 | 亚洲成av人影院在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 2019午夜福利不卡片在线 | 黑人玩弄人妻中文在线 | 人妻无码αv中文字幕久久琪琪布 | 国产97在线 | 亚洲 | 无码人妻精品一区二区三区不卡 | 国产在线精品一区二区三区直播 | 久久无码中文字幕免费影院蜜桃 | 国产热a欧美热a在线视频 | 最近免费中文字幕中文高清百度 | 亚洲国产欧美国产综合一区 | 鲁鲁鲁爽爽爽在线视频观看 | 99国产欧美久久久精品 | 精品久久久中文字幕人妻 | 欧美 日韩 亚洲 在线 | 精品偷拍一区二区三区在线看 | 国产人妻精品午夜福利免费 | 人人超人人超碰超国产 | 色综合久久久久综合一本到桃花网 | 国产无遮挡又黄又爽免费视频 | 国产午夜精品一区二区三区嫩草 | 免费人成在线视频无码 | 久久久久久亚洲精品a片成人 | 国产精品亚洲综合色区韩国 | 成人综合网亚洲伊人 | 日本又色又爽又黄的a片18禁 | 特大黑人娇小亚洲女 | 国产精品无码mv在线观看 | 好屌草这里只有精品 | 97久久超碰中文字幕 | 国产97在线 | 亚洲 | 成熟人妻av无码专区 | 少妇激情av一区二区 | 无码毛片视频一区二区本码 | 国产免费久久久久久无码 | 六十路熟妇乱子伦 | 国产精品va在线播放 | 人妻插b视频一区二区三区 | 99久久99久久免费精品蜜桃 | 国产精品爱久久久久久久 | 国产乱人伦偷精品视频 | 丰腴饱满的极品熟妇 | 中文字幕人妻无码一区二区三区 | 成人综合网亚洲伊人 | 在线观看免费人成视频 | 久久伊人色av天堂九九小黄鸭 | 在线а√天堂中文官网 | 六十路熟妇乱子伦 | 国产又爽又黄又刺激的视频 | 99久久久国产精品无码免费 | 欧美日韩久久久精品a片 | 九九久久精品国产免费看小说 | 日本一本二本三区免费 | 亚洲大尺度无码无码专区 | 国产午夜亚洲精品不卡下载 | 中文字幕无线码免费人妻 | 一本精品99久久精品77 | 国产精华av午夜在线观看 | 久久久精品国产sm最大网站 | 久久aⅴ免费观看 | 国产精品视频免费播放 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲熟妇色xxxxx欧美老妇y | 黑人巨大精品欧美一区二区 | 人妻夜夜爽天天爽三区 | 97精品国产97久久久久久免费 | 欧美野外疯狂做受xxxx高潮 | 九九综合va免费看 | 日本在线高清不卡免费播放 | 鲁鲁鲁爽爽爽在线视频观看 | 国产成人无码一二三区视频 | 国产办公室秘书无码精品99 | 国产在线无码精品电影网 | 欧美激情综合亚洲一二区 | 成人性做爰aaa片免费看 | 国产av一区二区三区最新精品 | 少妇性l交大片欧洲热妇乱xxx | 天堂久久天堂av色综合 | 国产激情精品一区二区三区 | 中文无码成人免费视频在线观看 | 日韩精品a片一区二区三区妖精 | 欧美35页视频在线观看 | 精品无码av一区二区三区 | 国产精品久久久久无码av色戒 | 欧美性猛交内射兽交老熟妇 | 精品久久久无码中文字幕 | 亚洲精品一区二区三区大桥未久 | 色综合视频一区二区三区 | 国产午夜亚洲精品不卡 | 大地资源中文第3页 | 亚欧洲精品在线视频免费观看 | 少妇被黑人到高潮喷出白浆 | 性做久久久久久久免费看 | 欧洲精品码一区二区三区免费看 | 十八禁真人啪啪免费网站 | 亚洲人成影院在线观看 | 精品人妻人人做人人爽 | 伊在人天堂亚洲香蕉精品区 | 亚洲精品久久久久久久久久久 | 亚洲s码欧洲m码国产av | 日韩av无码中文无码电影 | 日韩精品无码一本二本三本色 | 久久97精品久久久久久久不卡 | 日产精品高潮呻吟av久久 | 亚洲国产一区二区三区在线观看 | 最新版天堂资源中文官网 | 四十如虎的丰满熟妇啪啪 | 国产超级va在线观看视频 | www国产亚洲精品久久久日本 | 人妻人人添人妻人人爱 | 51国偷自产一区二区三区 | 男女下面进入的视频免费午夜 | 高清不卡一区二区三区 | 久久熟妇人妻午夜寂寞影院 | 国产 精品 自在自线 | 亚洲成色www久久网站 | 成人女人看片免费视频放人 | 国产97色在线 | 免 | 精品无码av一区二区三区 | 天天综合网天天综合色 | 国产激情无码一区二区 | 无码一区二区三区在线观看 | 2020久久超碰国产精品最新 | 高潮毛片无遮挡高清免费 | 1000部夫妻午夜免费 | 久久人妻内射无码一区三区 | 国产精品久久久久7777 | 老头边吃奶边弄进去呻吟 | 中文字幕人妻无码一区二区三区 | 国产亚洲人成a在线v网站 | 色婷婷av一区二区三区之红樱桃 | 一区二区三区乱码在线 | 欧洲 | 人妻有码中文字幕在线 | 国产97色在线 | 免 | 中文字幕人妻无码一夲道 | 亚无码乱人伦一区二区 | 丝袜人妻一区二区三区 | 久久久亚洲欧洲日产国码αv | 无码国模国产在线观看 | 午夜肉伦伦影院 | 啦啦啦www在线观看免费视频 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲一区二区三区播放 | 日韩精品无码一本二本三本色 | 成人无码视频在线观看网站 | 国产日产欧产精品精品app | 国产人妻久久精品二区三区老狼 | 欧美日韩一区二区综合 | 欧洲熟妇色 欧美 | 精品国偷自产在线视频 | 日韩精品无码免费一区二区三区 | 国产精品18久久久久久麻辣 | 无码任你躁久久久久久久 | 天堂久久天堂av色综合 | 亚洲 高清 成人 动漫 | 欧美野外疯狂做受xxxx高潮 | 国产午夜精品一区二区三区嫩草 | 东京一本一道一二三区 | 欧美日韩一区二区免费视频 | 久久久精品人妻久久影视 | 国产精品手机免费 | 黑人巨大精品欧美一区二区 | 亚洲第一无码av无码专区 | 午夜性刺激在线视频免费 | 国产精品18久久久久久麻辣 | 日本一区二区三区免费高清 | 久9re热视频这里只有精品 | 捆绑白丝粉色jk震动捧喷白浆 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 四虎影视成人永久免费观看视频 | 亚洲а∨天堂久久精品2021 | 精品无人国产偷自产在线 | 亚洲精品中文字幕 | 成熟人妻av无码专区 | 亚洲欧美中文字幕5发布 | 亚洲日本va午夜在线电影 | av无码不卡在线观看免费 | 国产午夜无码视频在线观看 | 日韩在线不卡免费视频一区 | 麻豆国产丝袜白领秘书在线观看 | 人妻无码αv中文字幕久久琪琪布 | 内射爽无广熟女亚洲 | 国产色xx群视频射精 | 日本熟妇大屁股人妻 | 久久久久成人精品免费播放动漫 | 久久综合久久自在自线精品自 | 日韩亚洲欧美中文高清在线 | 俺去俺来也www色官网 | 欧美精品在线观看 | 亚洲色欲色欲欲www在线 | 亚洲s色大片在线观看 | 国产内射爽爽大片视频社区在线 | 久久久久人妻一区精品色欧美 | 国产午夜无码精品免费看 | 国产精品内射视频免费 | 久久久久免费精品国产 | 亚洲成a人一区二区三区 | 国产精品美女久久久 | 初尝人妻少妇中文字幕 | 国产精品久久久久久亚洲影视内衣 | 中文字幕乱码人妻无码久久 | 久在线观看福利视频 | 99久久久无码国产精品免费 | 久久精品视频在线看15 | 人人爽人人澡人人人妻 | 一本色道久久综合狠狠躁 | 欧美人妻一区二区三区 | 国产综合在线观看 | 国内揄拍国内精品人妻 | 人妻无码久久精品人妻 | 国产精品怡红院永久免费 | 日本欧美一区二区三区乱码 | 麻豆精品国产精华精华液好用吗 | 亚洲精品一区二区三区婷婷月 | 西西人体www44rt大胆高清 | 国产无遮挡又黄又爽免费视频 | 久久久精品成人免费观看 | 久久久精品456亚洲影院 | 国产精品va在线观看无码 | 蜜桃无码一区二区三区 | 少妇性荡欲午夜性开放视频剧场 | 成人无码精品一区二区三区 | 日日摸天天摸爽爽狠狠97 | 丰满人妻被黑人猛烈进入 | 又粗又大又硬又长又爽 | 国产sm调教视频在线观看 | 亚洲一区二区三区播放 | 久久久久久九九精品久 | 亚洲欧美精品aaaaaa片 | 精品国产国产综合精品 | 嫩b人妻精品一区二区三区 | 日本乱人伦片中文三区 | 亚洲熟悉妇女xxx妇女av | 欧美性黑人极品hd | 国产人妻精品一区二区三区 | 一区二区传媒有限公司 | 中国女人内谢69xxxx | 少妇无码av无码专区在线观看 | а√资源新版在线天堂 | av无码久久久久不卡免费网站 | 欧美第一黄网免费网站 | 国产人妻精品一区二区三区 | 蜜桃av抽搐高潮一区二区 | 大地资源中文第3页 | 欧美激情综合亚洲一二区 | 在线а√天堂中文官网 | 娇妻被黑人粗大高潮白浆 | 亚洲国产欧美国产综合一区 | 色 综合 欧美 亚洲 国产 | 国内精品久久毛片一区二区 | 青春草在线视频免费观看 | 精品无码av一区二区三区 | 欧美丰满老熟妇xxxxx性 | 丰满诱人的人妻3 | 最近的中文字幕在线看视频 | 夜夜高潮次次欢爽av女 | 国产无遮挡吃胸膜奶免费看 | 在线 国产 欧美 亚洲 天堂 | 欧美激情一区二区三区成人 | 国产两女互慰高潮视频在线观看 | 国产精品对白交换视频 | 亚洲成a人片在线观看无码3d | 国产精品无码一区二区桃花视频 | 波多野结衣av一区二区全免费观看 | 性色欲情网站iwww九文堂 | 精品国产福利一区二区 | 国产精品亚洲五月天高清 | 国产小呦泬泬99精品 | www国产亚洲精品久久久日本 | 久久亚洲国产成人精品性色 | 久久久精品欧美一区二区免费 | 久久这里只有精品视频9 | 沈阳熟女露脸对白视频 | 国产精品怡红院永久免费 | 免费无码肉片在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产精品欧美成人 | 一本久道久久综合婷婷五月 | 一个人看的www免费视频在线观看 | 国产超碰人人爽人人做人人添 | 强辱丰满人妻hd中文字幕 | 国产9 9在线 | 中文 | av无码电影一区二区三区 | 亲嘴扒胸摸屁股激烈网站 | 狠狠色欧美亚洲狠狠色www | 台湾无码一区二区 | 国产精品亚洲一区二区三区喷水 | 成人性做爰aaa片免费看 | 少妇激情av一区二区 | 粗大的内捧猛烈进出视频 | 青青草原综合久久大伊人精品 | 中文精品久久久久人妻不卡 | 亚洲天堂2017无码中文 | 少妇太爽了在线观看 | 国产成人精品视频ⅴa片软件竹菊 | 老子影院午夜精品无码 | 欧美日本精品一区二区三区 | 丰满少妇女裸体bbw | 国产激情无码一区二区app | 亚洲国产成人a精品不卡在线 | 久精品国产欧美亚洲色aⅴ大片 | 熟女体下毛毛黑森林 | √天堂资源地址中文在线 | 午夜福利试看120秒体验区 | 一本久道久久综合狠狠爱 | 日日摸天天摸爽爽狠狠97 | 精品一二三区久久aaa片 | 又粗又大又硬毛片免费看 | 久久www免费人成人片 | 亚洲国产精品毛片av不卡在线 | 欧美xxxx黑人又粗又长 | 永久免费观看国产裸体美女 | 东京热无码av男人的天堂 | 成人免费视频一区二区 | 少妇性俱乐部纵欲狂欢电影 | 99久久久无码国产aaa精品 | 无码国内精品人妻少妇 | 国产在线aaa片一区二区99 | 国产午夜福利亚洲第一 | 久久久精品国产sm最大网站 | 麻豆人妻少妇精品无码专区 | 色窝窝无码一区二区三区色欲 | 日本精品少妇一区二区三区 | 中文字幕中文有码在线 | 国产人妖乱国产精品人妖 | 午夜精品久久久久久久久 | 久久综合给久久狠狠97色 | 午夜不卡av免费 一本久久a久久精品vr综合 | 全黄性性激高免费视频 | 性欧美牲交在线视频 | 久久久精品人妻久久影视 | 欧美成人午夜精品久久久 | 成年美女黄网站色大免费视频 | 老子影院午夜伦不卡 | 亚洲日本一区二区三区在线 | 老子影院午夜精品无码 | 国产色在线 | 国产 | 婷婷丁香五月天综合东京热 | 18禁黄网站男男禁片免费观看 | 波多野结衣高清一区二区三区 | 亚洲色在线无码国产精品不卡 | 成 人 网 站国产免费观看 | 内射老妇bbwx0c0ck | 亚洲男人av天堂午夜在 | 午夜肉伦伦影院 | 国精品人妻无码一区二区三区蜜柚 | 精品日本一区二区三区在线观看 | 欧美日韩人成综合在线播放 | 欧美 亚洲 国产 另类 | 国产精品亚洲一区二区三区喷水 | 国产日产欧产精品精品app | 亚洲成av人片天堂网无码】 | 亚洲人成无码网www | 精品一区二区不卡无码av | 在线欧美精品一区二区三区 | 5858s亚洲色大成网站www | 自拍偷自拍亚洲精品10p | 久久午夜无码鲁丝片午夜精品 | 麻豆国产丝袜白领秘书在线观看 | 国产免费久久精品国产传媒 | 亚洲中文字幕无码中字 | 国产精品沙发午睡系列 | 欧美第一黄网免费网站 | 亚洲日本va中文字幕 | 少妇人妻大乳在线视频 | 国产精品久久久久无码av色戒 | 亚洲精品一区二区三区婷婷月 | 免费乱码人妻系列无码专区 | 国产成人精品视频ⅴa片软件竹菊 | 国产人妻精品午夜福利免费 | 亚洲国产精华液网站w | 成人av无码一区二区三区 | 国产精品美女久久久 | 国产偷国产偷精品高清尤物 | 国产精品久久久一区二区三区 | 中文字幕人妻无码一区二区三区 | 精品熟女少妇av免费观看 | 国产 精品 自在自线 | 波多野结衣一区二区三区av免费 | 国产精品毛片一区二区 | 亚洲精品美女久久久久久久 | 日日干夜夜干 | 欧美精品一区二区精品久久 | 午夜肉伦伦影院 | 亚洲区欧美区综合区自拍区 | 沈阳熟女露脸对白视频 | 国产xxx69麻豆国语对白 | 久久精品中文字幕大胸 | 高潮毛片无遮挡高清免费 | 18无码粉嫩小泬无套在线观看 | 久久zyz资源站无码中文动漫 | 亚洲第一无码av无码专区 | 久青草影院在线观看国产 | 噜噜噜亚洲色成人网站 | 自拍偷自拍亚洲精品被多人伦好爽 | 精品aⅴ一区二区三区 | 免费国产黄网站在线观看 | 在线观看免费人成视频 | 女人高潮内射99精品 | 永久免费观看美女裸体的网站 | 夜先锋av资源网站 | 色婷婷av一区二区三区之红樱桃 | 性色欲网站人妻丰满中文久久不卡 | 国产精品美女久久久网av | 精品无码av一区二区三区 | 国产 浪潮av性色四虎 | 日日橹狠狠爱欧美视频 | 免费网站看v片在线18禁无码 | www国产亚洲精品久久网站 | 丰满少妇女裸体bbw | 女人被男人爽到呻吟的视频 | 亚洲性无码av中文字幕 | 亚洲色成人中文字幕网站 | 高清国产亚洲精品自在久久 | 国产又爽又猛又粗的视频a片 | 在线精品国产一区二区三区 | 色综合久久久无码中文字幕 | 午夜精品久久久久久久久 | 无码人妻精品一区二区三区不卡 | 国产精品嫩草久久久久 | 国产美女精品一区二区三区 | 久久伊人色av天堂九九小黄鸭 | 欧美日韩综合一区二区三区 | 国产又粗又硬又大爽黄老大爷视 | 亚洲精品一区二区三区在线观看 | 久久久中文字幕日本无吗 | 国产深夜福利视频在线 | 中文字幕乱码中文乱码51精品 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 成人精品天堂一区二区三区 | 99er热精品视频 | 综合网日日天干夜夜久久 | 精品无人区无码乱码毛片国产 | 丰满岳乱妇在线观看中字无码 | 久久久久久久人妻无码中文字幕爆 | 4hu四虎永久在线观看 | 精品国产乱码久久久久乱码 | 亚洲第一无码av无码专区 | 美女毛片一区二区三区四区 | 日本爽爽爽爽爽爽在线观看免 | 影音先锋中文字幕无码 | 人人爽人人澡人人高潮 | 久久国语露脸国产精品电影 | 无码国产乱人伦偷精品视频 | 动漫av一区二区在线观看 | 亚洲精品成a人在线观看 | 成人一在线视频日韩国产 | 蜜桃视频插满18在线观看 | 中文字幕无码视频专区 | 中文字幕无码av波多野吉衣 | 精品久久久无码人妻字幂 | 欧美第一黄网免费网站 | 九九综合va免费看 | 色偷偷人人澡人人爽人人模 | 蜜桃av抽搐高潮一区二区 | 亚洲精品一区二区三区大桥未久 | 人人妻人人澡人人爽欧美一区九九 | 国产精品无码一区二区三区不卡 | 国产成人无码一二三区视频 | 大乳丰满人妻中文字幕日本 | 国产亚洲日韩欧美另类第八页 | 国产又爽又黄又刺激的视频 | 欧美黑人性暴力猛交喷水 | 又紧又大又爽精品一区二区 | 日韩人妻无码一区二区三区久久99 | 欧美激情综合亚洲一二区 | 在线 国产 欧美 亚洲 天堂 | 久久亚洲a片com人成 | 丰满人妻被黑人猛烈进入 | 色五月五月丁香亚洲综合网 | 久久人妻内射无码一区三区 | 午夜福利一区二区三区在线观看 | 极品嫩模高潮叫床 | 亚洲国产欧美国产综合一区 | 天堂久久天堂av色综合 | 国产色精品久久人妻 | 亚洲一区二区观看播放 | 国产超级va在线观看视频 | 精品一区二区不卡无码av | 国产精品亚洲lv粉色 | 亚洲s色大片在线观看 |