Question

Quelqu'un at-il eu de chance de se crypté à travailler avec le streaming HTTP d'Apple Live Streaming en utilisant OpenSSL? Il semble que je suis presque là, mais ma vidéo ne « Avez-vous n'êtes pas autorisé à jouer cette vidéo » joue pas, mais je n'avoir aucune erreur dans Safari soit (comme « La vidéo est injouable » ou quand je suis la clé faux).

#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

J'utilisais ces documents comme guide:

http://tools.ietf.org/html/draft -pantos-http-live streaming

Était-ce utile?

La solution

D'accord, je me suis dit dehors ... Ma commande hexdump a eu tort. Il devrait être:

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

Autres conseils

Gardez à l'esprit ce qui suit, si vous avez plus de 1 TS « gros morceau », et vous êtes à la recherche d'un remplaçant bit près pour le pipeline de cryptage Apple. Par défaut, l'outil de chiffrement d'Apple met à jour le paramètre IV (vecteur d'initialisation) pour chacun des blocs, ce qui « augmente la résistance de l'algorithme de chiffrement », selon la spécification Pantos.

La mise en œuvre, cela signifie simplement que le numéro de séquence doit être codé en hexadécimal et transmis en tant que paramètre -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

La combinaison de l'information à partir de trois de ce qui précède (la OP, le correctif pour hexdump et les informations de IV), a donné une solution de travail pour nous . A savoir:

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

Malheureusement, je n'ai pas les outils pour expérimenter avec cela. Il semble que vous soigneusement suivi les spécifications. Une chose que je voudrais faire est de renifler le réseau n'assurez-vous que le fichier est key.txt obtenir téléchargé sur Safari. Je voudrais aussi essayer choisir explicitement la IV en utilisant l'attribut IV de la balise EXT-X-KEY, par exemple

#EXT-X-KEY:METHOD=AES-128,URI="key.txt",IV=0x00000000000000000000000000000000
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top