Pergunta

Alguém teve a sorte de fazer o streaming criptografado para trabalhar com a transmissão ao vivo HTTP da Apple usando o OpenSSL? Parece que estou quase lá, mas meu vídeo não é reproduzido, mas também não recebo erros no Safari (como "Vídeo é não jogável" ou "Você não tem permissão para reproduzir este vídeo" quando recebi a chave errado).

#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

Eu estava usando estes documentos como guia:

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

Foi útil?

Solução

Ok, eu descobri ... meu comando hexdump estava errado. Deveria ser:

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

Outras dicas

Lembre-se também do seguinte, se você tiver mais de 1 TS "Chunk", e está procurando um substituto de exato bit para o pipeline de criptografia da Apple. Por padrão, a ferramenta de criptografia Apple atualiza o parâmetro IV (Vector de Inicialização) para cada um dos pedaços, que "aumenta a força da cifra", de acordo com a especificação do Panto.

Implementar isso significa apenas que o número da sequência precisa ser codificado em hexadecimal e aprovado como o parâmetro -iv para o 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

A combinação de informações de três dos itens acima (o OP, a correção para o hexdump e a informação IV) produziu uma solução de trabalho para nós. Nomeadamente:

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

Infelizmente, não tenho as ferramentas para experimentar isso. Parece que você seguiu cuidadosamente as especificações. Uma coisa que eu faria é farejar a rede, certifique -se de key.txt O arquivo está sendo baixado para o Safari. Eu também tentaria escolher explicitamente o IV usando o atributo IV da etiqueta Ext-X-Key, por exemplo

#EXT-X-KEY:METHOD=AES-128,URI="key.txt",IV=0x00000000000000000000000000000000
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top