Надіслав: Admin , дата:

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 

Теґи