H.VHS 0.3.1, Handshake 9 och Qt-knöggel

Även om jag skrivit program som gör fler och mer avancerade saker än H.VHS, så har inget av dem någonsin blivit så omfattande. Förmodligen beror det inte minst på att jag brukat använda Scheme, medan detta är skrivet i C++, och givetvis att jag än så länge kodar hellre än smart i Qt/C++/Windows-miljön.

Men det ska inlägget inte handla om. När jag hade rivit ut och ersatt mer eller mindre allt som sker bakom kulisserna i programmet, lyckats knyppla ihop hämtningsmetoder för TV3, TV4, TV6 och TV8, och därför trodde mig vara färdig att släppa nästa version, så dök två problem upp.

  1. TV4 Play vägrade plötsligt komma överens med rtmpdump (och därför även librtmp, som H.VHS använder).
  2. På en helt färsk dator syntes inga SVG-ikoner i verktygsfälten.

Lösningen på det första problemet var enklare än jag tänkt mig: De senaste, inofficiella versionerna av librtmp har inga problem att hantera "Handshake 9"-problemet, som det visst kallas, så lösningen fick bli att rulla en egen librtmp-dll. Lätt värt besväret, eftersom programmet dessutom blir av med den statiska länkningen till PolarSSL, som är GPL-licensierat, till förmån för OpenSSL, som passar bättre in i licensblandningen.

Det krångligare problemet var att lista ut hur man egentligen får Qt att snällt ladda SVG-grafik. Frågan har ställts massor av gånger på nätet, men inga svar verkar ha hjälpt de stackarna som försökt. Det hela försvåras dessutom av att på datorer där hela Qt finns installerat så fungerar allting som det ska – det är först på användarsidan som felen uppstår.

Så steg ett är att se till att själv drabbas av samma problem redan i produktionsmiljön.

  1. Infoga följande kod i main().

Det är de tre raderna i krullklasen som gör arbetet. Eftersom det blir stökigt att lagra alla stödfiler direkt i bygg-katalogen (där även alla objektfiler hamnar) så vill jag inte ha det här bekymret annat än när jag bygger en release, som jag sedan kopierar till en katalog ("dist") där QtGui4.dll och alla de andra ligger och väntar.

Med detta uppstår problemet även på min knädator. Nästa steg är förstås att också lösa det.

  1. SVG-grafik kräver QtSvg4.dll, som i sin tur vill ha QtXml4.dll, så de ska ligga direkt i dist-katalogen, tillsammans med binären.

    dist\HuggpunktVHS.exe
    dist\QtGui4.dll

    dist\QtSvg4.dll
    dist\QtXml4.dll

Man kunde tro att det skulle räcka – minns jag inte fel så gjorde det faktiskt det någon gång tidigare – men icke!

  1. Till sist måste ett plugin distribueras tillsammans med binären, och de måste placeras riktigt i förhållande till den. Så här:

    dist\imageformats\qsvg4.dll

Det ska räcka. Men beroende på vad man vill göra kan även de följande filerna vara bra att skicka med, inte minst därför att de behövs för att komponenter som QWebView ska kunna använda diverse bildformat:

dist\imageformats\qtiff4.dll
dist\imageformats\qmng4.dll
dist\imageformats\qgif4.dll
dist\imageformats\qico4.dll
dist\imageformats\qjpeg4.dll
dist\iconengines\qsvgicon4.dll

Så principen tycks vara, att när man som i steg 1 sagt åt Qt att enbart leta efter stödfiler i den katalog som binären ligger i, så begränsar sig Qt lydigt till att leta efter sina moduler där. Men när det kommer till plugins, så måste de ändå ligga i korrekta underkataloger till dist-katalogen.

Och vilka de korrekta underkatalogerna är, det ser man för övrigt här:

C:\QtSDK\Desktop\Qt\4.7.3\mingw\plugins

Så här är det inte utan att man börjar fundera på att bygga allting statiskt i stället.

Uppdatering 2 juli. Så pass tveksam kände jag mig efter att faktiskt ha tänkt över det här Qt-knögglet, att jag tänkte om. Någonstans kring version 0.4–0.5 kommer en stor del av programmet (den jag kallar Hugg.Play) att skrivas om i Scheme. C++ är helt enkelt inte tillräckligt roligt. Eventuellt kommer Qt-beroendet försvinna helt och hållet vid något senare tillfälle.

Det finns dock en del buggar i version 0.3.1 som vore bra att få ordning på så snart som möjligt, så 0.3.2 kommer släppas som planerat.

