RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Боковая панель


Навигация

Линкшэринг

~~socialite Display:icon facebook twitter~~

ALARM!

Добавить новую страницу

You are not allowed to add pages

Реклама

underground:youtube_dl_project

Как появилась на свет программа youtube-dl

Сборщики меди

В любой хорошей истории должен быть злодей, и в качестве такого персонажа я решил выбрать сборщиков меди — воришек, которые собирали цветные металлы в округе. Именно они подтолкнули к созданию youtube-dl. В далёком 2006 году мой посёлок находился в 5-10 километрах от небольшого города Авилес на севере Испании. Жители Авилеса наслаждались хорошей инфраструктурой и услугами, включая кабельное телевидение и ADSL-доступ в интернет. В моём районе ничего такого не было: слишком далеко от телефонной станции с ADSL, а сборщики меди годами воровали медные провода по пути к ней, время от времени вызывая перебои в телефонной связи и заставляя телефонную компанию заменять эти провода более слабыми и тонкими, потому что их тоже, скорее всего, украдут. Это продолжалось несколько лет.

Единственным вариантом выхода в интернет из дома был модем 56k V.90. На самом деле качество связи было настолько плохим, что приходилось для стабильности снижать скорость до 33,6 Кбит/с. Фактическая скорость загрузки редко превышала 4 КБ/с. В то же время в интернете появился интересный видеосервис YouTube, он быстро набирал популярность, а в конце того же года его купила компания Google.

Не спать всю ночь, чтобы посмотреть кусочек

Просмотр любого видео на YouTube по соединению 33,6 Кбит/с был мучительным опытом. Практически любое видео загружалось целую вечность. Например, загрузка короткого 10-мегабайтного видео, если посчитать, занимает 40 минут, что делает потоковую передачу невозможной. Более длинное и качественное видео требует несколько часов и полностью занимает канал, не говоря уже о том, что соединение может в любой момент прерваться — и загрузку придётся начинать заново! А представьте, что вам очень понравилось конкретное видео и вы хотите посмотреть его во второй или третий раз. Повторение этого процесса становилось практически актом мазохизма.

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

В то время существовали и другие решения для загрузки видео с YouTube, в том числе довольно популярный скрипт Greasemonkey. По чистой случайности я не смог настроить для работы ни одно из существующих решений, поэтому решил написать собственный инструмент. Примерно так появилась программа youtube-dl. Мне было удобнее и быстрее запускать её из консоли, поэтому графический интерфейс не предусмотрен. Выбор Python обусловлен наличием обширной стандартной библиотеки, с приятным побочным эффектом, что она будет работать на любой платформе.

Запуск Ethereal

Первая версия работала только на YouTube. У программы практически не было никакой нормальной архитектуры, потому что она была не нужна. Написанная как простой скрипт, она шла прямо к сути. Размер программы 223 строки, причём только 143 фактически кода, 44 строки комментариев и 36 пустые. Название выбрано из чистого удобства: youtube-dl очевидно, понятно, трудно забыть и можно интуитивно ввести как “Y-O-U-TAB” в консоли.

Поскольку я уже несколько лет пользовался Linux, то решил опубликовать программу под свободной лицензией (MIT в первых версиях) на случай, если кто-то найдёт её полезной. Тогда GitHub ещё не появился и нам приходилось обходиться SourceForge. Но там при создании нового проекта следовало заполнять утомительную форму. Поэтому вместо SourceForge я по-быстрому выложил код на личной страничке, которую давал интернет-провайдер. Хотя сегодня это кажется необычным, но в то время провайдеры обычно выдавали пользователям адрес электронной почты и немного хостинга, куда можно было загрузить файлы по FTP. Таким образом, вы могли поднять собственный личный сайт в сети. Первая версия программы опубликована 08.08.2006, хотя к тому времени я уже несколько недель использовал её.

