El uso de encriptación OpenSSL para HTTP Live Streaming de Apple
-
26-09-2019 - |
Pregunta
Alguien ha tenido un poco de suerte conseguir cifrado de streaming para trabajar con HTTP Live Streaming de Apple utilizando OpenSSL? Parece que casi estoy allí pero mi vídeo no se reproduce, pero no me sale algún error en Safari o bien (como "El video no se puede reproducir" o "Usted no tiene permiso para ver éste video" cuando llegué a la tecla incorrecto).
#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
I estaba usando estos documentos como guía:
http://tools.ietf.org/html/draft -pantos-http-live-streaming a
Solución
De acuerdo, lo he descubierto ... Mi comando hexdump estaba mal. Debe ser:?
hexKey=$(cat key.txt | hexdump -e '16/1 "%02x"')
Otros consejos
También hay que tener en cuenta lo siguiente, si tiene más de 1 TS "trozo", y que está buscando un reemplazo bit a bit de encriptación para el gasoducto de Apple. Por defecto, la herramienta de cifrado Apple actualiza el parámetro IV (vector de inicialización) para cada uno de los trozos, que "aumenta la resistencia de la cifra", de acuerdo con la especificación Pantos.
La implementación de esto sólo significa que las necesidades de número de secuencia a ser codificado en hexadecimal y pasan como el parámetro -IV a 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
combinando la información de tres de los anteriores (la OP, el arreglo para hexdump y la información IV) produjo una solución de trabajo para nos . A saber:
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
Por desgracia, no tienen las herramientas para experimentar con esto. Parece que ha seguido cuidadosamente la especificación. Una cosa que me gustaría hacer es oler la red do asegúrese de que el archivo key.txt
se está descargado en Safari. También me tratar explícitamente recoger la IV utilizando el atributo IV de la etiqueta EXT-X-KEY, por ejemplo
#EXT-X-KEY:METHOD=AES-128,URI="key.txt",IV=0x00000000000000000000000000000000