加密的m3u8、ts文件合並


加密后的ts文件不能直接合並或播放,需要使用key對每個ts文件進行解密。

分為兩種情況:
(1).如果ts文件已經全部下載好,則可以直接在本地通過ffmpeg快速解密合並。
(2).如果ts文件沒有下載好,則可以通過vlc直接下載整個視頻,或者通過ffmpeg下載並轉換。

無論是哪種情況,都要去視頻源地址下載m3u8文件。如果可以下載key(有些網站加密方式比較嚴謹,不那么容易獲取到key),把key文件也下載好。

下載m3u8文件的方式是去源地址網站,按F12找到m3u8文件,或者從右鍵-->網頁源代碼中找到地址。兩種方式都試一試。

例如,從瀏覽器的F12中找:

這里能找到兩個m3u8和一個key文件,都下載好。記事本打開兩個m3u8,其中有一個包含了ts文件列表,這個m3u8文件是我們所需要的。例如我這里的是HdNz1kaz.m3u8文件,以下是一小部分內容。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="/20180125/NfJJpxIH/1482kb/hls/key.key"
#EXTINF:12.5,
/20180125/NfJJpxIH/1482kb/hls/GBDYO3576000.ts
#EXTINF:12.5,
/20180125/NfJJpxIH/1482kb/hls/GBDYO3576001.ts
#EXTINF:12.5,
/20180125/NfJJpxIH/1482kb/hls/GBDYO3576002.ts

1.情形一:ts文件已經下載好

假如我的ts文件全部下載好,放在e:\20180125\目錄下。

同時假設key文件已經下載好,也放在e:\20180125\目錄下。

修改m3u8文件中key的uri路徑和ts文件的路徑為本地路徑。下面是HdNz1kaz.m3u8文件修改后的一小部分內容

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="e:/20180125/key.key"
#EXTINF:12.5,
e:/20180125/GBDYO3576000.ts
#EXTINF:12.5,
e:/20180125/GBDYO3576001.ts
#EXTINF:12.5,
e:/20180125/GBDYO3576002.ts

然后用ffmpeg進行合並。

ffmpeg -allowed_extensions ALL -i HdNz1kaz.m3u8 -c copy new.mp4

我一般會把ts文件下載好,因為用下載工具(比如迅雷)下載比ffmpeg或者vlc下載速度要快的多,因為這兩個工具都是串行下載的。

2.情形二:ts文件沒有下載

同樣,下載好m3u8文件(key可下載可不下載,因為可以直接在m3u8文件中指定key的網絡uri路徑)。

修改m3u8文件中key和ts的uri路徑。下面是HdNz1kaz.m3u8文件修改后的一小部分內容。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="http://www.example.com/20180125/key.key"
#EXTINF:12.5,
http://www.example.com/20180125/GBDYO3576000.ts
#EXTINF:12.5,
http://www.example.com/20180125/GBDYO3576001.ts
#EXTINF:12.5,
http://www.example.com/20180125/GBDYO3576002.ts

然后,使用ffmpeg下載並合並。

ffmpeg -i HdNz1kaz.m3u8 -c copy new.mp4

3.openssl解密ts文件

假如key的值為:asdjklfjaskdlf
key的IV值(m3u8文件中已經記錄)為"0x0123456789abcdef0123456789abcdef"

則解密 GBDYO3576000.ts的方法為:

strkey=asdjklfjaskdlf
iv=0x0123456789abcdef0123456789abcdef
openssl aes-128-cbc -d -in GBDYO3576000.ts -out out_0.ts -nosalt -K $strkey  -iv $iv

4.使用vlc下載並保存ts文件

播放列表的下方有播放進度條,它表示下載的進度,不要去動,也不要去點擊播放、暫停、停止等,放着別管就是了,直到播放進度條完成了,就表示文件合並完成。去文件保存位置的地方看看就知道了。

ffmpeg報錯

錯誤:

Malformed AAC bitstream detected: use the audio bitstream filter 'aac_adtstoasc' to fix it ('-bsf:a aac_adtstoasc' option with ffmpeg)

需要在合並視頻的時候,加上-bsf:a aac_adtstoasc

ffmpeg -i index.m3u8 -c copy -bsf:a aac_adtstoasc new.mp4
ffmpeg -i index.m3u8 -c:a copy -bsf:a aac_adtstoasc new.mp4

錯誤:

Codec for stream 0 does not use global headers but container format requires global headers
Codec for stream 1 does not use global headers but container format requires global headers

需要加上global header

ffmpeg -i index.m3u8 -c:a copy -flags +global_header new.mp4


免責聲明!

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



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