Перейти к содержимому

Как ускорить скачивание с ютуба

  • автор:

Как обходится ограничение скорости скачивания с YouTube

Вы когда-нибудь пробовали скачивать видео с YouTube? Я имею в виду ручками, а не через такие софтины, как youtube-dl, yt-dlp или один из «этих» сайтов. Оказывается, это гораздо сложнее, чем можно было бы подумать.

Youtube зарабатывает на показе рекламы пользователям. Поэтому с точки зрения платформы логично внедрить специальные ограничения, которые не позволяли бы скачивать видеоролики или даже просматривать их через неофициальный клиент, например YouTube Vanced. В этой статье будут пояснены технические детали тех механизмов безопасности, что действуют в Youtube, и рассказано, как их обойти.

Гуглим качалку для YouTube

Извлечение URL

Первым делом нужно найти тот URL, по которому содержится файл. Для этого можно обратиться к API YouTube. В частности, через конечную точку /youtubei/v1/player можно извлечь всю метаинформацию о видео, а именно: заголовок, описание, эскизы и, что самое важное — форматы. Именно из этих форматов можно выцепить URL файла, отталкиваясь от желаемого качества (SD, HD, UHD, т.д.).

Возьмём, к примеру, видео с ID aqz-KE-bpKQ , где получаем URL для одного из форматов. Обратите внимание: другие объекты, содержащиеся в объекте context – это предусловия, проверяемые API. Принимаемые значения удалось найти, наблюдая, какие именно запросы посылает браузер.

echo -n '>>' | http post 'https://www.youtube.com/youtubei/v1/player' | jq -r '.streamingData.adaptiveFormats[0].url' https://rr1---sn-8qu-t0aee.googlevideo.com/videoplayback?expire=1691828966&ei=hu7WZOCJHI7T8wTSrr_QBg [TRUNCATED] 

Правда, если попытаться скачать файл по этому URL, загрузка пойдёт очень медленно:

http --print=b --download 'https://rr1---sn-8qu-t0aee.googlevideo.com/videoplayback?expire=1691828966&ei=hu7WZOCJHI7T8wTSrr_QBg [TRUNCATED]' Downloading to videoplayback.webm [ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ] 0% ( 0.0/1.5 GB ) 6:23:45 66.7 kB/s

Скорость загрузки всегда ограничена примерно 40-70 кБ/с. К сожалению, на скачивание этого десятиминутного видео уходит примерно шесть с половиной часов. А через браузер, очевидно, получается гораздо быстрее. Так в чём же разница?

Давайте разберём этот URL по частям. Он довольно сложный, но в нём есть конкретный параметр, который нас и интересует.

Protocol: https Hostname: rr1---sn-8qu-t0aee.googlevideo.com Path name: /videoplayback Query Parameters: expire: 1691829310 ei: 3u_WZJT7Cbag_9EPn7mi0A8 ip: 203.0.113.30 id: o-ABGboQn9qMKsUdClvQHd6cHm6l1dWkRw4WNj3V7wBgY1 itag: 315 aitags: 133,134,135,136,160,242,243,244,247,278,298,299,302,303,308,315,394,395,396,397,398,399,400,401 source: youtube requiressl: yes mh: aP mm: 31,29 mn: sn-8qu-t0aee,sn-t0a7ln7d ms: au,rdu mv: m mvi: 1 pcm2cms: yes pl: 18 initcwndbps: 1422500 spc: UWF9fzkQbIbHWdKe8-ahg0uWbE_UrbUM0U6LbQfFxg vprv: 1 svpuc: 1 mime: video/webm ns: dn5MLRkBtM4BWwzNNOhVxHIP gir: yes clen: 1536155487 dur: 634.566 lmt: 1662347928284893 mt: 1691807356 fvip: 3 keepalive: yes fexp: 24007246,24363392 c: WEB txp: 553C434 n: mAq3ayrWqdeV_7wbIgP sparams: expire,ei,ip,id,aitags,source,requiressl,spc,vprv,svpuc,mime,ns,gir,clen,dur,lmt sig: AOq0QJ8wRgIhAOx29gNeoiOLRe1GhEfE52PAiXW64ZEWX7nNdAiJE6ezAiEA0Plw6Yn0kmSFFZHO2JZPZyMGd0O-gEblUXPRrexQgrY= lsparams: mh,mm,mn,ms,mv,mvi,pcm2cms,pl,initcwndbps lsig: AG3C_xAwRQIgZVOkDl4rGPGnlK6IGCAXpzxk-cB5RRFmXDesEqOWTRoCIQCzIdPKE6C6_JQVpH6OKMF3woIJ2yVYaztT9mXIVtE6xw==