В процессе разработки нужно было понять операции браузера Firefox при просмотре видео на YouTube. Если я правильно помню, в Firefox ещё не встроили инструменты разработки для анализа сетевой активности. Соединения шли в основном по HTTP, так что неоценимым инструментом для анализа сетевого трафика стала программа Wireshark, известная в то время как Ethereal. Я написал youtube-dl с конкретной целью сделать то же самое, что делал веб-браузер при извлечении видео. Программа даже отправляла такую же строку user-agent, дословно скопированную из Firefox для Linux, чтобы убедиться, что сайт отправит программе те же веб-страницы, что и браузеру.

Кроме того, тогда YouTube использовал плеер Adobe Flash. Видео подавались в виде флэш-видеофайлов (FLV), поэтому для просмотра в браузере требовался проприетарный плагин (многие вспомнят страшную библиотеку libflashplayer.so), поэтому любые инструменты разработки в браузере были бесполезными. Этот проприетарный плагин являлся постоянным источником уязвимостей безопасности и проблем. У меня стояло расширение Firefox под названием Flashblock, которое не позволяло контенту загружаться по умолчанию и заменяло его элементами-заполнителями с кликабельным значком, поэтому контент загружался только по запросу, а библиотека плагинов не использовалась, если пользователь её не запрашивал.

Кроме повышения безопасности, у Flashblock было ещё два преимущества. Во-первых, он удалял много шумных и неприятных баннеров, которые тоже могли стать источником проблем безопасности. Во-вторых, облегчал анализ процесса загрузки видео в плеер. Я ждал, пока страница полностью загрузится, а затем уже запускал Wireshark непосредственно перед тем, как нажать на значок Flashblock, запуская загрузку видео. Таким образом, единственный трафик для анализа был связан с плагином, загружающим приложение видеоплеера, и самим приложением, загружающим видео.

Стоит также отметить, что плагин Flash Player в то время уже загружал копию видео на жёсткий диск (под Linux они хранились в /tmp), и многие пользователи полагались на эту функциональность, чтобы сделать копию без дополнительных инструментов. Так что youtube-dl был удобнее только потому, что извлекал название видео и присваивал его файлу в автоматическом режиме, например.

О, свежее мясо!

В конечном итоге Flash Player изменили, так что видео стало труднее извлекать. Одной из первых мер было разорвать связь с видеофайлом после его создания, чтобы i-node всё ещё существовал и был доступен использующему его процессу (до тех пор, пока не будет закрыт), сохраняя файл невидимым с точки зрения файловой системы. По-прежнему можно было захватить файл с помощью файловой системы /proc для изучения файловых дескрипторов, используемых процессом браузера, но с каждым из этих небольших шагов youtube-dl становился всё более и более удобным.

Как и многие энтузиасты опенсорса в то время, я использовал Freshmeat для подписки на новые выпуски проектов, которые меня интересовали. Когда я создавал youtube-dl, я также создал запись проекта на этом веб-сайте, чтобы пользователи могли получать уведомления о новых выпусках и журнал изменений с перечислением новых функций, исправлений и улучшений. В каталоге Freshmeat можно было искать новые и интересные проекты, на первой странице публиковались последние обновления, обычно несколько десятков в день. Предполагаю, что именно таким способом Джо Барр (покойся с миром), редактор linux.com, узнал о программе и решил написать о ней статью ещё в 2006 году. В то время Linux.com был одним из самых популярных ресурсов для энтузиастов Linux вместе с другими классическими сайтами, такими как Slashdot или Linux Weekly News. По крайней мере, для меня.

С этого момента популярность youtube-dl начала расти, а мне время от времени стали приходить письма с благодарностями за создание и поддержку программы.

Подсчёт трафика

