ruby 解密HTTP直播流文件TS文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 解密HTTP直播流文件TS文件相关的知识,希望对你有一定的参考价值。

def read_m3u8(m3u8)
    File.open(m3u8, 'r') do |file|
        keyfile = nil
        iv = 0
        file.each_line do |line|
            line.chomp!
            if line =~ /^#EXT-X-KEY:METHOD=AES-128,URI="(.*?)"(,IV=0x(.*))?/
                keyfile = $1
                if $2
                    iv = $3
                    iv_gen = :random
                else
                    iv_gen = :sequence
                end
            elsif not line =~ /^#/
                in_file = File.join(File.dirname(m3u8), line)
                ext = File.extname(in_file)
                out_file = File.join(File.dirname(in_file), File.basename(in_file, ext) + '.clear' + ext)
                decrypt(in_file, keyfile, iv, out_file)
                if iv_gen == :sequence
                    iv += 1
                end
            end
        end
    end
end

def decrypt(in_file, keyfile, iv, out_file)
    key = load_key(keyfile)
    iv_hex = sprintf('%032x', iv)
    %x{openssl aes-128-cbc -d -K #{key} -iv #{iv_hex} -nosalt -in #{in_file} -out #{out_file}}
end

def load_key(keyfile)
    File.open(keyfile, 'rb') do |file|
        file.read.unpack('H*')[0]
    end
end

read_m3u8(ARGV[0])

以上是关于ruby 解密HTTP直播流文件TS文件的主要内容,如果未能解决你的问题,请参考以下文章

网上的TS流视频文件下载,解密,合成一个文件的python方法(转的别人大佬的,自己存一份~~)

rtsp与http协议

iOS_直播类app_HTTP Live Streaming

调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议

JavaCV音视频开发宝典:UDP推流 使用UDP方式推送TS流 实现UDP一对一直播点播

JavaCV音视频开发宝典:UDP推流 使用UDP方式推送TS流 实现UDP一对一直播点播