С середины 2021 года YouTube включает в большинство URL параметр запроса n. Этот параметр требуется преобразовывать при помощи алгоритма JavaScript, расположенного в файле base.js, который распространяется вместе с веб-страницей. YouTube использует этот параметр как клеймо, удостоверяющее, что загрузка выполнена через «официальный» клиент. Если клеймо не подтверждено, и n преобразовано неправильно, YouTube тихонько ограничит скорость при скачивании этого видео.

Алгоритм JavaScript обфусцирован и часто меняется, поэтому пытаться взломать его через реверс-инжиниринг — дохлый номер. Лучше просто скачать файл JavaScript, извлечь из него код алгоритма и выполнить, передав в этот код параметр n. (Кстати, вот урезанная версия интерпретатора JavaScript для работы с youtube-dl — прим. пер).

Именно это и сделано в следующем листинге.

import axios from 'axios'; import vm from 'vm' const videoId = 'aqz-KE-bpKQ'; /** * Извлекаем через API Youtube метаданные о видео (заголовок, формат видео и формат аудио) */ async function retrieveMetadata(videoId) < const response = await axios.post('https://www.youtube.com/youtubei/v1/player', < "videoId": videoId, "context": < "client": < "clientName": "WEB", "clientVersion": "2.20230810.05.00" >> >); const formats = response.data.streamingData.adaptiveFormats; return [ response.data.videoDetails.title, formats.filter(w => w.mimeType.startsWith("video/webm"))[0], formats.filter(w => w.mimeType.startsWith("audio/webm"))[0], ]; > /** * С веб-страницы Youtube извлекаем алгоритм, позволяющий проверить параметр n данного запроса */ async function retrieveChallenge(video_id)< /** * Находим URL файла javascript для актуальной версии плеера */ async function retrieve_player_url(video_id) < let response = await axios.get('https://www.youtube.com/embed/' + video_id); let player_hash = /\/s\/player\/(\w+)\/player_ias.vflset\/\w+\/base.js/.exec(response.data)[1] return `https://www.youtube.com/s/player/$/player_ias.vflset/en_US/base.js` > const player_url = await retrieve_player_url(video_id); const response = await axios.get(player_url); let challenge_name = /\.get\("n"\)\)&&\(b=([a-zA-Z0-9$]+)(?:\[(\d+)\])?\([a-zA-Z0-9]\)/.exec(response.data)[1]; challenge_name = new RegExp(`var $\\s*=\\s*\\[(.+?)\\]\\s*[,;]`).exec(response.data)[1]; const challenge = new RegExp(`$\\s*=\\s*function\\s*\\(([\\w$]+)\\)\\s*<(.+?>\\s*return\\ [\\w$]+.join\\(""\\))>;`, "s").exec(response.data)[2]; return challenge; > /** * Проходим проверку и меняем параметр запроса n из url */ function solveChallenge(challenge, formatUrl) < const url = new URL(formatUrl); const n = url.searchParams.get("n"); const n_transformed = vm.runInNewContext(`((a) =>>)('$')`); url.searchParams.set("n", n_transformed); return url.toString(); > const [title, video, audio] = await retrieveMetadata(videoId); const challenge = await retrieveChallenge(videoId); video.url = solveChallenge(challenge, video.url); audio.url = solveChallenge(challenge, audio.url); console.log(video.url); 

Скачиваем медиа-файлы

Теперь у нас есть новый URL с корректно преобразованным параметром n. Дальше нужно скачать видео. Правда, YouTube всё равно обязывает ограничивать скорость загрузки. Речь идёт о лимите на скорость закачки, который варьируется в зависимости от размера и длительности видео. Цель — добиться, чтобы длительность скачивания была примерно вдвое меньше длительности самого видео. Это логично с точки зрения потоковой природы видеороликов. Для YouTube было бы крайне расточительно расходовать полосу передачи данных так, чтобы файл всегда скачивался в кратчайший срок.

http --print=b --download 'https://rr1---sn-8qu-t0aee.googlevideo.com/videoplayback?expire=1691888702&ei=3tfXZIXSI72c_9EP1NGHqA8 [TRUNCATED]' Downloading to videoplayback.webm [ ━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ] 4% ( 0.1/1.5 GB ) 0:06:07 4.0 MB/s

Чтобы обойти это ограничение, можно разбить загрузку на несколько более мелких фрагментов; это делается при помощи HTTP-заголовка Range . В этом заголовке можно указать, какую часть файла вы хотите скачать при каждом из запросов (например: Range bytes=2000-3000 ). Эта логика реализована в следующем коде.

/** * Скачать медиа-файл, разбив его на несколько сегментов по 10 МБ */ async function download(url, length, file)< const MEGABYTE = 1024 * 1024; await fs.promises.rm(file, < force: true >); let downloadedBytes = 0; while (downloadedBytes < length) < let nextSegment = downloadedBytes + 10 * MEGABYTE; if (nextSegment >length) nextSegment = length; // Скачать сегмент const start = Date.now(); let response = await axios.get(url, < headers: < "Range": `bytes=$-$` >, responseType: 'stream' >); // Записать сегмент await fs.promises.writeFile(file, response.data, ); const end = Date.now(); // Вывести статистику загрузки const progress = (nextSegment / length * 100).toFixed(2); const total = (length / MEGABYTE).toFixed(2); const speed = ((nextSegment - downloadedBytes) / (end - start) * 1000 / MEGABYTE).toFixed(2); console.log(`$% of $MB at $MB/s`); downloadedBytes = nextSegment + 1; > >

Такой подход работает, поскольку на применение ограничения уходит некоторое время, а мелкие сегменты загружаются очень быстро, и для каждого сегмента открывается новое соединение.

node index.js 0.68% of 1464.99MB at 46.73MB/s 1.37% of 1464.99MB at 60.98MB/s 2.05% of 1464.99MB at 71.94MB/s 2.73% of 1464.99MB at 70.42MB/s 3.41% of 1464.99MB at 68.49MB/s 4.10% of 1464.99MB at 68.97MB/s 4.78% of 1464.99MB at 74.07MB/s 5.46% of 1464.99MB at 81.97MB/s 6.14% of 1464.99MB at 104.17MB/s

Теперь мы можем скачивать видео гораздо быстрее. Когда я тестировал код, при некоторых закачках соединение в 1 Гб/с удавалось использовать почти целиком. Но средняя скорость обычно варьируется в пределах 50-70 МБ/с или 400-560 Mб/с, что всё равно достаточно быстро.

Постобработка

YouTube раздаёт каналы видео и аудио в двух отдельных файлах. Так экономится место, поскольку видео в качестве HD и UHD могут использовать один и тот же аудио-файл. Кроме того, в некоторых видео теперь предлагаются и другие аудиоканалы (с привязкой к языку текста). Следовательно, нам остаётся только лишь совместить два этих канала в один файл, и для этого можно воспользоваться ffmpeg .

/** * Использование ffmpeg, комбинируем воедино аудио и видео */ async function combineChannels(destinationFile, videoFile, audioFile) < await fs.promises.rm(destinationFile, < force: true >); child_process.spawnSync('ffmpeg', [ "-y", "-i", videoFile, "-i", audioFile, "-c", "copy", "-map", "0:v:0", "-map", "1:a:0", destinationFile ]); await fs.promises.rm(videoFile, < force: true >); await fs.promises.rm(audioFile, < force: true >); >

Наконец, если кому-то интересно, полный код к этому посту можно скачать здесь.

Заключение

Такие приёмы помогают многим проектам обходить ограничения YouTube по скачиванию видео. Самые популярные из них — yt-dlp (форк youtube-dl), написанный на Python, но в нём встроен собственный интерпретатор JavaScript, при помощи которого преобразуется параметр n.

yt-dlp

Медиаплеер VLC

NewPipe

node-ytdl-core

Как ускорить загрузку видео на YouTube

В создании этой статьи участвовала наша опытная команда редакторов и исследователей, которые проверили ее на точность и полноту.

Команда контент-менеджеров wikiHow тщательно следит за работой редакторов, чтобы гарантировать соответствие каждой статьи нашим высоким стандартам качества.

Количество просмотров этой статьи: 108 991.

В этой статье:

Из данной статьи вы узнаете, как ускорить загрузку видео на YouTube. На каком-то этапе будет достигнут предел производительности, но до этого можно выполнить ряд действий, которые позволят ускорить загрузку видео на YouTube.

Step 1 Закройте приложения или.

Закройте приложения или программы, которые работают в фоновом режиме. Имейте в виду, что производительность компьютера, телефона или планшета не влияет на скорость интернет-соединения, но зато от быстродействия устройства зависит скорость работы веб-браузера, а от нее — время загрузки видео на YouTube. Поэтому закройте ненужные приложения или программы.

Step 2 Остановите процессы скачивания и потоковые сервисы.

Остановите процессы скачивания и потоковые сервисы. Если на другом устройстве, которое подключено к той же сети, работает Netflix, или если устройство скачивает обновления, загрузка контента на других потоковых сервисах, включая YouTube, замедлится.

Step 3 Откажитесь от одновременной.

Откажитесь от одновременной загрузки сразу нескольких видеороликов. Попытка заранее загрузить другое видео приведет к тому, что скорость загрузки видеоролика, который вы просматриваете в настоящий момент, уменьшится. Поэтому открывайте только один видеоролик.

Step 4 Увеличьте скорость интернет-соединения.

  • Если на компьютере есть Ethernet-порт, подключите его к маршрутизатору с помощью Ethernet-кабеля.
  • Также можно подключиться к полосе 5,0 ГГц маршрутизатора (если у маршрутизатора несколько полос), чтобы увеличить пропускную способность интернет-подключения. В этом случае расположите устройство возле маршрутизатора.

Step 5 Закройте ненужные вкладки или окна браузера.

Закройте ненужные вкладки или окна браузера. Чем меньше открытых вкладок и/или окон, тем быстрее работает браузер и загружаются видеоролики.

Step 6 Используйте быстрый браузер.

  • Если вы не хотите менять свой браузер, обновите его до последней версии. Также это гарантирует, что ваша работа в интернете будет максимально безопасной.
  • В случае мобильного устройства обновите приложение «YouTube».

Step 7 Удалите куки браузера.

Удалите куки браузера. Если в браузере накопилось большое количество временных файлов и другой информации, его производительность снизится. Поэтому удалите историю просмотров и куки, чтобы ускорить быстродействие браузера (но при этом вам придется заново войти на нужные сайты).

Step 8 Снизьте качество видеоролика.

  • на мобильном устройстве нажмите «⋮» > «Качество», а затем выберите опцию меньше 720p;
  • на компьютере щелкните по значку в виде шестеренки в правом нижнем углу окна с видео, а затем выберите опцию меньше 720p.

Step 9 Сбросьте настройки маршрутизатора.

  • Если сброс настроек маршрутизатора не решил проблему, свяжитесь со своим интернет-провайдером.

Как Ускорить YouTube и Google В 2022 | Как Повысить Скорость Интернета

Иконка канала APELSIN4

Как сделать быстрым интернет в 2022 ============================================ Информация о видео: В этом видео я покажу как повысить скорость интернета в 2022 году. Гугл и ютуб будут грузиться быстрее. Google YouTube можно значительно повысить скорость загрузки страниц. В настройках браузера и компьютера можно включить нужные функции Думаю, это видео понравилось тебе, ставь лайк и подписывайся на канал. Расскажи об этом видео друзьям, ты мне очень поможешь, спасибо! Эпизоды: 00:00 Начало 00:18 Первый способ 01:10 Второй способ –––––––––––––––––––––––––––––– Автор и его контакты: ✅ Мой VK — https://vk.com/y.apelsin4 ============================================ Хочешь заказать РЕКЛАМУ? ✅ https://vk.com/y.apelsin4 ============================================ #Интернет #Скорость #Вайфай #Wifi #internet

Показать больше

Войдите , чтобы оставлять комментарии

Как ускорить или исправить работу мобильного интернета на iPhone. 10 полезных настроек

Favorite

В закладки

Как ускорить или исправить работу мобильного интернета на iPhone. 10 полезных настроек

Активные пользователи мобильного подключения часто замечают падение скорости или полную остановку передачи данных. На это могут влиять некоторые параметры iOS, настройки оператора или ограничения выбранного тарифного плана.

Сейчас расскажем, как можно исправить ситуацию и ускорить мобильный интернет на iPhone.

�� Спасибо re:Store за полезную информацию. ��

1. Переподключитесь к сети

Первое, что следует сделать при медленной скорости соединения – отключиться от сети и заново подключить мобильный интернет.

Проще всего сделать это путем временной активации Авиарежима на смартфоне. Включите опцию из Пункта управления или настроек смартфона.

Через несколько секунд отключите режим и дождитесь восстановления соединения.

2. Принудительно переключитесь на быструю сеть

Иногда система автоматически активирует более медленное 3G подключение в местах неуверенного приема LTE. Если такое произошло на вашем гаджете, рекомендуем вручную переключиться на более быстрый тип передачи данных.

Для этого перейдите в Настройки – Сотовая связь – Сотовая сеть передачи данных и активируйте самый быстрый режим связи.

3. Отключите используемый VPN-сервис

Защищенное подключение сильно влияет на скорость соединения. Особенно, если используете бесплатный VPN-сервис.

Отключение такой опции сразу же положительно скажется на скорости работы мобильного интернета.

Для этого отключите защищенное соединение через используемое приложение или из настроек iOS.

4. Проверьте условия своего тарифа

Иногда операторы предлагают максимальную скорость подключения с ограничением по загрузке трафика. После расходования определенного суточного или месячного лимита скорость может быть существенно ограничена.

Следует внимательно изучить условия вашего тарифа или уточнить этот момент в службе поддержки оператора. Особое внимание уделите на:

▣ Возможность раздавать интернет со смартфона. Иногда операторы блокируют эту фишку, требуют за неё дополнительную плату или снижают скорость при обнаружении раздачи.

▣ Ограничения на p2p-трафик. При обнаружении прямой передачи данных между конечными пользователями многие операторы блокируют соединение либо ограничивают скорость. Это верный признак загрузки торрентов.

▣ Поддержка работы по VPN. В некоторых тарифах при туннельном соединении может ограничиваться скорость интернета.

▣ Наличие ограничений для приложений и сервисов. Во многих тарифах действует так называемый шейп, когда скорость передачи данных для программ и сервисов может ограничиваться.

5. Завершите ненужные фоновые приложения

Иногда трафик могут потреблять другие приложения в фоне. Они обновляют данные, загружают новый контент или просто активно используют подключение к интернету.

Такие программы будут ограничивать скорость работы нужного приложения. Просто завершите их из панели многозадачности.

Дважды нажмите кнопку Домой на iPhone с Touch ID или сделайте свайп вверх от нижней границы экрана на iPhone с Face ID. Выкиньте из меню карточки недавних программ, которые могут загружать данные их сети.

6. Отключите режим экономии трафика

Полезная опция, которая помогает экономить сетевой трафик может мешать достижению максимальной скорости соединения.

Находится фишка м меню Настройки – Сотовая связь – Экономия данных.

7. Временно отключите режим точки доступа

Возможно, на скорость подключения негативно влияют другие устройства, которые подключены к вашему смартфону для получения интернета.

Гаджеты с вашим Apple ID или устройства членов семейного доступа могут подключаться к смартфону в режиме модема автоматически.

Можете на время полностью отключить данный режим в меню Настройки – Режим модема.

8. Отключите автоматическую загрузку обновлений

Скорость может падать из-за фоновой загрузки приложений или обновлений контента. Обе опции можно отключить при мобильном соединении.

Перейдите в Настройки – App Store и отключите опцию Автоматические загрузки для сотовых данных, а в разделе Настройки – Основные – Обновление контента разрешите передачу данных только по Wi-Fi.

9. Проверьте скорость интернета в других приложениях

Если вам не хватает скорости подключения, например, для просмотра YouTube или стриминговых сервисов, все дело может быть в ограничениях оператора.

Это так называемый шейп, когда система ограничивает скорость при обнаружении передачи данных через определенные сайты или приложения часто встречается на тарифах с большим объемом доступного трафика.

Достаточно проверить скорость соединения через другие приложения, внимательно изучить детальные условия своего тарифа или почитать тематический форум.

▶ Speedtest by Ookla – самый популярный измеритель скорости подключения;

▶ FAST Speed Test – простая утилита с минимумом нужных возможностей;

▶ Meteor: Тест скорости – программа для замера скорости подключения с возможностью оценить результат для разных приложений.

10. Сбросьте настройки сети

Возможно, все дело в накопившемся кэше и системном мусоре. Удалить его можно путем сброса параметров сети.

После этого придется заново настроить мобильное подключение и переподключиться к используемой Wi-Fi сети. Делается это в меню Настройки – Основные – Перенос или сброс iPhone.

После всех проделанных манипуляций скорость мобильного подключения к сети должна существенно увеличиться.

Реклама. ООО “реСтор”, ИНН 7709678550

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *