有没有人有幸使用 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

有帮助吗?

解决方案

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

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

其他提示

此外,还要注意以下,如果你有超过1个TS“块”,而你正在寻找一个比特精确更换为苹果加密管道。默认情况下,苹果加密工具来更新用于每个组块的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

结合上述三个信息(OP、hexdump 的修复和 IV 信息)产生了一个可行的解决方案 我们. 。即:

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

不幸的是我没有尝试这一工具。它看起来像你认真遵循规范。有一件事我会做的是嗅探网络DO确保key.txt文件下载得到Safari浏览器。我也尝试明确使用EXT-X-KEY标签的IV属性采摘IV,例如

#EXT-X-KEY:METHOD=AES-128,URI="key.txt",IV=0x00000000000000000000000000000000
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top