久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    RTMP協議分析 一、RTMP包頭

     shaobin0604@163.com 2012-01-10
    原創
    RTMP協議 封包 參考Red5
    RTMP協議封包 由一個包頭和一個包體組成,包頭可以是4種長度的任意一種:12, 8, 4,  1 byte(s).完整的RTMP包頭應該是12bytes,包含了時間戳,Head_Type,AMFSize,AMFType,StreamID信 息, 8字節的包頭只紀錄了時間戳,Head_Type,AMFSize,AMFType, 4個字節的包頭記錄了時間戳,Head_Type。1個字節的包頭只記錄了Head_Type 。包體最大長度默認為128字節,通過chunkSize 可改變包體最大長度,通常當一段AFM數據超過128字節后,超過128的部分就放到了其他的RTMP封包中,包頭為一個字節.
    完整的RTMP包頭有12字節,由下面5個部分組成:
    用途大小(Byte)含義
    Head_Type1包頭
    TIMER3時間戳
    AMFSize3數據大小
    AMFType1數據類型
    StreamID4流ID

    一、Head_Type - 包頭類型
    Head_Type占用RTMP包的第一個字節,這個字節里面記錄了包的類型和包的ChannelID。Head_Type字節的前兩個Bit決定了包頭的長度.它可以用掩碼0xC0進行"與"計算:
    Head_Type的前兩個Bit和長度對應關系:
    Bits Header Length
    00 12 bytes
    01 8 bytes
    10 4 bytes
    11 1 byte

    Head_Type的后面6個Bit和StreamID決定了ChannelID。  StreamID和ChannelID對應關系:StreamID=(ChannelID-4)/5+1 參考red5
    ChannelID用途
    02Ping 和ByteRead通道
    03Invoke通道 我們的connect() publish()和自字寫的NetConnection.Call() 數據都是在這個通道的
    04Audio和Vidio通道
    05 06 07服務器保留,經觀察FMS2用這些Channel也用來發送音頻或視頻數據

    例如在rtmp包的數據中里面,發現被插入了一個0xC2,這個就是一字節的包頭,并且channelID=2.

    二、TiMMER - 時間戳

    時 間戳占用RTMP包頭的第2、3、4 三個字節。RTMP時間戳可分為絕對時間戳和相對時間戳,紀錄的是音視頻的時間信息。相對時間戳指的是二個RTMP包之間的時間間隔,單位毫秒。而絕對時 間戳指的是當前封包發送的時刻,單位也是毫秒。對于音視頻的播放,時間戳非常關鍵,因為音視頻的播放同步是由時間戳來控制的,如果你的視頻出現卡頓,音視 頻不同步,延時越來越大,很可能就是你的時間戳不準導致的。
    fms對于同一個流,發布(publish)的時間戳和播放(play)的時間戳是有區別的
    publish時間戳,采用相對時間戳,時間戳值等于當前媒體包的絕對時間戳與上個媒體包的絕對時間戳之間的差距,也就是說音視頻時間戳在一個時間軸上面.單位毫秒。
    play時間戳,也是相對時間戳,時間戳值等于當前媒體包的絕對時間戳與上個同類型媒體包的絕對時間戳之間的差距, 注意這里跟上面不同的是強調“同類型的媒體包”。也就是說音視頻時間戳分別采用單獨的時間軸,單位毫秒。
    flv格式文件時間戳,絕對時間戳,時間戳長度3個字節。超過0xFFFFFF后時間戳值等于TimeStamp & 0xFFFFFF。
    flv格式文件影片總時間長度保存在onMetaData的duration屬性里面,長度為8個字節,是一個double類型。


    三、AMFSize - 數據大小
    AMFSize 占三個字節,這個長度是AMF長度,可超過RTMP包的最大長度128字節。如果超過了128字節,那么由多個后續RTMP封包組合,每個后續RTMP封 包的頭只占一個字節。一般就是以0xC?開頭。1個字節的包頭表示這個包的時間戳、數據大小、數據類型、流ID都和上一個相同ChannelID的 RTMP包完全一樣。

    四、AMFType - 數據類型
    AMFType是RTMP包里面的數據的類型,占用1個字節。例如音頻包的類型為8,視頻包的類型為9。下面列出的是常用的數據類型:

    0×01 Chunk Size changes the chunk size for packets
    0×02 Unknown
    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
    0×08 Audio Data packet containing audio
    0×09 Video Data packet containing video data
    0x0A-0x0EUnknown  
    0x0FFLEX_STREAM_SENDTYPE_FLEX_STREAM_SEND
    0x10FLEX_SHARED_OBJECT TYPE_FLEX_SHARED_OBJECT
    0x11FLEX_MESSAGE  TYPE_FLEX_MESSAGE 
    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.
    0×16 StreamData 這是FMS3出來后新增的數據類型,這種類型數據中包含AudioData和VideoData


    五、StreamID - 流ID
    占 用RTMP包頭的最后4個字節,是一個big-endian的int型數據。我們x86 計算機內存中數據存放都是小尾數模式:little-endian,而網絡數據流一般都是大尾數模式:big-endian。 StreamID是音視頻 流的唯一ID, 一路流如果既有音頻包又有視頻包,那么這路流音頻包的StreamID和他視頻包的StreamID相同,但ChannelID不同。
    ChannelID 和StreamID之間的計算公式:StreamID=(ChannelID-4)/5+1  參考red5。如果這個封包既不是音頻包,也不是視頻包,那么他的StreamID=0.
    例如當音視頻包ChannelID為2、3、4時StreamID都為1 當音視頻包ChannelID為9的時候StreamID為2

    六、封包分析
    例如有一個RTMP封包的數據0300 00 00 00 01 02 1400 00 00 00 0200 07 63 6F 6E 6E 65 63 74 003F F0 00 00 00 00 00 00 08 ,,,
    數據依次解析的含義
    03表示12字節頭,channelid=3
    000000表示時間戳 Timer=0
    000102表示AMFSize=18
    14表示AMFType=Invoke 方法調用
     00 00 00 00 表示StreamID = 0
    //到此,12字節RTMP頭結束下面的是AMF數據分析,具體的AMF0數據格式請參考 RTMP協議 二、AMF數據
    02表示String
    0007表示String長度7
    63 6F 6E 6E 65 63 74 是String的Ascall值"connect"
    00表示Double
    3F F0 00 00 00 00 00 00 表示double的0.0
    08表示Map數據開始
    下面是我用c++實現的完整的rtmp客戶端程序下載
    RTMP協議分析 二、AMF數據http://www./fly2700/archive/2008/04/09/281432.html
    程序下載http://www./fly2700/archive/2008/04/02/280641.html

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲欧美日韩综合在线丁香| 欧洲人妻丰满AV无码久久不卡| 人妻蜜臀久久av不卡| 人妻少妇精品一区二区三区| 久久无码人妻一区二区三区午夜| 国产精品无码日韩欧| 亚洲最大成人网色| 国产特级毛片AAAAAA视频| 影音先锋人妻啪啪AV资源网站| 国产精品中文字幕在线| 日夜啪啪一区二区三区| 成人看的污污超级黄网站免费| 粗壮挺进邻居人妻无码| 成人无码影片精品久久久| 国内精品久久久久影院网站| 亚洲欧洲一区二区精品| 亚洲男人的天堂一区二区| 午夜福利看片在线观看| 亚洲AV无码专区电影在线观看| 亚洲av成人免费在线| 久久97人人超人人超碰超国产| 国产一区二区三区不卡在线看| 亚洲欧美人成网站在线观看看| 尹人香蕉久久99天天拍| 麻豆国产AV剧情偷闻女邻居内裤| 饥渴的少妇2中文字幕| 亚洲成在人线AV品善网好看| 呦交小U女精品视频| 国产美女高潮流白浆视频| 国产精品久久国产精品99| 少妇又爽又刺激视频| 亚洲VA中文字幕无码久久| 高清有码国产一区二区| 内射口爆少妇麻豆| 国产边摸边吃奶边叫做激情视频| 99中文字幕精品国产| 97久久天天综合色天天综合色HD| 亚洲精品日韩精品久久| 精品无码国产自产在线观看水浒传| 国产宅男宅女精品A片在线观看| 中文字幕国产精品av|