Kommentarer till inlägget

  1. Johan, 14 september 2011, 17.33Gravatar

    Hej. Har laddat ner version 0.3, men när programmen laddas upp, så slutar de plötsligt. Ibland efter 50% men ibland redan vid 3-4 %. Och så säger den gröna "baren" att programmet är färdignedladdat. Med version 0.2 funkar det som det ska.
    Jag har en Samsung QX bärbar med 4 gig internminne, 500 gig HD. Kör Windows 7 64-bits. Explorer 8 med den gamla 32-bitars versionen.
    Som sagt, programmet funkar elvis. Har slängt ut och laddat om, men det funkar bara inte.

    Hälsn
    Johan G.

  2. Jesper, 14 september 2011, 19.19Gravatar

    Johan: Kvaliteten på svaret du får förbättras tyvärr inte av att du postar samma kommentar på flera ställen på bloggen. Jag har tagit bort den andra.

    Problemet du beskriver kan vara relaterat till många saker. Gäller det bara vissa sajter, eller alla? Gäller det bara vissa typer av strömmar på de berörda sajterna, eller alla? (En viktig distinktion är t.ex. ifall nedladdningsrutan rapporterar ungefärlig eller exakt storlek, vilket i praktiken är ifall nedladdningen sköts via RTMP eller HTTP.)

    Det låter rimligt att problemet bara berör RTMP-strömmar, eftersom nedladdningen antas vara färdig när den i själva verket avbrutits. I så fall beror det sannolikt på en känd bugg, eller egentligen att felhantering vid hämtning av RTMP-strömmar faktiskt inte implementerats fullt ut ännu. Men jag har inte fått några andra rapporter om just det beteende du beskriver förut, så jag har heller inte kollat vad det skulle kunna bero på.

    Det är i vilket fall sannolikt inte din dator eller din Windows-installation det är fel på. Sedan används Internet Explorer inte av H.VHS.

    Tack för rapporten!

  3. Johan, 14 september 2011, 23.43Gravatar

    Tack för svar. Beklagar att det blev samma fråga på två ställen. Skrev inlägg på en sida och upptäckte att det kom i mitt tycke fel. Skrev så på den i mitt tycke "rätta" sidan.

    Nog om detta. Jag har väldigt snabbt bredband via optisk fiber och trådlös router i Sollentuna stadsnät. Ominstallerade ditt program 0.3 ett antal gånger för att få allt att funka, men varken TV3play eller SVT-play med normala filer funkar fullt ut.

    Alltså för TV3 var det Hollywoodfruar (gud sicket skit) och på SVT provade jag Maestro, Dokument utifrån, Lycke och några andra. Men ALLA slutar ladda ner efter 3-60% klart. Verkar vara endast RTMP eftersom nedladdningsrutan rapporterar ungefärlig storlek. Ibland står det också att det inte går att ansluta över huvud taget..
    Men som sagt, version 0.2 funkar utmärkt om än lite primitivt. Varje gång 100% avslut

    F ö underbart att jag hittat detta smarta program, för jag har en son som bor i Schweiz, och han vill ibland ha program som inte finns att ladda ner via Pirate Bay. Man kan väl sända filen via Skype, inte sant, även om det tar lite tid?

    Hälsningar /Johan i Sollentuna

  4. Jesper, 15 september 2011, 00.13Gravatar

    Egentligen är alla platser på bloggen fel när det kommer till felrapporter, vilket framgår om man använder Hjälp-menyn i H.VHS. Men som du märker så är det ingen fara. :-)

    Version 0.2 är egentligen inte mera än ett glorifierat gränssnitt till programmet rtmpdump. Från 0.3 är det librtmp som sköter hämtningarna i stället, men just den version av librtmp som finns i 0.3.1 är en utvecklingsversion som visat sig fungera litet halvdant (men var nödvändig för att TV4 Play skulle fungera). Har vi tur så försvinner problemet av sig självt när 0.3.2 kommer ut, för då tänker jag använda en mera stabil version av librtmp.

    Ominstallation som problemlösning är i regel mycket bra tänkt. Det ska dock räcka att försöka en gång.

    Nu minns jag förresten att precis det du beskriver alltid skedde med SVT Plays 320kbit-strömmar till en början. Problemet var att nedladdningen var så snabb att servern som spottar ut videoströmmarna "tryckte på paus", så jag var tvungen att dressera H.VHS till att förbjuda sådana dumheter. Det problemet är alltså åtgärdat, vilket gör att det känns en smula otrevligt när det du råkar ut för ser precis likadant ut.

    Nåväl. Om jag kommer i håg så ska jag skicka ett mejl till dig när 0.3.2 verkar närma sig. Annars får du gärna höra av dig igen. Särskilt om det inte löser sig då!

    Om att skicka filer med Skype vet jag mycket litet. Risken är att det tar längre tid än nödvändigt. Du kan annars prova att rota bland de här sökresultaten. :-)

  5. Bosse, 9 november 2011, 00.14Gravatar

    Hej, jag har också problem vid nedladding, från svt play. Efter sådär 30-40% nedladdat så stannar det till och sen rusar gröna bandet direkt till slutet, utan att laddningen är färdig. Har försökt många gånger med samma resultat. Någon ide vad det kan vara?

  6. Jesper, 20 november 2011, 17.29Gravatar

    Bosse: Jag känner till det där felet. Det drabbar olika personer på olika sätt. Med version 0.3.1 kan det fungera att hämta i en annan kvalitet.

  7. Jesper, 3 december 2011, 12.23Gravatar

    Viktigt: Eftersom det börjat bli svårhanterligt att ta om hand frågor om H.VHS som ställs här på bloggen, har jag anlagt ett diskussionsforum på adressen planka.huggpunkt.org. På så vis går det även lättare att se svar på redan ställda frågor, i stället för att vänta på att jag hinnar svara på dem en gång till.

    Detta innebär att frågor av karaktären "när kommer funktion X?" eller "varför fungerar inte Y?" som postas här kommer tas bort. Ställ dem i forumet i stället, så blir det lättare för andra som undrar att hitta till svaret.

    Inom kort kommer ett inlägg där att sammanfatta och besvara de vanligaste frågorna.

Lämna en kommentar