Произходът на проекта youtube-dl

Оригиналът е на Ricardo García

1
1890

Наскоро хранилището на youtube-dl в GitHub бе блокирано поради DMCA оплакване от страна на RIAA. След десетина дни достъпът до проекта отново бе разрешен, а аз като създател на тази програма счетох, че ще е интересно да разкажа за първите години на youtube-dl.

Крадците на мед

Във всяка една интересна история трябва да има злодей и в качеството на такъв персонаж реших да избера „берачите на мед“ – дребни крадци, които събираха цветни метали в нашия окръг. Именно те ме подтикнаха към създанието на youtube-dl. През далечната 2006 година моето селище се намираше на около 10 километра от малкия град Авилес в северна Испания. Жителите на Авилес се наслаждаваха на добрата инфраструктура и услуги, включително на кабелна телевизия и ADSL достъп в интернет. Но в моето селце нищо такова нямаше, понеже то се намираше твърде далече от телефонната станция с ADSL, а берачите на мед от години крадяха медните проводници, които ни свързваха с нея. Тези прекъсвания в телефонната връзка принудиха телефонната компания да замени тези проводници с по-слаби и тънки, като идеята бе, че те така или иначе пак ще бъда откраднати, но поне загубите ще бъдат по-малки. Това продължи няколко години.

Единственият вариант за връзка с интернет бе използването на модем 56k V.90. Но всъщност качеството на връзката бе толкова лошо, че за да се постигне някаква стабилност в скоростта на интернет връзката, тя трябваше да се намалява до 33,6 Kb/s. На практика скоростта на сваляне рядко превишаваше 4 KB/s. Точно по това време в интернет се появи интересната видео услуга YouTube, която бързо стана популярна и в края на същата тази година бе купена от Google.

Да не спиш цяла нощ, за да видиш късче видео

Гледането на каквото и да е видео в YouTube при скорост 33,6 Kb/s бе нещо мъчително. На практика всеки един клип се зареждаше цяла вечност. Така например, зареждането на късо 10 MB видео отнемаше 40 минути, което прави невъзможно стриймването. По-дългото и по-качественото видео изисква няколко часа и заема целия канал, да не говорим че връзката може всеки момент да прекъсне и свалянето на клипа трябва да започне отново! Представете си само, че ви е харесало някое видео и искате да го гледате втори и защо не трети път. Свалянето на клипа при честото прекъсване на връзката си беше чист мазохизъм.

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

По това време имаше и други решения за сваляне на видео от YouTube, включително и доста популярния Greasemonkey. Но случайно или не, аз така и не можах да настроя за нормална работа нито едно от тези решения и накрая реших да напиша свой собствен софтуерен инструмент. Ето така се появи програмата youtube-dl. На мен ми е по-удобно и по-бързо да я стартирам от командния ред и не съм слагал в графичен потребителски интерфейс. Избрах програмния език Python, понеже той предлага обширна стандартна библиотека, която може да работи на всяка една платформа.

Стартирането на Ethereal

Първата версия работеше само с YouTube. Програмата на практика нямаше никаква нормална архитектура и подредба, понеже не бе и особено нужно. Написана като съвсем обикновен скрипт, тя просто си вършеше работата. Съставена бе от 223 реда, като кодът заемаше 143 реда, а останалото бяха 44 реда коментари и 36 празни реда. Нейното име бе избрано от гледна точка на удобството – youtube-dl очевидно означава даунлоуд от YouTube и подобно това име трудно може да бъде забравено, а и автоматично излиза в терминала след като бъдат въведени символите     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, което не даваше възможност на съдържанието да се изтегля по подразбиране, а само след запитване.

Освен повишена информационна безопасност Firefox имаше още две предимства. Първо, той премахваше твърде ярките шумни и неприятни банери, които също създаваха проблеми с безопасността. Второ, той облекчаваше анализа на процеса на зареждане на видео плеъра. Аз чаках докато страницата не се изтегли напълно, а след това стартирах 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, а в Git – само на Git. И двата започнаха да работят през 2008-ма година и станаха глътка свеж въздух в сравнение с SourceForge. Стана възможно програмистите да публикуват своите лични проекти само за няколко минути във всеки един от тези два сайта. Така или иначе, прехвърлянето на проекта в Git и миграцията към GitHub бяха осъществени след две години.

През това време технологиите се развиха. Започнаха да набират обороти мобилните тарифи с възможност за прехвърляне на данни и в края на краищата си купих 3G модем и използвах тарифа, която за първи път ми даде възможност да преглеждам уеб-страниците с прилична скорост. Но това не ме накара да прекратя използването на youtube-dl. Плащах по 45 евро на месец, но месечния лимит на данните бил ограничен до 5 GB – тоест можех да използвам средно по около 150 MB на ден. А скоростта даваше възможност да се изтегли много повече и се налагаше да се следи трафика и специално да се избира съдържание, за да се избегнат големите натоварвания, стига това да е възможно. Ето защо youtube-dl изключително много помогна за предотвратяването на многократното изтегляне на големи видео файлове без да се излиза извън пределите на този тарифен план.


Край на първа част. Във втората част ще разгледаме преместваното на Рикардо в друг град, където вече има кабелна връзка и как продължава развитието на youtube-dl.

4.8 16 гласа
Оценете статията
Абонирай се
Извести ме за
guest
1 Коментар
стари
нови оценка
Отзиви
Всички коментари