Это может быть немного рубить, но дал URL к файлу .m3u8, она будет скачать и расшифровать файлы, составляющие поток:
#!/usr/bin/env bash
curl "$1" -s | awk 'BEGIN {c=0} $0 ~ "EXT-X-KEY" {urlpos=index($0,"URI=")+5; ivpos=index($0,"IV="); keyurl=substr($0, urlpos, ivpos-urlpos-2); iv=substr($0, ivpos+5); print "key=`curl -s '\''"keyurl"'\'' | hexdump -C | head -1 | sed \"s/00000000//;s/|.*//;s/ //g\"`"; print "iv="iv} $0 !~ "-KEY" && $0 ~ "http" {printf("curl -s '\''"$0"'\'' | openssl aes-128-cbc -K $key -iv $iv -d >seg%05i.ts\n", c++)}' | bash
Этого скрипт генерирует второй сценарий, извлекает ключи и векторы инициализации и использует их для дешифрования при загрузке. Для этого нужны завитки, awk, hexdump, sed и openssl. Вероятно, он задохнется в незашифрованном потоке или потоке, который использует что-то другое, кроме AES-128 (поддерживается ли любое другое шифрование?).
Вы получите кучу файлов: seg00000.ts, seg00001.ts и т. Д. Используйте tsMuxeR (https://www.videohelp.com/software/tsMuxeR), чтобы объединить их в один файл (простая конкатенация не сработала для меня ... это то, что я попробовал первый):
(echo "MUXOPT --no-pcr-on-video-pid --new-audio-pes --vbr --vbv-len=500"; (echo -n "V_MPEG4/ISO/AVC, "; for i in seg*.ts; do echo -n "\"$i\"+"; done; echo ", fps=30, insertSEI, contSPS, track=258") | sed "s/+,/,/"; (echo -n "A_AAC, "; for i in seg*.ts; do echo -n "\"$i\"+"; done; echo ", track=257") | sed "s/+,/,/") >video.meta
tsMuxeR video.meta video.ts
(идентификаторы трека и фреймрейт может потребоваться корректировка ... получить значения для использования при прохождении одного из загруженных файлов tsMuxeR)
Затем с помощью FFmpeg ремультиплексирования к чему-то. бит более широко понимается:
ffmpeg -i video.ts -vcodec copy -acodec copy video.m4v
Кажется, это сложнее, чем я думал, спасибо за ваше объяснение , Теперь я попытаюсь найти ключ. – dabiboo