针对Apple的HTTP直播流的openssl aes-128加密问题

时间:2012-10-24 10:54:39

标签: ios encryption openssl aes http-live-streaming

我们正在使用openssl aes-128 encryptionHLS video streaming上为Apple播放流媒体。

以下是用于aes-128 encryption

的命令
openssl aes-128-cbc -salt -k <HEXKey> -iv <HEXIV> -in <INFILE> -out <OUTFILE>

以下我的Playlist / Index文件用于hls流媒体。

#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:NO
#EXT-X-VERSION:2
#EXT-X-KEY:METHOD=AES-128,URI="http://xxx.xxxx.xxx/key.txt",IV=0x00000000000000000000000000000000
#EXT-X-TARGETDURATION:10
#EXTINF:10,
http://xxx.xxxx.xxx/encry.ts
#EXT-X-ENDLIST  

其中,key.txt包含格式为0x00000000000000000000000000000000的十六进制密钥。

但这不起作用,不在IOS设备上播放媒体。提供错误为This movie could not be played

我不确定,它有什么问题。这个问题是encryption method还是playlist file

请帮帮我。我会感激的。

先谢谢

编辑:

我觉得,如果有任何不妥之处,可能会有所帮助。

以下是我用于创建十六进制keyIV

的命令
openssl enc -aes-128-cbc -k String@MyKey -P -md sha1

如果有任何问题,请帮助我。

现在我的播放列表文件正在使用Media Stream Validator进行解析,但在验证媒体时会出现以下错误。

unable to parse segment due to encryption

请帮助任何人。

4 个答案:

答案 0 :(得分:2)

您的问题实际上是文件'key.txt'。 HLS规范说#EXT-X-KEY标记中的URI属性必须指向一个二进制格式的16个八位字节数组的文件,而不是你提供的十六进制字符串。

有关详细信息,请参阅:http://tools.ietf.org/html/draft-pantos-http-live-streaming-10#section-5

答案 1 :(得分:2)

好吧,实际问题是key.txt文件,我刚才在几个小时之前发现了这个文件。 我的key.txt不应包含hexkey,但应包含16bytes密钥。

所以我的密钥创建方法并在加密方法和playlist文件中使用它是错误的步骤。

以下是我所做的更改及其开始工作。

创建密钥的命令

openssl rand -base64 12 

现在我在key.txt文件中添加了这个键,而我的index.m3u8文件指向了这个密钥文件。

用于加密,使用在<hex-key>

中使用c#of above key的hexdump
openssl aes-128-cbc -e -in <infile> -out <outfile> -p -nosalt -iv <hex-iv>  -K <hex-key>

答案 2 :(得分:0)

您的EXT-X-KEY语法错误:

在密钥uri之前应该 URI 而不是密钥

#EXT-X-KEY:METHOD=AES-128,URI="http://xxx.xxxx.xxx/key.txt",IV=0x00000000000000000000000000000000

答案 3 :(得分:0)

我有相同的问题,但仅在IOS设备上使用(浏览器,例如chromecast,firefox ...都可以) 这是我的播放列表

thread.join()

我与野生动物园网络检查器进行了核对,但我不明白,该密钥已正确下载,但在其下载第一段时便停止了

有人遇到同样的问题吗?

enter image description here