对Apple的HTTP直播流使用openssl加密

时间:2010-06-09 23:10:06

标签: http http-live-streaming

有没有人有幸运行加密流媒体与使用openssl的Apple的HTTP Live Streaming一起工作?看起来我差不多了,但我的视频没有播放,但我也没有在Safari中出现任何错误(例如“视频无法播放”或“你没有权限播放此视频”,当我拿到密钥时错误)。

#bash script:
keyFile="key.txt"
openssl rand 16 > $keyFile
hexKey=$(cat key.txt | hexdump -e '"%x"')
hexIV='0'
openssl aes-128-cbc -e -in $fileName -out $encryptedFileName -p -nosalt -iv ${hexIV}  -K ${hexKey}


#my playlist file:
#EXTM3U
#EXT-X-TARGETDURATION:000020
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="key.txt"
#EXTINF:20, no desc
test.ts.enc
#EXT-X-ENDLIST

我使用这些文档作为指南:

http://tools.ietf.org/html/draft-pantos-http-live-streaming

4 个答案:

答案 0 :(得分:10)

好的,我想通了......我的hexdump命令错了。它应该是:

hexKey=$(cat key.txt | hexdump -e '16/1 "%02x"')

答案 1 :(得分:7)

如果您有超过1个TS“块”,请记住以下内容,并且您正在寻找Apple加密管道的精确替代品。默认情况下,根据Pantos规范,Apple加密工具会更新每个块的IV(初始化矢量)参数,“增加密码的强度”。

实现这只意味着序列号需要以十六进制编码并作为-iv参数传递给openssl:

#!/bin/bash
keyFile="key.txt"
openssl rand 16 > $keyFile
hexKey=$(cat key.txt | hexdump -e '"%x"')
# hexIV='0'
for i in {0..number_of_TS_chunks}
do
    hexIV=`printf '%032x' $i`
    openssl aes-128-cbc -e -in $fileName -out $encryptedFileName -p -nosalt -iv ${hexIV} -K ${hexKey}
done

答案 2 :(得分:4)

结合上述三个方面的信息(OP,hexdump的修正和IV信息)为us提供了一个有效的解决方案。即:

openssl rand 16 > static.key

key_as_hex=$(cat static.key | hexdump -e '16/1 "%02x"')

for i in {0..9}; do
    init_vector=`printf '%032x' $i`
    openssl aes-128-cbc -e -in video_low_$(($i+1)).ts -out video_low_enc_$(($i+1)).ts -p -nosalt -iv $init_vector -K $key_as_hex
done

答案 3 :(得分:0)

不幸的是我没有工具来试验这个。看起来你仔细遵循规范。我要做的一件事是嗅探网络确保key.txt文件被下载到Safari。我还尝试使用EXT-X-KEY标签的IV属性明确选择IV,例如

#EXT-X-KEY:METHOD=AES-128,URI="key.txt",IV=0x00000000000000000000000000000000
相关问题