Существует очень популярный загрузчик командной строки с открытым исходным кодом youtube-dl
, который делает именно это. Он захватывает фактические ссылки на видео и аудио файлы с данной ссылки на YouTube - или с любого другого популярного веб-видео-сайта, такого как Vimeo, Yahoo! Видео, uStream и т. Д.
Чтобы увидеть, как это делается, загляните в экстрактор YouTube . Это слишком много, чтобы показать здесь. Другие экстракторы существуют для более простых сайтов . Стивен Пенни также имеет простой загрузчик JavaScript для YouTube, который немного проще.
Но в основном, для проигрывателя Flash видео, он должен быть инициализирован и настроен с помощью некоторого JavaScript. Проще говоря, проигрыватель Flash-объекта получит URL-адрес видеопотока для загрузки.
Чтобы найти видеопоток, вам нужно проанализировать код HTML и JS видео страницы, чтобы найти соответствующий код инициализации, а затем оттуда попытаться найти ссылку на фактический файл MP4. Он может быть в текстовом виде, но также может быть сгенерирован на лету с некоторыми специальными токенами загрузки. Часто JavaScript запутывается, чтобы усложнить его реинжиниринг. Или информация о видео может содержаться в файле XML, который асинхронно загружается JS.
Для видео с прогрессивной загрузкой HTML5 фактический исходный файл обычно упоминается непосредственно в source
дочернем video
элементе тега, поэтому, если вы будете искать на странице mp4
или аналогичную. Например, на немецком новостном шоу Tagesschau 100 вы найдете:
<source src="http://media.tagesschau.de/video/2014/0626/TV-20140626-1649-5801.webl.h264.mp4" type="video/mp4">
Для более продвинутых технологий воспроизведения, таких как MPEG DASH или Apple HTTP Live Streaming (HLS), вам необходимо проанализировать файл метаинформации для получения реального видеопотока. Метафайл ( .mpd
например, в DASH и .m3u8
для HLS) будет содержать ссылки на сегменты видео и аудио, которые вам позже придется объединить, чтобы получить воспроизводимый файл.
Там нет общего решения для этого. Требуется тщательный осмотр и отладка целевого сайта.
YouTube Bookmarklet
Вот как я это сделал с помощью JavaScript
Начните с
ytplayer.config.args
объекта. Это содержит все URL для видео. Это разбито наКаждый из них представляет собой массив разделенных запятыми того, что я бы назвал «потоковыми объектами». Каждый «объект потока» будет содержать такие значения
Каждый URL будет закодирован, поэтому вам нужно будет их декодировать. Теперь сложная часть.
YouTube имеет как минимум 3 уровня безопасности для своих видео
Видео RTMPE, как правило, используются в официальных полнометражных фильмах и защищены с помощью SWF Verification Type 2. Это было примерно с 2011 года и до сих пор не переработано.
Видео типа "s" являются самыми сложными, которые могут быть фактически загружены. Вы можете увидеть их на видео VEVO и т.п. Они начинаются с подписи, такой как
Затем подпись шифруется с помощью такой функции
Эта функция динамическая, она обычно меняется каждый день. Чтобы сделать его более сложным, функция размещена на URL, например
это вводит проблему политики того же происхождения . По сути, вы не можете скачать этот файл,
www.youtube.com
потому что это разные домены. Обходной путь этой проблемы - CORS . С CORS,s.ytimg.com
можно добавить этот заголовоки это позволит JavaScript для загрузки с
www.youtube.com
. Конечно, они этого не делают. Обходной путь для этого обходного пути должен использовать прокси-сервер CORS. Это прокси, который отвечает на все запросы следующим заголовкомИтак, теперь, когда вы проксировали свой JS-файл и использовали функцию для шифрования подписи, вы можете использовать ее в строке запроса для загрузки видео.
источник
s
типа видео иRTMPE
типа видео?Мой ответ: с 22 января 2019 года использование этих методов может быть поймано, если вы попытаетесь обойти, не связывая также свою информацию пользователя.
Почему? Поскольку я являюсь новым пользователем этой платформы, я не могу комментировать правило, указанное @ Daniel-B . Согласно новому ToS (на немецком языке, как я нахожусь в Германии; пожалуйста, переведите) для YouTube менее $ 6,1 млрд:
Теперь они могут узнать продолжительность каждого запроса и отследить, нарушаете ли вы. Как это возможно сейчас, учитывая этот сценарий и ваш внешний IP-адрес будет известен, даже если вы используете VPN, чтобы защитить себя, не связывая данные пользователя с какой-либо службой.
источник