直播协议HTTP-FLV标准解读与技术实现
HTTP-FLV
HTTP-FLV,即將音視頻數據封裝成FLV,然后通過HTTP協議傳輸給客戶端。
這里首先要說一下,HLS其實是一個“文本協議”,而并不是一個流媒體協議。那么,什么樣的協議才能稱之為流媒體協議呢?
 流(stream): 數據在網絡上按時間先后次序傳輸和播放的連續音/視頻數據流。之所以可以按照順序傳輸和播放連續是因為在類似 RTMP,FLV協議中, 每一個音視頻數據都被封裝成了包含時間戳信息頭的數據包。而當播放器拿到這些數據包解包的時候能夠根據時間戳信息把這些音視頻數據和之前到達的音視頻數據連續起來播放。MP4,MKV等等類似這種封裝,必須拿到完整的音視頻文件才能播放,因為里面的單個音視頻數據塊不帶有時間戳信息,播放器不能將這些沒有時間戳信息數據塊連續起來,所以就不能實時的解碼播放。
 延遲分析
 理論上(除去網絡延遲外),FLV可以做到僅僅一個音視頻tag的延遲。?
 相比RTMP的優點:
抓包分析
打開網宿的HTTP-FLV流:
http://175.25.168.16/pl3.live.panda.tv/live_panda/d4e0a83a7e0b0c6e4c5d03774169fa3e.flv?wshc_tag=0&wsts_tag=57e233b1&wsid_tag=6a27c14e&wsiphost=ipdbm
 HTTP/1.1 200 OK?
 Expires: Wed, 21 Sep 2016 07:16:02 GMT?
 Cache-Control: no-cache?
 Content-Type: video/x-flv?
 Pragma: no-cache?
 Via: 1.1 yc16:3 (Cdn Cache Server V2.0)?
 Connection: close
發現響應頭中出現Connection: close 的字段,表示網宿采用的是短連接,則直接可以通過服務器關閉連接來確定消息的傳輸長度。
如果HTTP Header中有Content-Length,那么這個Content-Length既表示實體長度,又表示傳輸長度。而HTTP-FLV這種流,服務器是不可能預先知道內容大小的,這時就可以使用Transfer-Encoding: chunked模式來傳輸數據了。
如下的響應就是采用的Chunked的方式進行的傳輸的響應頭:
 HTTP/1.1 200 OK?
 Server: openresty?
 Date: Wed, 21 Sep 2016 07:38:01 GMT?
 Content-Type: video/x-flv?
 Transfer-Encoding: chunked?
 Connection: close?
 Expires: Wed, 21 Sep 2016 07:38:00 GMT?
 Cache-Control: no-cache
總結
以上是生活随笔為你收集整理的直播协议HTTP-FLV标准解读与技术实现的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: RTMP在NGINX的启动
 - 下一篇: 视频容器格式与编码格式简介