1 Senast ändrad av Jesper (2012-05-10 23:31:26)

Tråd: Skriptning i H.VHS 0.3x och 0.4.0 (ändrad trådtitel)

Tack vare en fantastisk förmåga att skjuta på morgondagen det jag kunde gjort redan i går, har jag fått en hel del tid att fundera över nästa steg på väg mot version 1.0. Därför har planerna för version 0.4 också hunnit förändras en del sedan jag skrev om dem senast. Syftet med den här tråden är dels att informera litet om vad som pågår, men framför allt att få respons och förhoppningsvis nya idéer.

Poängen med att hålla versionsnuffrorna (långt) under 1.0 är att markera att programmet är föränderligt, instabilt och ofärdigt. Än så länge har detta stämt förfärande väl överens med verkligheten – och med tanke på hur litet jag visste om både Qt och C++ när jag började är det egentligen ett litet mirakel att versionerna 0.3x fungerar ens hjälpligt.

Planerna för version 0.4
För ett par dagar sedan började jag arbeta på vad som kommer bli version 0.4. All kod är nyskriven och fungerar en smula bättre tack vare att jag inte kodar lika taffligt, och det firas med en flytt från Google Code till GitHub:

GitHub kommer tillsammans med det här forumet att helt ersätta Google Code och Mantis, så snart den sista av 0.3x-versionerna pensionerats. (Personer som besöker sidan kanske lägger märke till att programmet blivit på engelska. Det råkade bli så när jag satte igång, så nu tillkommer översättningsarbete. :-P)

Ännu är allt som kommer hända med version 0.4 inte färdigplanerat, men några idéer har jag oåterkalleligen fastnat för. Tre stycken, närmare bestämt.

1. Tillägg
Webbläsaren blir för det första kvar. Faktum är att jag på ett par dagar lyckades skriva en både bättre och mindre komplicerad webbläsare, så den biten är redan klar. Nästa steg är att implementera ett gränssnitt för tillägg (dvs "extensions" eller "plugins").

Tanken är att utveckling av tillägg ska kunna ske oberoende av H.VHS, och att tilläggen ska göra det som är mest väsentligt: hitta, knåda, skyffla och mosa data. Ett tillägg kommer till exempel översätta SVT Play-adresser till specifikationer för att ansluta till en RTMP-ström, ett annat tillägg kommer översätta en RTMP-ström till en fil på hårddisken, kanske kommer ett tredje tillägg översätta videor från ett visst format till något annat, och så vidare.

Efterhand ska jag även ge mig i kast med att skriva tillägg som hämtar data via andra program, bland annat youtube-dl, pirateplay.se och kanske även en del tjänster som bara finns online. (När det nu finns folk som är både fler och bättre än mig är det ett ganska lätt val att åka snålskjuts. ;-)

2. Hämtningskö
Flera, inte minst jag själv, vill ha möjligheten att köa hämtningar. Därför kommer version 0.4 ha (exakt) ett hämtningsfönster, där alla hämtningar sitter och trängs. Eller rättare sagt: Det kommer finnas ett arbetsfönster där alla pågående arbeten kan pausas, avbrytas, återupptas, senareläggas, pågå samtidigt och så vidare.

3. Uppdateringar
Tillägg kommer kunna uppdateras oberoende av H.VHS, och uppdateringar kommer ske med ett större mått av automatik. Upplägget blir i allt väsentligt mer likt det som till exempel Firefox använder. (Eller använde? Det var ett tag sedan jag använde Firefox... :-P)

Planen är fortfarande att få till något slags hub där det går att lägga upp, underhålla och respondera kring egna tillägg. I den idén ingår för övrigt fortfarande att hitta något betydligt lättare skriptformat för själva skrapningen. (Valet står mellan en hemkokt variant, vilket är roligare men egentligen inte särskilt ändamålsenligt, eller något javascript-baserat, vilket vore lika smart som tråkigt.)

Allt detta kommer dock inte hända redan i version 0.4.0. Minimikravet för att den versionen ska släppas är att den klarar av åtminstone samma saker som senaste 0.3x-versionen utan att fungera sämre. Däremot ska allt det här vara klart innan det är okej att hoppa till version 0.5, som jag inte tänker prata något om ännu. ;-)

Så. Vad jag är ute efter nu är era tankar om detta, idéer ni kanske har om nya (eller gamla) funktioner och så vidare. Det är alltid roligare att få bättre uppslag innan saker och ting hunnit gå för långt i någon annan riktning.

"It is a damn poor mind indeed which can't think of at least two ways to spell any word."

Webbplats

Dela

2

Sv: Skriptning i H.VHS 0.3x och 0.4.0 (ändrad trådtitel)

