HLS流媒體及下載技術


      在流媒體技術之前,人們瀏覽網絡上的音視頻資料必須先下載到本地,經過漫長的等待之后,才可以看到或聽到媒體內容。在流媒體技術出現之后,影像和聲音信息經過壓縮處理后放上網站服務器,由視頻服務器向用戶計算機順序或實時地傳送各個壓縮包,讓用戶一邊下載一邊觀看收聽,而不要等整個壓縮文件下載到自己的計算機上才可以觀看。

      常用的流媒體協議主要有基於HTTP的漸進下載和基於RTSP/RTP 的實時流媒體協議。HLS(HTTP Live Streaming)是蘋果公司實現的基於 HTTP 的流媒體協議,由於搭建方便,時效性高,廣泛支持移動端,當前主流的視頻內容提供網站都采用了基於HLS的流媒體分發技術。

      在筆者的工作中發現,ChinaDaily和Yahoo上的視頻都是采用HLS技術。這里以Yahoo上的視頻為例,講解此類文件的下載方式,在文末會給出工具的下載地址。

一個Yahoo!Japan上的視頻新聞地址如下:https://headlines.yahoo.co.jp/videonews/nnn?a=20170515-00000083-nnn-soci,從頁面源碼中很難分析視頻的下載地址或相關下載信息。筆者的經驗是抓包逆推,從視頻鏈接回溯到下載信息。比如我抓包獲得了第一個視頻地址如https://******/output_00001.ts,從中便可以推斷它用的是流媒體協議。在網絡截包中向后搜索output_00001.ts字樣,便可以發現它出現在HLS協議播放列表文件m3u8中,文件地址類似https://*****/hls/Lf8oggKM2m_20LY-/video.m3u8?bw=500&session_token=9azOfXcZQ91tJI4iwT0qoXPL15yJhsgE1vOOo1w-&https=1。直接反向查找該地址無果,猜測最終地址為拼接所得,反向查找session_token后面的那串字符,可以再次跳入一個鏈接,提供了m3u8文件的真實下載地址類似https://****** /374368?appid=dj0zaiZpPVZMTVFJR0FwZWpiMyZzPWNvbnN1bWVyc2VjcmV0Jng9YjU-&output=json&space_id=2078710338&domain=headlines.yahoo.co.jp&ak=ed48189df5812ecc9e13b0875a21918c&device=pc&callback=jsonp_1494851675114_13395,經過多樣本采集和逆推可發現,該地址中變化的是content/后面的數字id,此id可在視頻下載頁面的源文件中找到(contentid),至此,此類視頻下載的流程已清楚。

      下面重點介紹下HLS中最重要的播放列表m3u8文件。m3u8 是采用了 UTF-8 編碼的 m3u 文件。它只是一個純索引文件,一個文件片段的列表,客戶端根據它里面承載的信息找到適配的視頻文件的網絡地址進行下載、解密(可選)、順序播放。Yahoo采用的m3u8文件如下:

#EXTM3U:文件標記

#EXT-X-VERSION:版本號

#EXT-X-ALLOW-CACHE:客戶端是否允許緩存下載文件,如果為NO,在客戶端的臨時文件里也是找不到已經看過的ts文件。

#EXT-X-TARGETDURATION:指定最大的媒體段時間長(秒)。所以#EXTINF中指定的時間長度必須小於或是等於這個最大值,一般10秒左右一個ts分片。

#EXT-X-KEY(注意了划重點):使用了該項表明此次HLS傳輸的ts媒體段有加密,加密方式為AES-128,加密密鑰為16字節的key文件,下載地址在URI中,AES的加密向量IV附后。

#EXTINF:指定每個ts媒體段的持續時間和鏈接。

在HLS傳輸協議中,對流媒體加密是可選項,加密的好處不言而喻,用戶即使采集到了所有的ts文件,也是無法直接觀看的。當然,對搭建網站的技術要求也更高。

HLS網站的視頻下載分析結束,下面就可以愉快的編程實現自動化啦,給出一個簡單的算法流程。

 

      最后給出工具的下載地址:鏈接: https://pan.baidu.com/s/1bpEgMTL 密碼: 45nu


免責聲明!

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



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