2018年1月7日 星期日

下載 HLS (m3u8) 影片的方法

m3u8 為 Http Live Streaming (HLS) 串流的副檔名,目前在小鴨影音看到此格式。小鴨影音的說明,在瀏覽器上觀看此影片,需要有 flash 的支援。若瀏覽器不支援 flash,只會出現串流的網址。

ffmpeg -i http://n.bwzybf.com/20171126/qtPkXl6h/index.m3u8 -c copy Kingsman2.mkv

使用上述指令,能夠在下載的同時,即可觀看,慢個十分鐘看,就比在瀏覽器上看還順。
曾碰到的問題是,下載到一半,就停了,重新下載,又沒辦法指定開始時間,必須重頭開始。這問題,也許能找到解決方法吧。

另外,使用 VLC 播放器,也可以將影片 [轉換/儲存],但是必須在儲存後,才能觀看,比較麻煩。

假如你使用 Linux 的話,也懂 PHP 的話,請參考這作法 d93921012/Download-HLS-Files,在中斷之後,可以重新下載,比較方便。

並且,在下載的同時,將已下載的檔串起來i成一個大的 ts 檔,因此可以邊下載邊看。我在 Linux 下,是以 mpv 來觀看,算蠻方便的。

併行下載

有時候伺服器反應很慢,久久才下載一個 segment,使用 PHP 的 curl_multi_func 功能,改進程式,可以同時下載 5 個 segment。當然,只要修改變數值,即可更多個 thread 同時下載。

另外,在 curl 的連線參數加上 keep-alive,不關閉 connection,可以進一步提升下載速度。

原本一次下載一個 ts 檔案,有些網站反應較慢,會來不及即時觀看。經過改進後,短短 10 幾分鐘就可以下載完一個檔案,可以很舒服的觀看。

檔案簡要說明

從小鴨影音找到影片的連結,長得像這樣
http://youku163.zuida-bofang.com/20180505/4747_5bd4685f/index.m3u8

用 mpv 或 vlc 程式可以直接播放。用 curl 取得的內容如下
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
800k/hls/index.m3u8

這代表它只有一個解析度的影片,自己組合新的 url 如下
http://youku163.zuida-bofang.com/20180505/4747_5bd4685f/800k/hls/index.m3u8

用 curl 取得的內容
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.170000,
9aaa1ce7281000.ts
#EXTINF:4.170000,
9aaa1ce7281001.ts
 ....
#EXTINF:4.128300,
9aaa1ce72812015.ts
#EXTINF:4.170000,
9aaa1ce72812016.ts
#EXTINF:2.126700,
9aaa1ce72812017.ts
#EXT-X-ENDLIST

每一段影片的 url 長得這樣下
http://youku163.zuida-bofang.com/20180505/4747_5bd4685f/800k/hls/9aaa1ce7281001.ts


把這些資料一段一段接回去,就成為完整的影音檔了。



沒有留言:

張貼留言

網誌存檔