Underbara framtidsplaner det där! smile
Många programmerare tappar tyvärr intresset för sina gamla projekt med tiden, och det ser ut som att du försöker framtidsgardera programmet genom att förenkla för användare att fortsätta hålla programmet aktuellt ifall detta en dag skulle ske. Delvis med öppen källkod, och även med Tillägg.

2 saker som vore kul att se, om det inte är alltför mycket jobb... kanske redan är planerat iofs:

* En AI som tillsammans med ett "debug-läge" i H.VHS kan skrapa efter FLV / MP4 (eller valfritt sökord) länkar... lite i stil med det man gör i wireshark. Detta kanske kan kombineras med en funktion för att bygga skrapfiler utifrån en template där man bara fyller i alla återstående parametrar för exempelvis RTMPdump.
Kanske dock blir lite overkill ifall det fortsätter vara lika lätt som nu att bara editera skrapfilerna i en texteditor.

* RTMPdump kanske uppdateras eller så byter websajter till mms:// eller annat system... om detta skulle ske så vore det utmärkt om Tilläggs-funktionen i H.VHS är såpass dynamisk och tillåtande att man hyffsat enkelt kan implementera såna Tillägg.


I övrigt så anstränger jag mej ganska mycket för att försöka få mina inspelningar att "se ut som standardtrafik"... jag laddar aldrig ner mer än ett klipp åt gången, och jag börjar alltid med subtitles - och jag browsar aldrig runt på sidan under nerladdning heller. Misstänker att tv-tjänsterna inte gillar att man spelar in trots att det är helt lagligt, och det vore ju tråkigt att skynda på deras server uppdateringar...
Att efterlikna vanlig webbtrafik är altså ett plus om H.VHS är utvecklat på det sättet - vilket jag iofs misstänker att det redan är (med integrerad webbläsare och allt).


Slutligen - Tack för ett fantastiskt program än en gång!

Dela

3 Senast ändrad av Jesper (2012-03-22 01:08:45)

Sv: Skriptning i H.VHS 0.3x och 0.4.0 (ändrad trådtitel)

password skrev:

Underbara framtidsplaner det där! smile
Många programmerare tappar tyvärr intresset för sina gamla projekt med tiden, och det ser ut som att du försöker framtidsgardera programmet genom att förenkla för användare att fortsätta hålla programmet aktuellt ifall detta en dag skulle ske. Delvis med öppen källkod, och även med Tillägg.

Tack! smile Den stora förhoppningen är att lyckas attrahera fler utvecklare – dels för själva programmet, men framför allt tillägg. Det är något jag hela tiden har i bakhuvudet när jag jobbar med 0.4. En av prioritet ett-grejorna är därför att fixa så man kan skriva tillägg i Javascript.

password skrev:

* En AI som tillsammans med ett "debug-läge" i H.VHS kan skrapa efter FLV / MP4 (eller valfritt sökord) länkar... lite i stil med det man gör i wireshark. Detta kanske kan kombineras med en funktion för att bygga skrapfiler utifrån en template där man bara fyller i alla återstående parametrar för exempelvis RTMPdump.
Kanske dock blir lite overkill ifall det fortsätter vara lika lätt som nu att bara editera skrapfilerna i en texteditor.

Wireshark är en sniffer och arbetar enligt helt andra principer. H.VHS läser webbsidor medan en sniffer avlyssnar din nätverkstrafik. Men jag har ändå haft tankarna åt att försöka fixa någon funktion som letar efter "lösa" strömmar, dvs sådana som H.VHS inte egentligen har skrapare för.

H.VHS 0.3x-versionerna är begränsade på så vis att de bara kan känna igen en hämtning per sida, vilket har betydelse för den här funktionen. Detta går iofs att kringgå i en skrapardefinition genom att använda kvalitet-fältet som räknare i stället, men användarvänligheten blir inte så bra. Här är ett rätt grovhugget exempel:

// loose_rtmp.method

_name_              = 'Loose RTMP (rtmp/mp4)';
_uid_               = 'loose_rtmp'
_author_            = 'Jesper Räftegård'
_contact_           = 'jesper alfakrull huggpunkt.org'
_version_           = 1
_protocol_          = 'rtmpfamily';
_format_            = 'flv';
_content_           = 'audio,video';

_huggplay_rev_      = 438;
_interface_         = 'passive_legacy'
_disabled_          = 0;

nothing             = ['static', ''];
everything          = ['regexp', '.']
always              = ['static', 'true'];
rtmp                = ['regexp', '(rtm[pte]+://[^&?%";,]+)', 1];
identity            = ['regexp', '(rtm[pte]+://[^&?%";,]+)', 1, 'hvhs:cassette:0@rtmp/'];
title               = ['static', 'Lösa strömmar'];
subtitle            = ['static', 'Se "Detaljer" för info'];
description         = ['static', 'Fältet "Bitrate" identifierar de enskilda strömmarna.'];
counting            = ['function', 'wtfunction'];

