【音視頻】Http-FLV 介紹

一、Http-FLV 原理

HTTP-FLV 是基于 HTTP 協議的 FLV(Flash Video)流媒體傳輸方式。它使用 HTTP 協議而不是傳統的 RTMP 協議來傳輸 FLV 格式的視頻流。HTTP-FLV 在 Web 視頻直播場景中得到了廣泛應用,尤其是在不支持或不希望使用 RTMP 協議的情況下,它為 Web 端用戶提供了流暢的直播體驗

HTTP-FLV 的核心是 “流式傳輸”,而非一次性下載文件,依賴兩個關鍵技術:

  • FLV 容器格式:FLV 是輕量級容器,僅包含「文件頭(Header)+ 標簽(Tag)」兩部分,無復雜索引結構。

    Tag 是數據傳輸的最小單元,分為三類:

    • 視頻 Tag(H.264/H.265 編碼)
    • 音頻 Tag(AAC/MP3 編碼):存儲實際媒體數據;
    • 腳本 Tag(ScriptTag):包含元數據(如編碼格式、分辨率、比特率、時長)
  • HTTP Chunked Encoding(分塊編碼):HTTP 協議默認是 “請求 - 完整響應”,但 HTTP-FLV 利用 Transfer-Encoding: chunked 響應頭,將 FLV 流切分為連續的二進制塊(每塊 1-2s 數據),服務器實時向客戶端推送塊,客戶端接收后立即解碼播放,實現 “邊傳邊播”。

二、Http-FLV 傳輸過程

