PRMOVIES downloader — це новий парсер для Universal Movies Downloader, який дозволяє завантажувати файли mp4 з веб-сайту prmovies і переглядати їх без надокучливої реклами.
Тож я вирішив запровадити додатковий сервіс для свого завантажувача Universal Movies.
Цього разу було нелегко. Гравець з iframe та інших сервісів шукає реферера в заголовках запиту. Для цього рішення було використано curl замість wget.
Я використовую заголовок за умовчанням, для якого було скопійовано з браузера в кожному запиті на сервер.
Щоб створити правильну змінну заголовка, спочатку слід створити масив, а потім об’єднати всі значення в змінну
headers_source=(
"Accept: */*"
"Accept-Language: en-US,en;q=0.9"
"Cache-Control: no-cache"
"Connection: keep-alive"
"Origin: https://somedomain.com"
"Pragma: no-cache"
"Referer: https://somedomain.com/"
"Sec-Fetch-Dest: empty"
"Sec-Fetch-Mode: cors"
"Sec-Fetch-Site: cross-site"
"User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36"
"sec-ch-ua: \"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\""
"sec-ch-ua-mobile: ?0"
"sec-ch-ua-platform: \"Linux\""
)
CURL_HEADERS=""
for header in "${headers_source[@]}"; do
CURL_HEADERS+=" -H '$header;'"
doneІ невелика корисна функція для надсилання запитів до curl
# 1 - url
# 2 - headers string
curl_request() {
local url="$1"
local header_args="$2"
local cmd="curl -L -s ${header_args} '${url}'"
eval "$cmd"
}Завантаження списку відтворення FFMPEG за замовчуванням не працюватиме з цього веб-сайту, оскільки до кожного запиту потрібно додавати додаткові заголовки. Я не перевіряв, чи це можливо через ffmpeg.
Ще одна проблема, з якою я зіткнувся, полягає в тому, що ffmpeg показує помилку в кінці процесу, коли намагається об'єднати файли.
[concat @ 0x55f521281340] Impossible to open '/home/user/Videos/movies/segments/hanuman-2005-Watch-online-full-movie/seg-1-v1-a1.ts'
[in#0 @ 0x55f521281240] Error opening input: Invalid data found when processing input Відео у плейлисті зашифровані. Ми можемо побачити це у файлі m3u8.
#EXT-X-KEY:METHOD=AES-128,URI="https://someserver.com/enc_key?t=HASH1&s=HASH2&e=123456&f=12345&i=0.0&sp=0"У файлі списку відтворення HLS тег EXT-X-KEY визначає метод, який буде використовуватися для розшифрування медіа-сегментів. Він повідомляє відеоплеєру, як отримати необхідний ключ розшифрування, щоб розблокувати зашифровані медіа-сегменти та відтворити їх.
Отже, нам спочатку потрібно зберегти ключ, а потім декодувати кожне відео.
Згідно з документацією, нам також потрібен атрибут IV. Це необов'язковий параметр, і якщо він недоступний, плеєр використовуватиме медіа-послідовність як IV. Для декодування я використав перші 16 байтів кожного медіафайлу. Це працює добре.
Отримайте ключ із попередньо збереженого файлу.
KEY_HEX=$(od -tx1 -An -N 16 "$FILE_KEY" | tr -d ' ')отримати IV з завантаженого файлу та розшифрувати його:
local KEY_IV=$(od -tx1 -An -N 16 "${DESTINATION_FOLDER}/${DOWNLOADED_FILE}" | tr -d ' ')
openssl enc -d -aes-128-cbc -K ${KEY_HEX} -iv ${KEY_IV} -in "${DESTINATION_FOLDER}/${DOWNLOADED_FILE}" -out "${DESTINATION_FOLDER}/${DOWNLOADED_FILE}e"Приклад виконання цього скрипта:
./movie.sh https://prmovies.host/hanuman-2005-Watch-online-full-movie/
Нарешті, файл mp4 було створено, і він працює.
Єдина проблема полягає в тому, що на даний момент немає вибору якості. Буде завантажено файл найнижчої якості.
Посилання на вихідний код на github https://github.com/onesixromcom/movies-downloader