HLS


 HLS 簡介

HTTP Live Streaming(縮寫是 HLS)是由蘋果公司提出基於 HTTP 的流媒體網絡傳輸協議,它是蘋果公司 QuickTime X 和 iPhone 軟件系統的一部分。它的工作原理是把整個流分成一個個小的基於 HTTP 的文件來下載,每次只下載一些。當媒體流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會話適應不同的數據速率。

此外,當用戶的信號強度發生抖動時,視頻流會動態調整以提供出色的再現效果。

 

最初, 僅 iOS 支持 HLS。但現在 HLS 已成為專有格式,幾乎所有設備都支持它。顧名思義,HLS(HTTP Live Streaming)協議通過標准的 HTTP Web 服務器傳送視頻內容。這意味着你無需集成任何特殊的基礎架構即可分發 HLS 內容。

HLS 擁有以下特性:

  • HLS 將播放使用 H.264 或 HEVC / H.265 編解碼器編碼的視頻。
  • HLS 將播放使用 AAC 或 MP3 編解碼器編碼的音頻。
  • HLS 視頻流一般被切成 10 秒的片段。
  • HLS 的傳輸/封裝格式是 MPEG-2 TS。
  • HLS 支持 DRM(數字版權管理)。
  • HLS 支持各種廣告標准,例如 VAST 和 VPAID。

為什么蘋果要提出 HLS 這個協議,其實它的主要是為了解決 RTMP 協議存在的一些問題。比如 RTMP 協議不使用標准的 HTTP 接口傳輸數據,所以在一些特殊的網絡環境下可能被防火牆屏蔽掉。但是 HLS 由於使用的 HTTP 協議傳輸數據,通常情況下不會遇到被防火牆屏蔽的情況。除此之外,它也很容易通過 CDN(內容分發網絡)來傳輸媒體流。

3.2 HLS 自適應比特流

HLS 是一種自適應比特率流協議。因此,HLS 流可以動態地使視頻分辨率自適應每個人的網絡狀況。如果你正在使用高速 WiFi,則可以在手機上流式傳輸高清視頻。但是,如果你在有限數據連接的公共汽車或地鐵上,則可以以較低的分辨率觀看相同的視頻。

在開始一個流媒體會話時,客戶端會下載一個包含元數據的 Extended M3U(m3u8)Playlist 文件,用於尋找可用的媒體流。

(圖片來源:https://www.wowza.com/blog/hl...

為了便於大家的理解,我們使用 hls.js 這個 JavaScript 實現的 HLS 客戶端,所提供的 在線示例,來看一下具體的 m3u8 文件。

x36xhzz.m3u8

#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2149280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=1280x720,NAME="720" url_0/193039199_mp4_h264_aac_hd_7.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=246440,CODECS="mp4a.40.5,avc1.42000d",RESOLUTION=320x184,NAME="240" url_2/193039199_mp4_h264_aac_ld_7.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=460560,CODECS="mp4a.40.5,avc1.420016",RESOLUTION=512x288,NAME="380" url_4/193039199_mp4_h264_aac_7.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=836280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=848x480,NAME="480" url_6/193039199_mp4_h264_aac_hq_7.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6221600,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1080,NAME="1080" url_8/193039199_mp4_h264_aac_fhd_7.m3u8

通過觀察 Master Playlist 對應的 m3u8 文件,我們可以知道該視頻支持以下 5 種不同清晰度的視頻:

  • 1920x1080(1080P)
  • 1280x720(720P)
  • 848x480(480P)
  • 512x288
  • 320x184

而不同清晰度視頻對應的媒體播放列表,會定義在各自的 m3u8 文件中。這里我們以 720P 的視頻為例,來查看其對應的 m3u8 文件:

#EXTM3U #EXT-X-VERSION:3 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-TARGETDURATION:11 #EXTINF:10.000, url_462/193039199_mp4_h264_aac_hd_7.ts #EXTINF:10.000, url_463/193039199_mp4_h264_aac_hd_7.ts #EXTINF:10.000, url_464/193039199_mp4_h264_aac_hd_7.ts #EXTINF:10.000, ... url_525/193039199_mp4_h264_aac_hd_7.ts #EXT-X-ENDLIST

當用戶選定某種清晰度的視頻之后,將會下載該清晰度對應的媒體播放列表(m3u8 文件),該列表中就會列出每個片段的信息。HLS 的傳輸/封裝格式是 MPEG-2 TS(MPEG-2 Transport Stream),是一種傳輸和存儲包含視頻、音頻與通信協議各種數據的標准格式,用於數字電視廣播系統,如 DVB、ATSC、IPTV 等等。

需要注意的是利用一些現成的工具,我們是可以把多個 TS 文件合並為 mp4 格式的視頻文件。 如果要做視頻版權保護,那我們可以考慮使用對稱加密算法,比如 AES-128 對切片進行對稱加密。當客戶端進行播放時,先根據 m3u8 文件中配置的密鑰服務器地址,獲取對稱加密的密鑰,然后再下載分片,當分片下載完成后再使用匹配的對稱加密算法進行解密播放。

對上述過程感興趣的小伙伴可以參考 Github 上 video-hls-encrypt 這個項目,該項目深入淺出介紹了基於 HLS 流媒體協議視頻加密的解決方案並提供了完整的示例代碼。

(圖片來源:https://github.com/hauk0101/v...

 

 

參考文章:https://segmentfault.com/a/1190000023243743


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM