Использование шифрования openssl для HTTP Live Streaming от Apple - PullRequest
12 голосов
/ 10 июня 2010

Кому-нибудь посчастливилось получить зашифрованную потоковую передачу для работы с Apple HTTP Live Streaming с использованием openssl?Кажется, я почти на месте, но мое видео не воспроизводится, но я не получаю никаких ошибок в 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 ]

10 голосов
/ 15 июня 2010

Хорошо, я понял это ... Моя команда hexdump была неправильной.Должно быть:

hexKey=$(cat key.txt | hexdump -e '16/1 "%02x"')
7 голосов
/ 04 августа 2010

Также имейте в виду следующее, если у вас есть более 1 «порции» TS, и вы ищете точную замену для конвейера шифрования Apple.По умолчанию инструмент шифрования Apple обновляет параметр IV (вектор инициализации) для каждого из блоков, что «увеличивает прочность шифра», в соответствии со спецификацией Pantos.

Реализация этого означает, что последовательностьчисло должно быть закодировано в шестнадцатеричном формате и передано в качестве параметра -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
4 голосов
/ 30 августа 2010

Объединение информации из трех вышеперечисленных (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
0 голосов
/ 10 июня 2010

К сожалению, у меня нет инструментов, чтобы экспериментировать с этим. Похоже, вы тщательно следовали спецификации. Единственное, что я хотел бы сделать, - это прослушать сеть и убедиться, что файл key.txt загружается в Safari. Я также попытался бы явно выбрать IV, используя атрибут IV тега EXT-X-KEY, например,

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