ffmpeg 合并下载m3u8流媒体

ffmpeg 合并下载m3u8流媒体

m3u8 不是一个视频文件,而是一个playlist。用 sublime text 打开下载下载下来的 m3u8 文件是这样子的:


   
   
   
   
  1. #EXTM3U
  2. #EXT-X-VERSION:3
  3. #EXT-X-MEDIA-SEQUENCE:0
  4. #EXT-X-ALLOW-CACHE:YES
  5. #EXT-X-KEY:METHOD=AES-128,URI="http://hls.videocc.net/a0713eea93/3/a0713eea93d0d017ace1c26de982c673_3.key?pid=1548059731161X1008771&ts=1548059730000&sign=859d3dbfd2f62e76b6e4ba4ed110cbca&ms=d45fbe22c7d970a99750939929f27276",IV=0xa8db2560ebdc26250e7c559e48389139
  6. #EXT-X-TARGETDURATION:12
  7. #EXTINF:11.120000,
  8. http: //ab-mts.videocc.net/a0713eea93/18/1512390832000/3/82/c6/73_3/a0713eea93d0d017ace1c26de982c673_3_0.ts?pid=1548059731161X1008771&ts=1548059730000&sign=d45fbe22c7d970a99750939929f27276
  9. #EXTINF:9.960000,
  10. http: //ab-mts.videocc.net/a0713eea93/18/1512390832000/3/82/c6/73_3/a0713eea93d0d017ace1c26de982c673_3_1.ts?pid=1548059731161X1008771&ts=1548059730000&sign=d45fbe22c7d970a99750939929f27276

可以看到,视频被分成了很多段。

如果没有 #EXT-X-KEY 或是 EXT-X-KEY:METHOD=NONE,说明视频没有被加密,可以直接用命令下载

ffmpeg -protocol_whitelist "file,http,crypto,tcp" -i a0713eea93d0d017ace1c26de982c67.m3u8 1.ts
   
   
   
   

如果视频已加密,下面着重讲怎样获取解密的 key

使用 fiddler 网络抓包,找到下载 key 的请求。看 RAW 文本发现是乱码,因为 key 的内容不是可读的字符。从右侧的窗口选择 Inspectors -> HexView, 黑色的部分就是 key 的内容,以16进制显示。

ffmpeg 合并下载m3u8流媒体_第1张图片

选择黑色的部分,右键 -> save selected bytes 保存成文件,例如名字 a.key。后面解密将要用到。

sublime 打开 m3u8 文件,将 EXT-X-KEY 的 URI 修改成 a.key 的路径,然后执行命令

ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i a0713eea93d0d017ace1c26de982c67.m3u8 1.ts
   
   
   
   

开始下载视频。

你可能感兴趣的:(ffmpeg 合并下载m3u8流媒体)