function wtfunction() {
    var size = 16;
    var result = new Array ();
    for (i = 1; i <= size; i++)
        result.push(i);
    return result;
}

_urlverifiers_      = ['.'];
_sourceverifiers_   = ['everything'];
_liveverifiers_     = ['nothing'];
_title_             = ['title'];
_subtitle_          = ['subtitle'];
_description_       = ['description'];
_identity_          = ['identity'];
_swfapp_            = ['nothing'];
_swfplaypath_       = ['nothing'];
_swfplayer_         = ['nothing'];
_streams_           = ['rtmp'];
_bitrates_          = ['counting'];
_moviesubtitles_    = ['nothing'];
_moviesubsuffix_    = ['nothing'];

Detta fungerar inte med strömmar som kräver fler parametrar än en rtmp-adress. rtmp-adresser består i själva verket av domän/app/playpath, så den avgörande biten är swfPlayer, vilket krävs på alla sajter H.VHS har stöd för (utom UR om jag inte minns fel).

password skrev:

* RTMPdump kanske uppdateras eller så byter websajter till mms:// eller annat system... om detta skulle ske så vore det utmärkt om Tilläggs-funktionen i H.VHS är såpass dynamisk och tillåtande att man hyffsat enkelt kan implementera såna Tillägg.

Javascript-tillägg kommer inte kunna fixa det, men med hjälp av libs (dvs DLL-filer i Windows) kommer det gå. De exakta formerna är inte bestämda, men i slutändan landar jag förmodligen i ett vanligt C-ABI eller SWIG.

password skrev:

Misstänker att tv-tjänsterna inte gillar att man spelar in trots att det är helt lagligt, och det vore ju tråkigt att skynda på deras server uppdateringar...

Det är nog litet olika. Reklamkanalerna ser förmodligen med mindre blida ögon än SVT/UR på saken. Ska jag vara ärlig har jag funderat på att ge möjlighet att ladda hem reklamen som någon sorts gest. Jag har även valt att inte rensa bort "autostart=true" ur adresserna på TV3/TV6/TV8 av den här anledningen. Att strömmarna är reklamfria är egentligen ett dilemma när det kommer till t.ex. att bygga in en mediaspelare.

Jag är inte intresserad av att göra ett program som tar sig friheter bortom syftet med kassettavgiften, och då bedömer jag inspelning/hämtning utan reklam som okej – med VHS-bandspelaren som modell – i synnerhet så länge det är krångligare att få med reklamen än att låta bli. Reklamfri uppspelning direkt från sajten håller däremot inte måttet. Förhoppningsvis kan även reklamkanalerna se någon rimlighet i det. Dessutom är H.VHS i allt väsentligt en webbläsare, så de förlorar inga sidvisningar.

Parentetiskt kan jag väl nämna att jag via Mediacreepersjälva bloggen sett hur folk från reklamkanalerna ofta kommer direkt till guiden för nedladdning från SVT Play med RTMPDump, och andra gånger direkt till sidorna där H.VHS presenteras. (Länkar till mediacreeper-loggar finns här och här.) Om det är sökträffar eller om de fått länkarna på annat vis vet jag inte, men guiden ligger mycket högt på Google när man söker på t.ex. ladda hem från svt play. Gissningsvis används programmet på en eller annan redaktion, men det går inte att bekräfta eftersom det inte samlas in någon användarstatistik värd namnet. (Jag vet antalet gånger H.VHS hämtats från Google Code och det totala antalet automatiska kontroller efter nya versioner, men inget mer.)

"It is a damn poor mind indeed which can't think of at least two ways to spell any word."

Webbplats

Dela

4

Sv: Skriptning i H.VHS 0.3x och 0.4.0 (ändrad trådtitel)

Jesper skrev:

Parentetiskt kan jag väl nämna att jag via Mediacreepersjälva bloggen sett hur folk från reklamkanalerna ofta kommer direkt till guiden för nedladdning från SVT Play med RTMPDump, och andra gånger direkt till sidorna där H.VHS presenteras. (Länkar till mediacreeper-loggar finns här och här.) Om det är sökträffar eller om de fått länkarna på annat vis vet jag inte, men guiden ligger mycket högt på Google när man söker på t.ex. ladda hem från svt play. Gissningsvis används programmet på en eller annan redaktion, men det går inte att bekräfta eftersom det inte samlas in någon användarstatistik värd namnet.

Vill inte spamma tråden med brus, men LOL!... Ramlade nästan av stolen när ja klickade fram dom där mediacreeper-loggarna big_smile

Och tack för det utförliga svaret.. Jag ska ta mej en ordentlig titt på alla olika skrapfilsexempel du postat på forumet, o sen blir det lekstuga... då ska ja se om ja kan få igång detection på fler än standard sajterna smile

Dela

5

Sv: Skriptning i H.VHS 0.3x och 0.4.0 (ändrad trådtitel)

Missa i så fall inte att även kolla på medföljande svtplay_rtmp.method, som är åtminstone hjälpligt dokumenterad. Precis som står där kommer formatet förändras till version 0.4, och 0.3x-versionernas metodfiler kommer inte vara kompatibla, vilket är en jäkla tur med tanke på hur dåligt utformat det är. :-) Det visste jag dessutom redan när jag släppte den första versionen av H.VHS med metod-tolkare, och därför gjorde jag ingen vettig dokumentation.

Vill du göra skrapare som är lätta att konvertera till det nya formatet bör du hålla dig till javascript-funktioner, regexps och statiska värden:

// Javascript-funktion
_tjosan_ = ['function', 'funktionsnamn'];
function funktionsnamn() {
    var source = document.body.innerHTML;
    // Kod som enbart arbetar med source
    return resultat;
}

// Regular expression
_hejsan_ = ['regexp', 'ut(tr)yck',
                      <parentesgrupp att fånga eller 0 för allt>,
                      'eventuell sträng att infoga före',
                      'eventuell sträng att infoga efter'];

// Statiskt värde
_hoppsan_ = ['static', 'värde att returnera'];

Eftersom javascript har regular expressions inbyggt är det egentligen allt som behövs, förutom när man behöver hämta information från andra sidor – kolla _description_ i svtplay_rtmp.method för det enda kommenterade exemplet. Notera även att om _streams_ innehåller åtminstone en ström så kommer videon att antas vara giltig. Det är därför UR-skraparen alltid "hittar" en video när man tvingar fram skrapningar i H.VHS 0.34 – värdet på _streams_ är hårdkodat i skraparen.

I H.VHS 0.4 kommer javascript-skrapare enbart att kunna arbeta med källkoden i form av en string, så inga DOM-selektorer i stil med document.body.getElementsByTagName("p")[0] kommer vara användbara. Det blir alltså inte som att köra javascript i en webbläsare, vilket det är nu. Orsaken till den förändringen är helt enkelt att modellen med fönsterlös webbläsare som surfar runt i bakgrunden är långsam, klumpig, svårunderhållen och alldeles för lätt att sätta fel inställningar på. Dessutom har jag redan lokaliserat ett par krascher dit, och den aktuella kraschen på vissa SVT Play-sidor är misstänkt lik ett oidentifierat problem som relaterar till hur WebKit använder cachen.

Skriptfunktionen kommer vidare utformas så att H.VHS exponerar ett kassett-objekt för skriptmiljön, som skriptet får fylla med rätt information bäst det kan. Exakt hur jag kommer utforma funktionalitet för att hämta info från andra sidor har jag inte kollat upp än, men det värsta som kan hända är bara att man får arbeta med callbacks.

"It is a damn poor mind indeed which can't think of at least two ways to spell any word."

Webbplats

Dela

6

Sv: Skriptning i H.VHS 0.3x och 0.4.0 (ändrad trådtitel)

På förekommen anledning följer här instruktioner för hur man kan gå till väga för att följa utvecklingen av H.VHS 0.4.

  1. Installera Git, i åtminstone någorlunda nutida version. Själv använder jag med framgång msysGit 1.7.9-preview20120201. För hjälp med installationen, kolla gärna på kolla gärna första delen av den här guiden.

  2. Installera Qt Creator med Qt 4.8.0

  3. Starta Git Bash och gå till den katalog där du vill ha källkoden för H.VHS, t.ex. "Mina Dokument\QT Projects".

  4. Kör "git clone https://github.com/simio/H.VHS.git"

  5. Öppna VHS.pro från Qt Creator.

  6. För att i fortsättningen uppdatera din kopia av koden, kör "git pull" i katalogen H.VHS.

Mer uttömmande instruktioner för hur man använder Git finns i GitHubs utmärkta dokumentation. Jag kan även rekommendera den här lathunden för Subversion-användare. Vill du inte krångla med Git mer än nödvändigt, så går det utmärkt att skicka diffar (som så klart skapas med "git diff > eposta-mig.txt").

"It is a damn poor mind indeed which can't think of at least two ways to spell any word."

Webbplats

Dela

7

Sv: Skriptning i H.VHS 0.3x och 0.4.0 (ändrad trådtitel)

Jag har bytt titel på den här tråden, så nu handlar den passande nog om att skripta för H.VHS. Frågor, önskemål och statusrapporter om utvecklingen av version 0.4.0 tas i stället till tråden Önskemål och statusrapporter för H.VHS 0.4.0.

"It is a damn poor mind indeed which can't think of at least two ways to spell any word."

Webbplats

Dela