流媒体协议-- HTTP-FLV
生活随笔
收集整理的這篇文章主要介紹了
流媒体协议-- HTTP-FLV
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HTTP-FLV
- HTTP-FLV簡介
- 分塊傳輸編碼
- 請求響應報文分析
HTTP-FLV簡介
基于HTTP 1.1 分塊傳輸機制(Chunked transfer encoding)實現直播。
客戶端每次請求HTTP-FLV直播流,服務器先發送FLV header、script tag以及audio config tag和video config tag,再發送當前時間點FLV音視頻數據。(一header三tag)
HTTP-FLV優缺點:
優點:
a. 服務器兼容性好:基于HTTP協議。
b. 相對低延時:直接傳輸FLV流,傳輸顆粒度小;基于HTTP長連接。(發一次請求,客戶端分多次提供數據)
缺點:
a. 播放端兼容性不好:需要flash支持,主流瀏覽器拋棄flash。
b. 不適合多音軌:flv只能有一條音軌和一條視頻軌。
分塊傳輸編碼
通常情況下,一次HTTP應答消息中發送的數據是整個發送的,“Content-Length”消息頭字段表示傳輸的數據大小,該字段可以讓客戶端應用判斷數據傳輸何時結束以及后續應答消息的何時開始。而分塊傳輸編碼是將數據切割成一段段的數據塊,每個分塊包含十六進制的長度值和數據,長度值獨占一行,長度不包括該行結尾的 CRLF(\r\n),也不包括分塊數據結尾的CRLF,但是包括數據里面的CRLF。最后一個分塊長度值必須為 0,對應的分塊數據沒有內容,但是必須跟兩個CRLF,表示實體結束,也就是說最后一個分塊為:“0\r\n\r\n”。這樣的話,服務器不需要在發送數據前預先知道發送內容的總大小。
HTTP分塊傳輸編碼允許服務器為動態生成的內容維持HTTP持久連接(長連接)。相當于說“Content-Length”無限大,數據的傳輸不會停止,那TCP連接自然一直存在。而直播場景就是屬于典型的“內容動態生成”的實例,這是HTTP-FLV直播實現的基礎。
分塊傳輸通過改變報文格式來優化傳輸,除此之外,還可以通過“內容編碼”的方式來優化傳輸,方式是對實體內容進行壓縮編碼(如gzip),對應的消息頭部字段是“Content-Encoding”。
對于客戶端應用,判斷傳輸結束,要關閉tcp連接的方式有兩種:
i. 通過HTTP響應報文Content-Length字段獲得實體內容的大小,如果接收到的數據與之相等,就認為傳輸結束,關閉連接。
ii. 通過檢查分塊傳輸編碼的分塊長度,如果是0,那說明傳輸結束,關閉連接。
h. 報文示例:HTTP/1.1 200 OK Content-Type: text/plain Transfer-Encoding: chunked ---> 接下來的實體內容采用分塊傳輸編碼25 --> 十六進制表示的塊大小,即接下來傳輸37(0x25)字節的實體內容 This is the data in the first chunk (\r\n) --> 空一行,顯式的換行符 1C and this is the second one (\r\n) 3 con 8 sequence 0 --> 傳輸結束 (\r\n) (\r\n) 解析:"This is the data in the first chunk\r\n" (37 字符 => 十六進制: 0x25) "and this is the second one\r\n" (28 字符 => 十六進制: 0x1C) "con" (3 字符 => 十六進制: 0x03) "sequence" (8 字符 => 十六進制: 0x08) 那么解碼后的實體內容為:This is the data in the first chunk and this is the second one consequence
請求響應報文分析
下面是一份HTTP-FLV 請求-響應的報文:
GET http: //192.168.0.102:8080/live?port=1935&app=myapp&stream=mystream HTTP/1.1 Host: 192.168.0.102:8080 Accept: */* Accept-Language: zh_CN User-Agent: VLC/3.0.12 LibVLC/3.0.12 Range: bytes=0-HTTP/1.1 200 OK Connection: close Transfer-Encoding: chunked ----> 服務器返回分塊傳輸關鍵字,而不是客戶端請求報文帶的!! Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Content-Type: video/x-flv Date: Sun, 07 Mar 2021 08:21:23 GMT Expires: -1 Server: nginx/1.18.02a03 ----> 當前chunk的字節數 FLV..... ................. onMetaData...Server..DNGINX HTTP-FLV (https: //github.com/winshining/nginx-http-flv-module)..width.@.........height.@.........displayWidth.@........ displayHeight.@.........duration.......... framerate.@8........fps.@8....... videodatarate.@.........videocodecid.@........ audiodatarate.@gu.......audiocodecid.@$........profile ....傳輸的方式是chunked。
響應頭后面跟著chunk字節數,以及flv data。
總結
以上是生活随笔為你收集整理的流媒体协议-- HTTP-FLV的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 憎恨之心最强套装攻略_憎恨之心S套装最好
- 下一篇: couchbase java 手册_使用