У кого-либо была удача, будучи зашифрованным, передавая потоком для работы с HTTP Apple Живой Потоковой передачи с помощью 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
Я использовал эти документы в качестве руководства:
Хорошо, я понял ... Моя команда hexdump была неправильной. Это должно быть:
hexKey=$(cat key.txt | hexdump -e '16/1 "%02x"')
К сожалению, у меня нет инструментов, чтобы поэкспериментировать с этим. Похоже, вы тщательно следовали спецификации. Единственное, что я бы сделал, это обнюхал сеть и убедился, что файл key.txt
загружается в Safari. Я бы также попытался явно выбрать IV, используя атрибут IV тега EXT-X-KEY, например
#EXT-X-KEY:METHOD=AES-128,URI="key.txt",IV=0x00000000000000000000000000000000
Также имейте в виду следующее, если у вас более 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