Перенесёмся в 2008 год. Популярность youtube-dl продолжала медленно расти, и пользователи часто просили сделать подобные программы для загрузки с других сайтов, и я несколько раз уступал этой просьбе. Именно в этот момент я решил переписать программу с нуля, чтобы внедрить изначальную поддержку нескольких видеосайтов. У меня имелось несколько простых идей, как разделить внутренности программы на несколько частей, чтобы упростить наиболее важные части: отдельно загрузчик файлов, общий для всех веб-сайтов, а отдельно — экстракторы информации: объекты (классы), которые содержат код, специфичный для конкретного видеосайта. Когда задаётся URL или псевдо-URL, запрашиваются экстракторы, чтобы узнать, какой из них может обработать этот тип URL, а затем запрашивается извлечение информации об этом видео или списке видео, с основной целью получения URL видео или списка URL-адресов с доступными форматами, а также некоторых других метаданных, таких как заголовки, например.

Я также воспользовался возможностью сменить систему контроля версий и перенести проект на другой хостинг. В тот момент Git выигрывал войну распределённых систем управления версиями, но у Mercurial тоже было много пользователей. Я протестировал оба и решил, что Mercurial нравится немного больше, чем Git. Я начал использовать его для youtube-dl и разместил проект на Bitbucket, что было естественным выбором. В то время на Bitbucket размещались только репозитории Mercurial, а на GitHub — только Git. Оба запустились в 2008 году и стали глотком свежего воздуха по сравнению с SourceForge. Разные пространства имён проектов для каждого пользователя (то есть имя вашего проекта не обязательно должно быть глобально уникальным, а уникальным только для ваших проектов) с распределёнными системами управления версиями означало, что вы можете публиковать свои личные проекты в течение нескольких минут на любом из двух сайтов. В любом случае, перенос истории проекта в Git и перенос проекта на GitHub последовали через пару лет.

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

Технологический контекст также немного изменился в тот год. Начали набирать обороты мобильные планы с передачей данных, и в конце того же года я купил себе 3G-модем и тарифный план, который впервые позволил мне просматривать веб-страницы на приличной скорости. В любом случае, это не заставило меня прекратить использовать youtube-dl. Я платил 45 евро в месяц, но ежемесячный лимит данных был ограничен 5 ГБ, то есть я мог использовать в среднем только около 150 МБ в день. А скорость позволяла скачать гораздо больше, так что приходилось следить за трафиком и избирательно выбирать контент, избегая больших загрузок, если это возможно. Поэтому youtube-dl очень помог предотвратить многократную загрузку больших видеофайлов и не выйти за пределы тарифного плана.

Эпизод: новый дом

Некоторое время спустя, в конце 2009 года, я переехал и, наконец, начал жить со своей девушкой (теперь моей женой и матерью двоих детей) в Авилесе. Впервые у меня появился высокоскоростной интернет, который был стандартом для многих моих друзей и семьи в течение многих лет. Помню, что это было кабельное соединение 100/10 Мбит/с (скачивание/отдача) без ограничения трафика. Это определённо знаменовало поворотный момент в том, как часто я использовал youtube-dl и сколько внимания уделял проекту.

Чуть позже я, наконец, перенёс код в Git и GitHub. В то время YouTube начал экспериментировать с видео HTML5, которое станет вариантом по умолчанию примерно в 2015 году. В 2011 году я уже несколько лет как работал полный рабочий день в качестве инженера-программиста, и в целом по возвращении с работы мне не очень хотелось программировать и настраивать youtube-dl или реализовывать по просьбе пользователей функции, который я сам не собирался использовать лично.

Во второй половине 2011 года в разгаре другого важного проекта я решил уйти с поста мейнтейнера youtube-dl, поскольку уже несколько месяцев не справлялся с задачей. Филипп Хагемейстер показал себя как отличный программист, и он прислал несколько пул-реквестов на GitHub с исправлениями, которые интересовали многих людей. Я дал ему доступ на коммиты к моему репозиторию youtube-dl, и по сути это был конец истории с моей стороны. Логи основной ветки показывают у меня непрерывный поток коммитов до марта 2011 года, а затем скачок на август 2011 года с мерджем от Филиппа. С тех пор я сделал единственный коммит в 2013 году для изменения в исходном коде rg3.github.com на rg3.github.io, когда GitHub перемещал пользовательские страницы с USERNAME.github.com на USERNAME.github.io, чтобы избежать проблем безопасности с вредоносным кодом на собственном домене, если я правильно помню.