HTTP-FLV 需 “推流端 - 流媒體服務器 - 播放端” 三方協作,流程如下:

  1. 推流端:通過 RTMP 協議(如 OBS、FFmpeg)將原始視頻流(攝像頭 / 本地文件)推送到流媒體服務器(如 SRS、Nginx-RTMP-Module、EasyDarwin),

  2. 服務器轉流:服務器接收 RTMP 流后,會實時接收主播推來的視頻 / 音頻數據(比如通過 RTMP 推流到服務器),并即時封裝成 FLV 格式的 “數據單元”,實時封裝為 FLV 格式(無需完整生成 FLV 文件),然后,服務器會把這些 FLV 數據按 “1-2 秒的播放時長” 切成一塊一塊,并通過 HTTP 端口(80/443)對外提供訪問地址(如 http://xxx.com/live/stream.flv);

  3. 客戶端: 按塊處理,收到第一塊數據(1-2 秒的 FLV 內容),立即解析其中的 FLV Tag(提取視頻幀、音頻幀和時間戳),然后調用解碼器(比如 H.264 視頻解碼器、AAC 音頻解碼器)解碼這部分數據,解碼完成后直接播放,不用等后續塊。同時,客戶端會繼續接收第二塊、第三塊… 重復 “接收→解碼→播放” 的流程,直到收到 “大小為 0 的空塊”(直播結束)。

    • 瀏覽器通過 flv.js(開源插件)或原生支持 FLV 的播放器(如 Video.js)發起 HTTP GET 請求,獲取流地址;
    • 服務器返回 Content-Type: video/x-flv 響應頭,以 Chunked 模式持續推送 FLV 數據塊;
    • 客戶端解析 FLV Tag,分離視頻 / 音頻數據,通過 HTML5 <video> 標簽解碼播放。

在這里插入圖片描述

三、Http-FLV 對比HLS、本地FLV

3.1 Http-FLV 特點

  • 優勢

    • 低延遲:基于 Chunked 傳輸,延遲通常控制在 1-5 秒(遠低于 HLS),適合半實時場景(如電商直播、教育直播);
    • 防火墻穿透:使用 HTTP 標準端口(80/443),避免 RTMP 1935 端口被攔截的問題;
    • 兼容性:原生瀏覽器雖然不支持,但可以通過 flv.js 庫解析,在 Chrome、Firefox、Edge 等現代瀏覽器運行,移動端也支持。
  • 局限性補充

    • 無原生自適應比特率(ABR):若網絡波動,需服務器額外提供多碼率流(如 720P/480P),客戶端手動切換;
    • 連接穩定性依賴 HTTP 長連接:若網絡中斷,需重新請求并恢復播放,可能丟失部分數據
    • 它的傳輸特性會讓流媒體資源緩存在本地客戶端,也就是說保密性不怎么樣;直到目前仍然不兼容iOS的瀏覽器

3.2 HLS 特點

HLS(HTTP Live Streaming)是蘋果推出的基于 HTTP 的自適應比特率流媒體協議,核心是 “切片傳輸”,與 HTTP-FLV 同為 Web 流媒體主流方案,但技術路徑差異顯著。

1. HLS 協議簡述

  • HLS 將視頻流切分為 10-30 秒的 TS 片段(MPEG-TS 格式,支持 H.264/AAC),并生成一個 M3U8 索引文件(文本格式,記錄 TS 片段的 URL、時長、碼率)。

  • 客戶端先請求 M3U8,再按順序請求 TS 片段播放,支持自動切換不同碼率的 M3U8(如網絡差時切 480P,網絡好時切 1080P)。

2. HTTP-FLV 對比HLS

對比如下

對比維度HTTP-FLVHLS
傳輸協議HTTP 協議(Chunked Encoding 分塊傳輸)HTTP 協議(基于 TS 切片 + M3U8 索引)
數據格式FLV 容器(Tag 結構,二進制流)TS 片段(MPEG-TS 容器)+ M3U8 索引(文本)
延遲表現低(1-5 秒),適合半實時場景高(15-60 秒),切片越長延遲越高
自適應比特率需額外開發(服務器提供多碼率流,客戶端切換)原生支持(M3U8 可包含多碼率索引,自動切換)
瀏覽器支持flv.js 插件(Chrome/Firefox/Edge 等)原生支持(Safari 全版本,Chrome/Firefox 需 HLS.js)
設備兼容性支持 Web 端、Android 端;iOS 需第三方播放器全平臺支持(iOS 原生支持,Android/Web 需插件)
緩存機制無持久化緩存(流數據實時播放,不存儲片段)自動緩存 TS 片段(可離線播放已緩存片段)
帶寬適應性固定碼率(網絡波動易卡頓)動態碼率(根據帶寬自動切換,抗卡頓能力強)
部署復雜度簡單(普通 HTTP 服務器 + 流媒體模塊即可)較復雜(需切片工具 + 索引生成 + 多碼率管理)
適用場景低延遲直播(電商、教育、會議)高容錯直播 / 點播(賽事回放、視頻網站點播)

主要差別

  • 延遲是關鍵分水嶺:HTTP-FLV 適合需要 “近實時互動” 的場景(如主播與觀眾連麥),HLS 適合對延遲不敏感、追求流暢性的場景(如體育賽事直播);
  • 自適應能力:HLS 原生支持 ABR,更適合移動端(網絡波動大),HTTP-FLV 需額外開發才能實現類似功能;
  • 兼容性:HLS 在 iOS 端有天然優勢(原生支持),HTTP-FLV 在 Web 端(尤其是 PC)部署更簡單。
  • HLS 支持加密,通過 “TS 文件加密 + 密鑰授權” 的成熟機制實現內容保護,能有效解決 “未加密流被緩存、竊取” 的問題

3.3 本地FLV 特點

本地 FLV 是存儲在本地設備(電腦 / 手機)的 FLV 文件(如 video.flv),與 HTTP-FLV(流媒體)的核心差異是 “數據形態與傳輸方式”,具體對比如下:

1. 本地 FLV 簡述

本地 FLV 是完整的文件,包含 FLV Header + 所有 Tag(視頻 / 音頻 / 腳本),需通過本地播放器(如 VLC、PotPlayer、暴風影音)加載并播放,無需網絡傳輸(除非從本地服務器讀取)。其播放邏輯是 “加載文件→解析元數據→按時間戳播放 Tag 數據”,支持進度條拖動、倍速播放等交互。

2. Http-FLV 對比 本地FLV

對比如下:

對比維度HTTP-FLV本地 FLV
數據形態實時流媒體(無完整文件,僅傳輸數據塊)靜態文件(完整 FLV 結構,存儲在本地設備)
傳輸方式網絡傳輸(HTTP 分塊推送,依賴網絡)本地讀取(從硬盤 / 內存加載,無網絡依賴)
播放機制邊傳邊播(接收一塊播放一塊,無法提前加載)可完整加載后播放,或本地流式播放(支持拖動進度條)
延遲表現網絡延遲(1-5 秒)+ 解碼延遲無網絡延遲(僅解碼延遲,毫秒級)
存儲需求服務器存儲(實時生成流,不持久化片段)本地存儲(需占用設備空間,如 1GB 文件占 1GB 空間)
交互能力弱(僅支持暫停 / 播放,無法拖動進度條)強(支持拖動進度條、倍速、字幕加載等)
播放依賴流媒體服務器 + 瀏覽器插件(如 flv.js)本地播放器(如 VLC、PotPlayer)
適用場景實時直播(無本地存儲需求,需網絡)離線播放(下載后觀看,如本地視頻、離線課程)

主要差異:

  • “流” 與 “文件” 的本質區別:HTTP-FLV 是 “實時生成、實時傳輸、實時播放” 的流,無完整文件實體;本地 FLV 是 “預生成、本地存儲、按需播放” 的文件;
  • 網絡依賴性:HTTP-FLV 完全依賴網絡(斷網即停),本地 FLV 無需網絡(下載后可離線播放);
  • 交互體驗:本地 FLV 支持完整的點播交互(如拖動進度條),HTTP-FLV 因是實時流,無法跳轉播放未傳輸的內容。

四、協議場景選擇

  1. 選 HTTP-FLV 的場景

    • 需低延遲的 Web 直播(如電商直播、在線教育、企業會議);
    • 網絡環境嚴格(僅開放 80/443 端口,需穿透防火墻);
    • 部署資源有限(僅能搭建普通 HTTP 服務器)。
  2. 選 HLS 的場景

    • 對延遲不敏感,但需跨平臺(尤其是 iOS 端)的直播 / 點播(如體育賽事、電影點播);
    • 網絡波動大的場景(如移動端 4G/5G 環境,需自適應比特率抗卡頓);
    • 需支持離線緩存的場景(如用戶希望緩存部分內容稍后觀看)。
  3. 選本地 FLV 的場景

    • 離線播放需求(如下載視頻后無網絡觀看);
    • 需高頻交互的點播場景(如反復拖動進度條、倍速播放);
    • 無網絡環境(如飛機、地鐵上的本地視頻播放)。

綜上,HTTP-FLV 是 “低延遲 Web 直播” 的優選方案,而 HLS 更適合 “跨平臺、高容錯” 的流媒體場景,本地 FLV 則是 “離線點播” 的經典選擇,三者需根據實際需求(延遲、平臺、網絡)靈活搭配。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921544.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921544.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921544.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp vue頁面傳參到webview.nvue頁面的html或者另一vue中

在app內部使用 uni.$emit(collectiones, { data: gx });傳到webview.nvue頁面 在webview.nvue頁面接受 uni.$on(collectiones, (data) > {console.log(接收到的數據:, data.data);});使用evalJS方法 nvue webview通信示例 這塊使用receiveMessageFromNvue方法這樣傳入的 u…

美團大模型“龍貓”登場,能否重塑本地生活新戰局?

美團大模型“龍貓”登場&#xff0c;能否重塑本地生活新戰局&#xff1f; 美團大模型登場&#xff1a;行業投下重磅炸彈 在大模型技術迅猛發展的當下&#xff0c;每一次新模型的發布都如投入湖面的石子&#xff0c;激起層層漣漪。美團推出的龍貓大模型 LongCat-Flash&#xff0…

shell(十三)參數代換

shell參數代換xargs. 產生命令的參數1. cut -d : -f 1 /etc/passwd | head -n 3 | xargs finger2. 執行前詢問用戶cut -d : -f 1 /etc/passwd | head -n 3 | xargs -p finger如果直接按回車就退出3. 指定查閱參數個數cut -d : -f 1 /etc/passwd | xargs -p -n 5 finger4. 指定遇…

Proteus 仿真 + STM32CubeMX 協同開發全教程:從配置到仿真一步到位

為幫助你精準掌握「Proteus 仿真 STM32CubeMXSTM32F103R6」的協同開發流程&#xff0c;本文將聚焦該芯片的特性&#xff0c;從工具適配、分步實操到進階案例&#xff0c;用富文本格式清晰呈現細節&#xff0c;尤其適合新手入門 32 位單片機開發&#xff1a;ProteusSTM32CubeMX…

WIN10+ubuntu22.04.05雙系統裝機教程

最近DIY了一臺5070TI顯卡主機&#xff0c;目的是跑IsaacSim5.0仿真&#xff0c;記錄雙系統裝機過程。 1.Ubuntu22.04.05系統盤制作 參考教程&#xff1a;01_【U盤制作ubuntu22.04啟動盤并為電腦安裝系統記錄】_制作ubuntu22.04安裝u盤-CSDN博客 U盤因為是64G的&#xff0c;而…

構建高可用二級緩存系統

二級緩存機制原理詳解1. 整體架構MyBatis-Plus二級緩存采用裝飾器模式實現&#xff0c;核心組件包括&#xff1a;?Cache接口?&#xff1a;定義緩存基本操作?PerpetualCache?&#xff1a;基礎緩存實現&#xff08;HashMap&#xff09;?裝飾器?&#xff1a;如LruCache、Fif…

MacOS微信雙開,親測有效

本機配置打開終端運行以下命令 第一步&#xff1a;sudo cp -R /Applications/WeChat.app /Applications/WeChat2.app第二步&#xff1a;sudo /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.tencent.xinWeChat2" /Applications/WeChat2.app/Contents/Info…

Drupal XSS漏洞復現:原理詳解+環境搭建+滲透實踐(CVE-2019-6341)

目錄 一、Drupal XSS漏洞 二、環境搭建 1、確保系統已安裝 Docker 和 Docker-Compose 2、下載 Vulhub 3、進入漏洞環境 4、啟動漏洞環境 5、查看環境狀態 6、初始化Drupal環境 &#xff08;1&#xff09;訪問 Drupal 安裝頁面 &#xff08;2&#xff09;完成圖形化安…

Redis復制延遲全解析:從毫秒到秒級的優化實戰指南

Redis主從延遲飆升導致數據不一致&#xff1f;訂單丟失、緩存穿透頻發&#xff1f;本文深入剖析8大復制延遲元兇&#xff0c;并提供解決方案&#xff0c;讓你的復制延遲從秒級降到毫秒級&#xff01; 一、復制延遲:分布式系統的隱形殺手 ?? 什么是復制延遲&#xff1f; 當主…

數據預處理與特征工程全流程指南:數據清洗、缺失值填補、類別特征編碼、特征縮放歸一化、特征選擇與降維(PCA/LDA)實戰解析

1. 數據預處理與特征工程 “數據清洗、缺失值填補、類別特征編碼、特征縮放/歸一化、特征選擇與降維&#xff08;PCA、LDA&#xff09;” 等流程&#xff0c;雖然被反復提到&#xff0c;但要在復雜的實際數據集中一步步落實&#xff0c;難度很大。 摘要 在機器學習與深度學習…

小迪安全v2023學習筆記(七十九講)—— 中間件安全IISApacheTomcatNginxCVE

文章目錄前記服務攻防——第七十九天中間件安全&IIS&Apache&Tomcat&Nginx&弱口令&不安全配置&CVE中間件 - IIS-短文件&解析&藍屏等中間件 - Nginx-文件解析&命令執行等常見漏洞介紹漏洞復現中間件 - Apache-RCE&目錄遍歷&文件…

《云原生微服務治理進階:隱性風險根除與全鏈路能力構建》

云原生微服務架構已成為企業支撐業務快速迭代的核心載體&#xff0c;但治理能力的滯后卻常常成為制約發展的短板。許多企業在完成服務容器化、部署自動化后&#xff0c;便陷入了“架構先進但治理粗放”的困境—服務數量激增導致依賴關系失控&#xff0c;流量波動加劇引發資源配…

因泰立科技:用激光雷達重塑智能工廠物流生態

應對AGV碰撞困局——激光雷達如何重塑智能工廠物流在現代化工廠中&#xff0c;AGV&#xff08;自動引導車&#xff09;與移動機器人已成為提升生產效率的重要設備。然而&#xff0c;這些智能設備在忙碌的工廠環境中&#xff0c;卻時常面臨碰撞的困擾。這不僅影響了生產效率&…

Remove.bg:精準自動摳圖工具,高效解決圖片去背景需求

有沒有做設計時被 “摳圖去背景” 搞到崩潰的朋友&#xff1f;上次小索奇幫同事做活動海報&#xff0c;要把人物圖從復雜背景里摳出來&#xff0c;用 PS 選了半天鋼筆工具&#xff0c;頭發絲還是漏一塊缺一塊&#xff0c;折騰半小時都沒弄好 —— 后來被設計圈的朋友安利了 Rem…

功率器件固晶挑戰:抗高溫翹曲治具提升IGBT焊接強度30%

功率器件封裝新突破&#xff1a;耐高溫防變形工裝助力IGBT模塊焊接強度提升30%在功率半導體封裝領域&#xff0c;IGBT模塊的芯片貼裝工藝正面臨嚴峻挑戰。隨著功率密度不斷提升&#xff0c;傳統固晶工裝在高溫環境下易發生形變&#xff0c;導致焊接層產生空洞、裂紋等缺陷。最新…

MATLAB可以實現的各種智能算法

MATLAB可以實現的各種智能算法(包括但不限于)中文名稱英文全稱縮寫出現年份算法來由&#xff08;靈感來源&#xff09;遺傳算法Genetic AlgorithmGA1975模擬達爾文生物進化論的自然選擇和遺傳學機理&#xff08;選擇、交叉、變異&#xff09;粒子群優化算法Particle Swarm Opti…

【iOS】push,pop和present,dismiss

文章目錄前言push和poppresent和dismiss基本方法屬性說明常見的用法運行演示push和present區別前言 在之前的學習中&#xff0c;我們發現iOS有兩種用于推出新界面的常用方法&#xff0c;分別是push和present&#xff0c;但是二者存在很多區別 present只能返回自己的上一級視圖…

編寫后端JAR包藍綠發布腳本

前端發布腳本的功能 保留每一個發布版本&#xff0c;防止新版本異常&#xff0c;方便回撤用戶無感知&#xff0c;防止發布過程中的宕機 原理&#xff1a; 發布的JAR包只是一個軟連接&#xff0c;新的JAR啟動正常后&#xff0c;切換軟連接指向即可。藍綠JAR包綁定端口不同&…

Kafka 和 RabbitMQ的選擇

h5打開以查看 選擇 Kafka 還是 RabbitMQ&#xff08;或其他傳統消息隊列&#xff09;并不是一個誰比誰更好的問題&#xff0c;而是 “哪種工具更適合你的特定場景” 的問題。 它們的設計哲學、核心架構和目標用例有根本性的不同。簡單來說&#xff1a; RabbitMQ 是一個消息代理…

LeetCode 刷題【66. 加一、67. 二進制求和】

66. 加一 自己做 解&#xff1a;逢十進位 class Solution { public:vector<int> plusOne(vector<int>& digits) {int add 1; //進位vector<int> res(digits.size() 1); //防止多一位的情況&#xff1a;9 1 10for(int i (int)digits…