@NJohnDoe
Не программист

Как получить m3u8 файл с сайта?

Всем привет! Подскажите, пожалуйста, как мне получить рабочий m3u8 файл или целый видеоролик?
Есть сайт, который возвращает
вот такое

#EXTM3U
#EXT-X-TARGETDURATION:20
#EXT-X-ALLOW-CACHE:YES
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:20.000,
VIDEOID.mp666/Frag-1-v1-a1
#EXTINF:20.000,
VIDEOID.mp666/Frag-2-v1-a1
#EXTINF:20.000,
VIDEOID.mp666/Frag-3-v1-a1
#EXTINF:20.000,
VIDEOID.mp666/Frag-4-v1-a1
#EXTINF:20.000,
VIDEOID.mp666/Frag-5-v1-a1
#EXTINF:20.000,
VIDEOID.mp666/Frag-6-v1-a1
...
#EXT-X-ENDLIST


В одном из фрагментов, которые видны во вкладке network и выглядят так Frag-1-v1-a1, в поле Request URL записано это: https://какой-то_cdn.com/большой_путь_к_файлу/VIDE... и т.д

Так можно скачать видео через Streamlink
streamlink --http-header Origin=https://название_сайта "hls://https://какой-то_cdn.com/большой_путь_к_файл..." best -o свое_название.ts,
где в --http-header Origin=https://название_сайта указывает тот сайт, что указан в поле origin в браузере. При этом полностью удаляются расширения и остается только название видео (VIDEOID).
Но через Streamlink файл скачивается какой-то кривой. Весит гораздо меньше, все видео в артефактах, звук заикается.

Есть другой сайт, который тоже возвращает файл название_файла.m3u8. Там записано что-то
вроде этого

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:20
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:18.644867,
название_видео0.ts
#EXTINF:1.960422,
название_видео1.ts
#EXTINF:10.219222,
название_видео2.ts
#EXTINF:10.386067,
название_видео3.ts
#EXTINF:9.009600,
название_видео4.ts
#EXTINF:11.178578,
название_видео5.ts
#EXTINF:10.594622,
название_видео6.ts
...
#EXT-X-ENDLIST


В одном из фрагментов, которые видны во вкладке network и выглядит так название_видео0.ts, в поле Request URL записано это https://какой-то_сервер.cc/путь_к_файлу/название_в....
Если я скопирую ссылку файла m3u8 и вставлю в VLC, то у меня запускается нормальное видео.
Если я скопирую строчки из m3u8, создам у себя на компе m3u8 файл, вставлю туда строчки, которые указал выше, но при этом добавлю тот же сайт, что и в Request URL и получу что-то
вроде этого

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:20
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:18.644867,
https://какой-то_сервер.cc/путь_к_файлу/название_в...
...
#EXT-X-ENDLIST
, то и этот m3u8 файл будет работать.
Но проблема в том, что такой же способ с добавление названия сервера и расширения .ts не срабатывает с первым сайтом.
Эти сайты отличаются тем, что у первого сайта не показывается расширение у плейлиста и фрагментов, а у второго они есть. Если я открою ссылку на плейлист из первого сайта, то я получаю 403 ошибку, а у второго скачиваю m3u8 файл.
Плюс первый сайт возвращает ошибку 403, если я обращаюсь к нему через curl --verbose https://название_сайта/путь_к_файлу/файл, но если я сделаю такой же запрос, но с curl -H "Origin: https://сайт_из_поля_origin", то я получаю, то же самое, что и в спойлер 1.

Как из всего этого можно получить нормальный, рабочий m3u8 файл с первого сайта? Streamlink же как-то частично получает видео.
Надеюсь, кто-нибудь дочитал до конца.
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
@rPman
Попробуй сконвертировать m3u8 файл в готовый видеофайл с помощью ffmpeg (он умеет загружать), чтобы не перекодировало указывай кодек -c copy

Если сайт смотрит на http заголовки, который отправляет плеер/качальщик, и блокирует их, то очевидно их придется вручную подставлять, копируя из девконсоли браузера, один раз скопируй команду загрузки куска видео затем напиши скрипт, загружающий этой командой все куски локально и собирай с помощью ffmpeg
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы