Jak stáhnout multimediální obsah z internetu

8. 3. 2016 7:41 (aktualizováno) Vladislav Konopík

Někdy nastanou situace, kdy je vhodné nebo přímo žádoucí uložit multimediální obsah z internetových médií pro pozdější zhlédnutí. Používáte-li Firefox, lze s nadsázkou říci, že obsah v něm přehraný je možné uložit.

Varování: stahováním multimediálního obsahu můžete porušovat autorská práva. Tento popis má sloužit k edukativním účelům.

Potřebný software

Každý provozovatel serveru multimediální obsah distribuuje a chrání po svém, proto neexistuje jednotné řešení pro uložení zmíněného obsahu. Také je potřeba rozlišovat typ multimédia. Jedná-li se o uložený soubor (již odvysílaný pořad), nebo živě vysílaný proud dat (live stream). U serverů (Netflix, HBO), které chrání obsah pomocí Silverlight však s Linuxem neuspějete (pipelight není plnohodnotnou náhradou).

Programové vybavení je tudíž obsáhlejší a zabývat se budeme zejména:

JDownloader

Firefox – s rozšířením AdBlock, User-Agent Switcher

FFmpeg

Wireshark

VLC

Virtualbox (není nutný, ale vhodný)

JDownloader

Java aplikace pro stahování dat (nejen videa a audia), která jsou dostupná v běžném formátu (nestreamují se) na mnoha podporovaných serverech (youtube, ulozto atd.). Tuto aplikaci stačí mít spuštěnou na pozadí a ve webovém prohlížeči zkopírovat do schránky adresu nějakého multimédia. Bude-li se jednat o adresu podporovaného serveru (je jich mnoho a téměř denně vycházejí aktualizace), nabídne po chvilce hledání soubory ke stažení i v různých formátech (jedná-li se o audio/video). Aplikace si jistě zaslouží vaši pozornost.

JDownloader – počeštěný, velmi schopný

Firefox – s rozšířením AdBlock

Ve Firefoxu je rozšíření AdBlock velmi upovídané, což je dobře využitelná vlastnost. Rozšíření User-Agent Switcherumožní Firefoxu vydávat se za jiný prohlížeč i jinou platformu a používá se v kombinaci s FFmpeg frameworkem.

Pro plné využívání zmíněných rozšíření je někdy potřebné vymazat cache/historii Firefoxu, což může být ve vašem stávajícím systému nežádoucí. Proto zde zmiňuji vhodnější provoz ve Virtualboxu.

FFmpeg

Framework pro kódování a dekódování různých audio/video formátů. Je hojně využíván nejen přehrávači multimediálních souborů, ale i samotnými webovými prohlížeči. Aplikace použita v terminálu s informacemi získanými díky rozšíření User-Agent Switcherve Firefoxu.

Wireshark

Velmi silný nástroj pro monitorování – zachytávání síťové komunikace. Tímto nástrojem lze získat nejen adresu živého vysílání (většinou selhávají předchozí možnosti/kombinace), ale i celý záznam, pokud se jedná o jediný soubor.

Protože tento nástroj zachytává veškerou komunikaci na síťovém rozhraní, je vhodné používat jej ve Virtualboxu, kde bude zachycovat jen potřebný obsah (multimédium) a nebude soubor zbytečně narůstat při další webové komunikaci ve vašem stávajícím systému.

VLC

Výborný multimediální přehrávač se schopností streamovaný obsah nejen přehrávat a ukládat, ale i vysílat. Ohledně streamování pomocí VLC, lze na Linuxexpres nalézt několik článků.

Získání odkazu multimédia

Jelikož každý provozovatel serveru používá odlišné postupy pro přehrávání multimédií, lze tímto způsobem získat playlist s obsahem mnoha částí přehrávaného souboru, ale taktéž playlist, který odkazuje na další playlisty pro různou kvalitu multimédia. V lepším případě získáte odkaz na celý soubor multimédia.

JDownloader ponechávejte spuštěný na pozadí (pokud jej používáte), neboť někdy odchytí zpracovatelný odkaz.

1. varianta s Firefoxem

 – vymažte cache prohlížeče v menu Historie>Vymazat nedávnou historii

 – zásuvný modul Shockwave Flash na Nespouštět

 – u rozšíření Adblock Zobrazit blokovatelné objekty

Vymazání veškeré historie prohlížeče

Vymazání veškeré historie prohlížeče

Nejprve zkuste do schránky zkopírovat adresu stránky s videem, zda-li jej neodchytí JDownloader.

V okně rozšíření Adblock se zaměřte na sloupec Typ. Prvek, který potřebujete je označen jako „zvuk a video“ nebo „subpožadavek“. Pokud se zde žádný takový prvek nenachází, klikněte na video pro jeho spuštění (nespustí se, ale u Adblock se objeví další prvky).

Je-li po znovu-načtení blokovaných prvků dostupný některý z výše jmenovaných prvků, klikněte na prvek pravým tl. myši a vyberte „Otevřít v novém panelu“. O správném prvku svědčí v novém panelu zobrazená výzva pro aktivaci pluginu přehrávače.

Otevření hledaného prvku v novém panelu

Otevření hledaného prvku v novém panelu

Opět vyzkoušejte v novém panelu zkopírovat adresu do schránky pro JDownloader.

Může se stát, že se neobjeví požadované prvky, nebo žádný z prvků vám v novém panelu nenabídne možnost aktivace pluginu přehrávače. Také se můžete setkat se stránkami „alergickými“ na AdBlock rozšíření. V takovém případě postupujte k variantě s Wiresharkem.

Získaný odkaz využijete pro stažení těmito způsoby (může fungovat pouze jediný):

1a. – terminál: wget

$ wget adresa_multimedia

Získáte-li playlist (většinou *.m3u8), který obsahuje části multimédia, je potřebné dále stáhnout jednotlivé části multimédia a poté je pospojovat. Nejjednodušší je vytvořit si na tyto záležitosti primitivní skript (bash, perl, lua atd.), podobný zde uvedenému.

--               VLKODLAK 2014 v0.1
--
-- LUA skript pro stazeni a spojeni streamovaneho videa
----------------------------------------------------------

-- adresa serveru streamu
--     adresa musi koncit lomitkem
web = ""

-- soubor s playlistem
--     neni-li ve stejnem adresari jako skript, musi byt
--     uvedena absolutni cesta i nazev playlistu
playlist = ""

-- nazev vysledneho souboru
soubor = "cele-video.ts"

----------------------------------------------------------
-- tabulka pro nazvy jednotlivych casti streamu
stahuj = {}

-- otevreni playlistu a ziskani nazvu streamu
data = io.open(""..playlist)
while true do
  info = data:read("*l")
  if info == nil then break end
  z,k,stream = string.find(info, "([%S%s]*)")
  if string.match(stream, "%S") ~= "#" then table.insert(stahuj, stream) end
end
data:close()

-- stazeni vsech soucasti streamu
for a = 1, #stahuj do os.execute("wget "..web..stahuj[tonumber(a)]) end

-- tvorba a spojeni streamu do jednoho souboru
os.execute("cp "..stahuj[1].." "..soubor)
for b = 2, #stahuj do os.execute("cat "..stahuj[tonumber(b)].." >> "..soubor) end

-- konec
print(" >> HOTOVO <<")
print(" Byl vytvořen soubor "..soubor.." ")

1b. – terminál: ffmpeg

Pomocí FFmpeg je možné stáhnout i multimédium, které je v playlistu rozděleno na mnoho částí. Parametrem -user-agent lze server „ošálit“ a vydávat se tak za jiné zařízení, než je váš Linux s Firefoxem.

Běžné použití:

$ ffmpeg -i "adresa_multimedia" -c copy vysledne_video.ts

Použití přístupu na server v „módu“ iPhone.

$ ffmpeg -user-agent "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile Safari/600.1.4" -i "adresa_multimedia" -c copy vysledne_video.ts

1c. – terminál: rtmpdump

Aplikace pro zachycení paketů vysílaných pomocí protokolu rtmp. Protokol se nejčastěji používá pro živé vysílání, ale je možné se s ním setkat i u distribuce běžného obsahu.

Uložení média:

$ rtmpdump -v -r "rtmp://adresa_multimedia" -o video.flv

Přehrávání média ve vlc:

$ rtmpdump -v -r "rtmp://adresa_multimedia" | vlc -

2. varianta s Wiresharkem

– ve Wiresharku spusťte zachytávání paketů na používaném síťovém rozhraní

(ve Virtualboxu to bude rozhraní eth0)

Ve webovém prohlížeči (nemusí to být Firefox) otevřete stránku s multimédiem o které máte zájem. Musíte posečkat než se začne přehrávat požadované médium (skončí reklamní blok). Po chvilce přehrávání ukončete zachytávání paketů ve Wiresharku.

Zachycené pakety ve Wiresharku

Zachycené pakety ve Wiresharku

Než ukončíte i přehrávané médium ve webovém prohlížeči, je možné jednoduchým testem získat základní představu o následujícím způsobu zpracování. Test spočívá v pozastavení média v prohlížeči (toto nefunguje u živého vysílání – televize, rádia).

Načte-li se pouze malá část média, jedná se o vysílání pomocí playlistu, který je potřebné nalézt v zachycených paketech. Naopak u médií, které mají tendenci neustále se před-načítat, se jedná o jediný vysílaný soubor, kdy lze po nalezení odkazu (v zachycených paketech) stáhnout soubor aplikacemi wget, ffmpeg, rtmpdump.

2a. nalezení odkazu multimédia

Po zastavení zachytávání paketů nejprve zadejte do pole Filter: rtmp. Pokud se zobrazí jen několik paketů, nebo žádný, klikněte na Clear vedle pole Filter. V opačném případě přeskočte k popisu rtmp.

společný začátek pro HTTP i RTMP

Vyberte z menu Statistics>Conversation List>TCP (IPv4 &IPv6).

Seřaďte si pakety podle množství a po označení řádku s největším množstvím paketů klikněte na Follow Stream (někdy mohou být pakety rozházeny po sousedních IP adresách, proto nemusí být vždy nejpočetnější řádek ten, který potřebujete – tzn. sledujte i sousední IP adresy).

Uložení HTTP

Conversation List

- HTTP

V novém okně vás bude zajímat zejména červeně zbarvený text. Zaměřte se na řádky označené GET a Host.

Příklad (nefunkční, jen pro názornost):

GET /vid/21606cc8e73135073979ae4/27937463d35d0bb8265d_sd.flv?start=0 HTTP/1.1
Host: tv.stream.tv:8080 

Výsledná adresa:

http:// tv.stream.tv:8080/vid/21606cc8e73135073979ae4/27937463d35d0bb8265d_sd.flv?start=0 

Takovouto adresu již lze použít v terminálu podle varianty 1a a 1b.

- RTMP

Oproti předchozímu (http) příkladu, nejprve klikněte na tlačítko Hledat. Do pole zadejte rtmp a nechejte vyhledat.

Zkopírujte si vše od rtmp:// až po tečky (posledním znakem by mělo být lomítko)

Do pole pro vyhledání nyní zadejte play a opět zkopírujte až po sekvenci několika teček.

Příklad (nefunkční, jen pro názornost):

- vyhledáno rtmp

tcUrl..(rtmp://tv-service.cd.cz/vod/..fpad....capabilit

- vyhledáno play

play............pmp4:1566093.mp4?SIGV=2&IS=0&ET=1453287771&CIP=37.48.37.228&KO=1&US=833d18b8915c85d9a3epac............73

Výsledná adresa:

rtmp://tv-service.cd.cz/vod/ pmp4:1566093.mp4?SIGV=2&IS=0&ET=1453287771&CIP=37.48.37.228&KO=1&US=833d18b8915c85d9a3epac

Získanou adresu je možné použít s rtmpdump podle varianty 1c.

2b. stažení celého multimédia

Možnost stáhnout celé médium je lehce dostupné pouze v případě, že se jedná o http komunikaci a obsah není pod DRM ochranou (např. pomocí Silverlight, nebo HTML5). S https a rtmp komunikací toto nefunguje.

Předpokladem je, že ponecháte video ve webovém prohlížeči běžet až do konce (postačí když jej necháte načíst do konce – poznáte dle časové osy) a Wireshark bude celou dobu zachytávat pakety. Po dokončení zachytávání paketů (u názvu rozhraní v záhlaví okna se objeví hvězdička), vyberte z

menu File>Export Objects>HTTP.

V novém okně vyberte Save All a zadejte název adresáře. V tomto adresáři poté naleznete obrázky, texty, celé multimédium, nebo části multimédia, které je potřebné pospojovat (playlist vs. celý soubor).

Závěr

Každý provozovatel serveru poskytující multimediální obsah, si chrání příjmem z tohoto obsahu plynoucí. Není proto zárukou, že vám uvedené postupy budou fungovat za týden, i když vám včera fungovaly. Toto je například důvod, proč má JDownloader téměř každodenní aktualizace (vzhledem k množství podporovaných serverů).

Sdílet