【正文】
載:有效負載是包含在消息中的實際數(shù)據(jù),例如:它可以是一些音頻樣本或者壓縮的視頻數(shù)據(jù)。 時間戳: 四個字節(jié)的長度包含了消息的時間戳,這四個字節(jié)被包在一個大比特序列中。17類型范圍內(nèi)的ID是被保留用于協(xié)議控制消息。RTMP消息包含連個部分,包頭和有效負載。時間戳delta作為一個表示毫秒的無符號整數(shù)也會被詳細介紹,和先前的時間戳相比,時間戳delta可以是24字節(jié)或者是32字節(jié)的長度。時間戳必須始終在線性的增加,允許應(yīng)用程序處理異步傳輸,帶寬度量,檢測,和流控制。那里要填充被標示,填充字節(jié)應(yīng)該有0值(似乎看不懂). 在RTMP消息塊流中的時間戳用整數(shù)表示,單位為毫秒。這種字節(jié)順序一般被認為“大字節(jié)“,數(shù)字常量在這種文檔里是用十進制表示。數(shù)據(jù)包:一個數(shù)據(jù)包由固定的包頭和有效負載數(shù)據(jù)組成,一些底層的協(xié)議或許會需要定義的數(shù)據(jù)包來封裝。消息流ID:每一個消息擁有一個分配的ID識別跟隨的消息流。RTMP是設(shè)計和RTMP消息塊流協(xié)議一起工作的,它可以利用任何其他的傳輸協(xié)議發(fā)送消息,RTMP消息塊協(xié)議和RTMP一起適用于多樣性的音視頻應(yīng)用程序,從一對一,一對多的向視頻點播服務(wù)器的直接廣播到交互式的回憶應(yīng)用程序。一個應(yīng)用程序為了表示未來的消息處理過程是不需要的時候或許會送這個消息。.中斷消息:這個協(xié)議控制消息用來通知對方如果他等待消息塊完成一個消息,然后丟棄部分收到的消息。例如:假設(shè)一個客戶端想要發(fā)送131字節(jié)的音頻數(shù)據(jù),消息塊的大小為128字節(jié),在這種情況下,客戶端可以發(fā)送這個協(xié)議控制消息給服務(wù)端以通知消息塊的大小被設(shè)置成131字節(jié),那么客戶端就可以用一個消息塊發(fā)送音頻數(shù)據(jù)。.設(shè)置消息塊大?。簠f(xié)議控制消息1,設(shè)置消息塊大小,用來通知對方新的最大的消息塊大小。協(xié)議控制消息應(yīng)該有消息流ID 0(被稱為控制流)和消息塊流ID 2,帶有最高的優(yōu)先級被發(fā)送。注意這兩個例子,類型3消息塊可以有用作兩個不同的方式,第一種是指定一則消息的延續(xù),第二種是指定新消息的開始,這個新消息可以從已經(jīng)存在的數(shù)據(jù)中衍生出來。 Chunk format.例1:例一給出一個簡單的音頻消息流,這個例子示范了信息的冗余。.擴展時間戳(extend timestamp):當消息頭中的普通的時間戳是0x00ffffff這個字段就會被傳送,如果普通時間戳的值小于0x00ffffff,這個字段就不會被呈現(xiàn),如果時間戳字段沒有被呈現(xiàn)這個字段不能被呈現(xiàn),類型3的消息塊沒有這個字段。然而使把分散的消息流復合成同一個消息塊流成為可能,就不用所有的頭壓縮。消息類型 id(message type id):一個字節(jié)對于類型0和類型1的消息塊,消息的類型被表示在這里。注意這一般和消息塊有效負載長度是不一樣的。 時間戳delta(timestamp delta):3個字節(jié)對于類型1和類型2的消息塊,先前的消息塊的時間戳和當前的消息塊的時間戳的不同點可以在這里看到,如果delta的值比16777215大或者相同,這個值必須是16777215,擴展的時間戳被呈現(xiàn),另外,這和值必須是完整的delta。.類型1類型1的消息塊有7個字節(jié)長,消息流ID沒有被包含,這個消息塊得到和先前消息塊同樣的流ID,帶有可變長的消息的流(例如許多視頻格式)在類型0消息塊后應(yīng)該使用這種格式作為每一個消息的第一個消息塊。.類型0:類型0的消息塊有11個字節(jié)長們這個類型必須在消息塊流開始時使用,只要消息流的時間戳回溯。.消息塊消息頭在消息塊消息頭中有四種不同的個格式,由消息塊基本頭的fmt字段選擇。Cs id 64:8或者6個比特這個字段包含了消息塊流ID減64,例如ID365在CS id段用1表示,在cs id 64段用301表示。Cs id:6比特這個字段包含了消息塊流ID,值從2到63,值0和1用于代表這個字段的2個或者3個字節(jié)的版本號。消息塊流ID 64到319在這個字段中可以被編碼成2個字節(jié)的版本號(第2個字節(jié)加64)。對于流ID沒有額外增加的字節(jié)表示,值3到63表示完成的流ID,沒有額外的字節(jié)用來表示。.消息塊基本頭:消息塊基本時間頭對消息塊流的ID和消息塊的類型進行編碼,(在下面的圖表中用fmt表示),消息塊類型決定了編碼的消息頭的格式,消息塊基本頭字段可以是1,2,或者3個字節(jié)長,決定于消息塊流ID。所以對于值比0xf f f f f f小的,普通時間戳字段應(yīng)該用在擴展時間戳沒有被呈現(xiàn)的案例中。消息塊消息頭:0,3,7,或者11個字節(jié)這個字段編碼正在傳送的消息的信息,長度可以利用在消息塊頭中詳細的消息塊類型來決定。消息分塊也允許小的消息被傳送時帶有小的包頭,消息塊的包頭包含了信息的壓縮表示,另外這下信息必須在消息自身中包含。傳輸?shù)臅r候每一個消息塊在下一個消息塊之前必須完全被發(fā)送,當接收結(jié)束,消息塊基于消息塊流ID被組裝成消息。ACK發(fā)送客戶端和服務(wù)端分別等待S2和C2握手完成客戶端和服務(wù)交換消息。但是似乎沒有用。隨機返回:1528個字節(jié)這個字段必須包含在每方發(fā)送的S1(對應(yīng)C2)或者S2(對應(yīng)C1)的隨機數(shù)據(jù)字段。.C2和S2的格式C2和S2數(shù)據(jù)吧有1536字節(jié)長度,近似S1和C1的回聲,由一下幾個字段組成。隨即數(shù)據(jù):1528個字節(jié)這個字段可以包含任何任意的值,因為每個終端必須區(qū)分自己初始化的握手的返回數(shù)據(jù)和對方初始化的握手的返回數(shù)據(jù),這個數(shù)據(jù)應(yīng)該發(fā)送一些隨機數(shù)。時間:4個字節(jié)這個字段包含時間戳,被當做以后消息塊從終端發(fā)送的時間點,也許是0,或者一些任意的值,用來同步多重的消息塊流,終端或許希望發(fā)送其他消息塊流的時間戳的當前值。不能區(qū)分客戶的請求的版本的服務(wù)應(yīng)該以3返回,客戶端或許會選擇3一下的版本,或者放棄握手。服務(wù)端必須等到C1到達才發(fā)送S2,服務(wù)端必須等到C2到達后才發(fā)送其他數(shù)據(jù)。.握手的順序握手以客戶端發(fā)送C0和C1消息塊位開始,客戶端必須等到S1到達在發(fā)送C2。5. 握手一個RTMP通信以握手開始,握手不像其他的協(xié)議,他包含三個固定長度的消息塊。類型ID:協(xié)