Хотя я не участвовал в разработке youtube-dl, в течение многих лет официальная страница проекта по-прежнему лежала под моим аккаунтом на https://github.com/rg3/youtube-dl и https://rg3.github.io/youtube-dl/. Мне нужно было появляться, когда Филипп или другие мейнтейнеры просили дать доступ на коммиты дополнительным разработчикам, таким как Филиппо Вальсорда или Сергей М., один из нынешних мейнтейнеров. К сожалению, в 2019 году случилась небольшая проблема с троллями в трекере, а блокировать пользователей разрешено только владельцам проектов. Это заставило нас наконец перенести проект в организацию GitHub, куда были приглашены все, кто имел доступ на коммиты (хотя и не все присоединились). Организация GitHub позволила мейнтейнерам действовать более свободно, не дёргая меня по малейшему поводу.

Хочу ещё раз выразить самую искреннюю благодарность различным мейнтейнерам проекта в течение этих лет, которые значительно улучшили код, смогли создать вокруг реальное сообщество и которые сделали проект гораздо более популярным, чем он был, когда я ушёл почти 10 лет назад.

Офлайн и бесплатно

Хотел бы ещё раз отметить, что назначение youtube-dl как инструмента практически не изменилось за 14 лет его существования. До и после получения письма DMCA от RIAA многие рассказывали, как они используют youtube-dl для разных целей.

Для меня это всегда был офлайн-доступ к видео, которые уже доступны широкой публике в интернете. В мире мобильных сетей и постоянного подключения вы можете спросить, действительно ли это необходимо. Я думаю, что да, если Netflix, Amazon, Disney и HBO реализовали подобную функциональность в своих чрезвычайно популярных стриминговых приложениях. Для длительных автомобильных поездок или поездок за границу, особенно с детьми, или под землёй, или в самолёте, или в месте с плохой связью или ограниченными соединениями — невероятно удобно иметь автономный доступ к подкасту, лекции, обзору, новости или произведению искусства.

Дополнительным побочным эффектом youtube-dl является доступ к контенту, когда онлайн-интерфейс не справляется с задачей. Старый проприетарный флэш-плагин работал не для каждой платформы и архитектуры. В настоящее время браузеры могут воспроизводить видео, но иногда не способны воспользоваться преимуществами эффективного декодирования GPU, тратя при этом большой заряд батареи. Youtube-dl можно использовать с собственным плеером, чтобы сделать воспроизведение некоторых видео возможным и/или эффективным. Например, плеер mpv включает встроенную поддержку youtube-dl. Вам нужно только передать ему URL, и он использует youtube-dl для доступа к видеопотоку и воспроизведения, ничего не сохраняя на вашем жёстком диске.

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

И последнее, но не менее важное: такие инструменты, как youtube-dl, позволяют получать доступ к онлайн-видео, используя только свободное программное обеспечение. Я понимаю, что в мире не так уж много сторонников строго свободного и открытого ПО. Я даже себя не считаю таковым, по большому счёту. Проприетарный софт постоянно присутствует в нашей современной жизни и поставляется нам каждый день в виде огромного количества строк Javascript в браузере, с множеством различных целей и не всегда в лучших интересах пользователей. Доказательством является появление GDPR, со всеми его недостатками и проблемами. Доступ к онлайн-видео с помощью youtube-dl гарантирует вам полное душевное спокойствие в режиме инкогнито там, где uBlock Origin или Privacy Badger только едва успокаивают.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Discussion

Enter your comment. Wiki syntax is allowed:
 
underground/youtube_dl_project.txt · Последнее изменение: 2020/12/18 00:34 (внешнее изменение)