Using openssl encryption for Apple's HTTP Live Streaming

后端 未结 4 833
夕颜
夕颜 2021-02-02 18:12

Has anyone had any luck getting encrypted streaming to work with Apple\'s HTTP Live Streaming using openssl? It seems I\'m almost there but my video doesn\'t play but I don\'t g

相关标签:
4条回答
  • 2021-02-02 18:45

    Okay, I figured it out... My hexdump command was wrong. It should be:

    hexKey=$(cat key.txt | hexdump -e '16/1 "%02x"')
    
    0 讨论(0)
  • 2021-02-02 18:54

    Also keep in mind the following, if you have more than 1 TS "chunk", and you're looking for a bit-exact replacement for the Apple encryption pipeline. By default, the Apple encryption tool updates the IV (initialization vector) parameter for each of the chunks, which "increases the strength of the cipher," according to the Pantos spec.

    Implementing this just means that the sequence number needs to be encoded in hex and passed as the -iv parameter to 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
    
    0 讨论(0)
  • 2021-02-02 18:55

    Combining information from three of the above (the OP, the fix for hexdump and the IV information) yielded a working solution for us. Namely:

    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 讨论(0)
  • 2021-02-02 18:59

    Unfortunately I don't have the tools to experiment with this. It looks like you carefully followed the spec. One thing I would do is sniff the network do make sure the key.txt file is getting downloaded to Safari. I would also try explicitly picking the IV using the IV attribute of the EXT-X-KEY tag, e.g.

    #EXT-X-KEY:METHOD=AES-128,URI="key.txt",IV=0x00000000000000000000000000000000
    
    0 讨论(0)
提交回复
热议问题