RTMP協議概述

2021-04-13 12:53:21 字數 3127 閱讀 5149

rtmp協議概述

介紹:

rtmp協議就像乙個用來裝資料報的容器,這些資料可以是amf格式的資料,也可以是flv中的視/音訊資料.

乙個單一的連線可以通過不同的通道傳輸多路網路流.這些通道中的包都是按照固定大小的包傳輸的.

網路連線(connection)

[copy to clipboard]

code:

var videoinstance:video = your_video_instance;

var nc:netconnection = new netconnection();

var ns:netstream = new netstream(nc);

videoinstance.attachvideo(ns);

ns.play("flvname");

預設埠為1935

握手

client → server :向伺服器發出握手請求.這不屬於協議包一部分,該握手請求第乙個位元組為(0×03),其後跟著1536個位元組.經管看上去這部分的內容對於rtmp協議來說並不是至關重要的,但也不可隨意對待.

server → client :伺服器向客戶端回應握手請求.這部分的資料仍然不屬於rtmp協議的部分.該回應的其實位元組仍然為(0x03),但是後邊跟著個長度為1536個位元組 (一共為3072 )的包塊.第乙個1536塊看上去似乎可以是任意內容,甚至好像可以是null都沒有關係.第二個1536的**塊,是上一步客戶端向伺服器端傳送的握手 請求的內容.

client→server:把上一步伺服器向客戶端回應的第二塊1536個位元組的資料塊.

至此客戶端與伺服器端的握手結束,下面將傳送rtmp協議的包內容.

client → server :向伺服器傳送連線包.

server → client :伺服器回應.

... .... 等等... ...

rtmp 資料型別

0×01

chunk size

changes the chunk size for packets

0×02

unknown

anyone know this one?

0×03

bytes read

send every x bytes read by both sides

0×04

ping

ping is a stream control message, has subtypes

0×05

server bw

the servers downstream bw

0×06

client bw

the clients upstream bw

0×07

unknown

anyone know this one?

0×08

audio data

packet containing audio

0×09

video data

packet containing video data

0x0a - 0×11

unknown

anyone know?

0×12

notify

an invoke which does not expect a reply

0×13

shared object

has subtypes

0×14

invoke

like remoting call, used for stream actions too.

shared object 資料型別

0×01

connect

0×02

disconnect

0×03

set attribute

0×04

update data

0×05

update attribute

0×06

send message

0×07

status

0×08

clear data

0×09

delete data

0x0a

delete attribute

0x0b            

initial data

rtmp包結構

rtmp包 包含乙個固定長度的包頭和乙個最長為128位元組的包體.包頭可以是下面4種長度的任意一種:12, 8, 4, or 1 byte(s).

第乙個位元組的前兩個bit很重要,它決定了包頭的長度.它可以用掩碼0xc0進行"與"計算.下面的**羅列了可能的包頭長度:

bits

header length

00 12 bytes

01 8 bytes

10 4 bytes

11 1 byte

我們在這裡討論關rtmp包結構的問題並不是非常的詳細.我們在以後有時間會討論關於amf的問題(敬請期待...),其實rtmp包結構就是使用了amf格式.

關於流的操作我們需要進一步研究,在論壇中的

http://www.openred5.com/bbs/viewthread.php?tid=175&extra=page%3d1這篇文章研究的還是不錯的,大家可以參考.不過下面可以列乙個關於客戶端向伺服器端傳送流的流程:

client→server :傳送乙個建立流的請求.

server→client :返回乙個表示流的索引號.

client→server :開始傳送.

client→server :傳送視音訊資料報(這些包在同乙個頻道(channel)並用流的索引號來唯一標識).

RTMP協議分析

rtmp協議封包 由乙個包頭和乙個包體組成,包頭可以是4種長度的任意一種 12,8,4,1 byte s 完整的rtmp包頭應該是12bytes,包含了時間戳,amfsize,amftype,streamid資訊,8位元組的包頭只紀錄了時間戳,amfsize,amftype,其他位元組的包頭紀錄資訊...

rtmp 協議詳解

rtmp協議是乙個網際網路tcp ip五層體系結構中應用層的協議。rtmp協議中基本的資料單元稱為訊息 message 當rtmp協議在網際網路中傳輸資料的時候,訊息會被拆分成更小的單元,稱為訊息塊 chunk 1 訊息 2 訊息塊 在網路上傳輸資料時,訊息需要被拆分成較小的資料塊,才適合在相應的網...

RTMP協議分析

用途 大小 byte 含義head type1包頭 timer 3時間戳 amfsize 3資料大小 amftype 1資料型別 streamid 4流id 一 head type 包頭型別 head type占用rtmp包的第乙個位元組,這個位元組裡面記錄了包的型別和包的channelid。hea...