WebTorrent: Alternativní BitTorrent, který běží v čistém Javascriptu

  • WebTorrent běží přímo v prohlížeči
  • Díky WebRTC si vystačí s Javascriptem a HTML5
  • Napsali jsme si primitivní přehrávač videí z P2P

Před dvěma lety se na scéně objevil kontroverzní Popcorn Time, který obalil klasický bittorrentové klient rozhraním, které na první pohled připomínalo webové filmotéky jako třeba Netflix. Divák klepl na plakát filmu a za pár okamžiků se už odkudsi z internetu začal přehrávat film.

Nemusel tedy tušit, že se v nitru programu ve skutečnosti film streamuje od ostatních uživatelů, kteří jej mají zrovna na počítači a samotný divák jej stejně tak nabízí dalším zájemcům, což je ve většině vyspělého světa včetně České republiky ilegální.

216640649 870087955
Pirátský Popcorn Tiem způsobil v Hollywoodu šok. BitTorrentový klient najednou dokázal ovládat každý zelenáč, což bylo nebezpečné (pro obě strany).

Původní Popcorn Time si pro svoji jednoduchost získal ohromnou popularitu a rozeštval proti sobě Hollywood, který si to nenechal líbit, a brzy se mu podařilo přehrávač zlikvidovat. Jenže jakmile jedna verze programu zkolabovala, na scéně se brzy objevil nový funkční klon. Tak je tomu dodnes – poslední verze sídlí na adrese popcorntime.sh.

Webový BitTorrent poprvé

Ve stínu desktopového Popcorn Timu se loni na scéně objevilo i několik čistě webových verzí, které nevyžadovaly instalaci žádného speciálního softwaru. Jednou z nich byl i Browser Popcorn nebo PopcornInYourBrowser(oba už dávno neexistují), který přehrával filmy přímo pomocí HTML5 a k samotnému streamování používal službu Coinado, která již také utichla, nicméně jsem se o ní zavčas rozepsal v samostatném článku.

55263532 187600580
PopcornInYourBrowser streamoval filmy z BitTorrentu skrze službu Coinado a HTML5

Coinado fungovalo jako jednoduchá HTTP brána do světa BitTorrentu. Samotný torrentový klient tedy běžel na serveru služby a vy jste po zadání identifikátoru torrentu získali přímo cílová data – třeba MP4 video. Server byl rychlý a prodleva před začátkem streamování do deseti sekund, nicméně i Coinado pochopitelně brzy utichlo, protože se jeho činnost nezamlouvala hostingové společnosti.

909880663
Stačilo znát ID torrentu a zkrze Coinado jste jej mohli stáhnout jako běžný soubor, nebo přímo streamovat do HTML5 tagu <video>

Webový BitTorrent podruhé

Jenže ani tím důvtip komunitních vývojářů neskončil, a tak jsme na začátku února psali o speciální plugin Torrents Time, kterou nainstalujete na PC, a pak budete moci v prohlížeči opět jednoduše streamovat video z torrentů. Aplikace v podstatě na počítač nainstalovala torrentový klient, který pak může webová stránka použít pro přehrávání v komponentě HTML5.

74915758
Torrents Time kdesi na půli cesty: Sledování uvnitř prohlížeče, ale po instalaci speciálního programu do počítače. To není elegantní řešení.

Webový "BitTorrent" potřetí a konečně kompletně v JS

I v předchozím případě se ale opět jedná o instalaci nějakého těžkého desktopového softwaru. Z hlediska designu je to vlastně cesta zpět. Co kdyby někdo napsal celý torrentový klient v Javascriptu? No, ono k tomu také už dávno došlo. Jedná se o JS knihovnu WebTorrent, která umožňuje jako stahování z alternativní torrentové P2P sítě, tak seedování a tedy sdílení dat dál, přestože to na rozdíl od klasického bittorrentového klientu nedělá automaticky.

WebTorrent má jedinou slabinu. Neumí komunikovat přímo se sítí BitTorrent a má tedy své vlastní torrenty.

377004550
Jednoduchý testovací přehrávač s využitím knihovny WebTorrent a streamování filmu Sintel, který se šíří pod svobodnou licencí

Programátorům se podařilo torrentový klient přepsat do Javascriptu hlavně díky využití multimediální P2P technologie WebRTC, se kterou si dnes poradí jak Chrome, tak Firefox, Opera a Microsoft Edge.  V nejnovějších verzích těchto prohlížečů by tedy měl WebTorrent fungovat.

Samotná JS knihovna nabízí hromadu pokročilejších funkcí, ale i naprosto primitivní použití, kdy dokážete streamovat třeba video z P2P sítě opravdu jen s několika málo řádky kódu a to bez jakéhokoliv doplňku, či instalace speciálního pluginu.

Přehrávač na obrázku výše pohání tento jendoduchý kód. Veškerou pokročilou práci provádí javascriptová knihovna WebTorrent: 

var client = new WebTorrent();
 
function init(){
 // Po klepnutí na ENTER zpracuj odkaz na torrent
 document.getElementById("torrentlink").onkeyup = function(e){
 if(e.keyCode == 13){
 // Odkazem na torrent může být URL nebo třeba magnetický link
 var torrentlink = document.getElementById("torrentlink").value;
 // Předám torrent klientu
 client.add(torrentlink, function(torrent){
 // Zvolím z torrentu první (hlavní) soubor
 var file = torrent.files[0];
 // Začnu jej stahovat a připojím jej do značky <video> s identifikátorem #player
 file.renderTo("#player");
 // Každé tři sekundy zobrazím rychlost stahování
 setInterval(function(){
 document.getElementById("status").innerHTML = "Rychlost: " + 
 Math.round(torrent.downloadSpeed*8/1E6) + " Mb/s" + 
 " Staženo: " + Math.round(torrent.downloaded/1E6) + " MB";
 }, 3000);
 });
 }
 };
}

Hollywoodu se nejspíše tato technologie opět nebude líbit, nicméně jde opravdu jen a pouze o technologii a ta je zcela legální. Ostatně i distribuovaný systém BitTorrentu, ve kterém se WebTorrent inspiroval, je sám o sobě zcela legální a byla by osudová chyba na něj koukat skrz prsty jen proto, že je zprofanovaný warezem, který bez jakýchkoliv debat tvoří drtivou většinu jeho současného využití.

WebTorrent je pak ukázkou výborného a funkčního skloubení dvou technologií – multimediální WebRTC z rodiny HTML5 a obří distribuované komunitní sítě, nad kterou nemá naprosto nikdo kontrolu – jen její samotní členové.

A nakonec krátká ukázka (video je zdánlivě trhané, protože jsem obrazovku snímal při 15/fps)

Diskuze (8) Další článek: Týden Živě: Když se myš nechtěně promění v klávesnici

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,