zoukankan      html  css  js  c++  java
  • 加密的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
    
  • 相关阅读:
    Java中的pom.xml
    Java中request请求配置
    java,名称工具类。手机号加星。
    Java数据库查询与循环处理
    php接口分页
    java中sql映射机制
    java中的model映射
    Java启动项目
    httpSession.removeAttribute 移除header中的属性
    mybatisplus 查询数据
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/9033988.html
Copyright © 2011-2022 走看看