From 66da3e3728bb45599916304da9b398cb4c84ddb3 Mon Sep 17 00:00:00 2001 From: sijanec Date: Sun, 13 Dec 2020 18:54:32 +0100 Subject: =?UTF-8?q?razli=C4=8Dica=200.0.2=20sedaj=20prenese=20samo=20najbo?= =?UTF-8?q?lj=C5=A1i=20videoposnetek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 +++++++++++++++++-- rtv4d-dl | Bin 35272 -> 35272 bytes rtv4d-dl.c | 38 ++++++++++++++++++++++++++++++++------ tcp.c | 2 +- 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index eb6b81c..35e762f 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,12 @@ z uporabo programa se strinjate z naslednjimi stavki: infrastrukturo # trenutna izdaja programa: -* program je bil nazadnje ročno testiran 11. decembra 2020 in takrat je DELOVAL. -* različica: 0.0.1 +* program je bil nazadnje ročno testiran 13. decembra 2020 in takrat je DELOVAL. +* različica: 0.0.2 + +## dnevnik sprememb: +* 0.0.2 - 13. december 2020: sedaj pravilno naloži samo največjo kvaliteto, pred + tem se naloži naključna kvaliteta. # o * program je spisan 100% v C programskem jeziku @@ -42,6 +46,17 @@ z uporabo programa se strinjate z naslednjimi stavki: [Cygwin](http://cygwin.com), vendar tega še nisem testiral. če komu uspe, naj mi pošlje `Makefile` +## formatiranje kode +* K&R komentarji +* GNUC +* levi zaviti oklepaj na isti vrstici kot funkcija, desni na svoji vrstici +* vrstica max. 80 znakov, upoštevajoč, da tabulator šteje za dva +* presledek za imenom funkcije in argumenti, vendar le ob deklaraciji +* enojni presledki za spacing so lahko izpuščeni, da nista potrebni dve vrstici +* tabulator za indentacijo, tabulator naj je izrisan kot dva presledka +* IF z enim stavkom naj nima zavitih oklepajev, razen, če je to nujno (f f e e) +* preprocesorske funkcije naj delujejo kot en blok kode, pazi pri aritmetiki () + # še za narediti * dodati podporo za varno povezavo, sedaj gre vsa komunikacija z RTV4D kot HTTP. - nizka prioriteta, bolje obdržati formo *brez knjižnjic* diff --git a/rtv4d-dl b/rtv4d-dl index 2413e2f..e2343a1 100755 Binary files a/rtv4d-dl and b/rtv4d-dl differ diff --git a/rtv4d-dl.c b/rtv4d-dl.c index 83c053c..69442e0 100644 --- a/rtv4d-dl.c +++ b/rtv4d-dl.c @@ -58,7 +58,7 @@ #define RTV_JWT_SIZEOF 43+1 #define RTV_PREDVAJALNIK_URL "http://4d.rtvslo.si/arhiv/v/%u" #define RTV_PREDVAJALNIK_URL_SIZEOF 32+1 + 12 -#define RTV_VER "0.0.1" +#define RTV_VER "0.0.2" struct meta_oddaja { size_t naslov_sizeof; @@ -240,15 +240,16 @@ int rtv_meta_izpolni(struct meta_oddaja * m) { char * odg; size_t sizeloc; size_t i, j; + unsigned short int nasel_addaptivemedia = 0; /* glej iskanje stream URLja */ char * metakeys[] = {"\"title\"", "\"showId\"", "\"genre\"", \ "\"description\"", "\"showDescription\"", "\"duration\"", "\"jwt\"", \ "\"showName\"", "\"source\"", "\"publishDate\"", "\"mediaType\"", \ "\"orig\"", "\"broadcastDate\"", /* getMedia query: */ "\"http\"", \ - "\"https\"" }; + "\"https\"", "\"addaptiveMedia\"" }; char * cp; #define RTV_META_IZPOLNI_METAKEYS_SIZEOF 13 /* hkrati offset za getMedia */ #define RTV_META_IZPOLNI_METAKEYS_GETMEDIA_FINAL \ - (RTV_META_IZPOLNI_METAKEYS_SIZEOF+1)+1 /* zadnji+1 za getMedia */ + (RTV_META_IZPOLNI_METAKEYS_SIZEOF+3) /* zadnji+1 za getMedia */ #define RTV_META_IZPOLNI_VALUE (odg+i+strlen(metakeys[j])+2) #define RTV_META_IZPOLNI_VALUE_INTERNAL RTV_META_IZPOLNI_VALUE snprintf(m->get_meta_url, RTV_API_META_URL_SIZEOF, RTV_API_META_URL, m->id); @@ -364,6 +365,14 @@ int rtv_meta_izpolni(struct meta_oddaja * m) { goto rtv_meta_izpolni_returncleanly; } fflush(odgstream); + /* + * sedaj pridobimo direktni URL do mp4 datoteke, ki ima keylockhash v GET + * parametru. OPOMBA: treba je najti NAJKVALITETNEJŠO datoteko, ker RTVSLO + * strežnik pošilja zmešan vrstni red JSON parametrov, bo treba najti drug + * način. ugotovil sem, da, če je stream v addaptiveMedia JSON podobjektu, + * bo ta vedno največji, če pa obstaja samo en stream, pa addaptiveMedia + * podobjekta sploh ne bo. torej, če se je string addaptiveMedia pojavil + * tik pred tem URLjem, bo ta najboljši in lahko nehamo. */ for (i = 0; i < ftell(odgstream); i++) { for (j = RTV_META_IZPOLNI_METAKEYS_SIZEOF; j < RTV_META_IZPOLNI_METAKEYS_GETMEDIA_FINAL; j++) { @@ -371,22 +380,39 @@ int rtv_meta_izpolni(struct meta_oddaja * m) { switch (j-RTV_META_IZPOLNI_METAKEYS_SIZEOF) { case 0: /* http */ /* videofile */ RTV_META_IZPOLNI(posnetek_url, RTV_META_IZPOLNI_V, s, '"', char); + if (nasel_addaptivemedia == 1) { + RTV_NAPISI(HROSC, "Izmed več streamov izbral najboljšega."); + goto rtv_meta_izpolni_naselnajboljsistream; + } + nasel_addaptivemedia = 0; break; case 1: /* https */ if (m->posnetek_url[0] == '\0') { - RTV_META_IZPOLNI(posnetek_url, RTV_META_IZPOLNI_V, s, '"', char); + RTV_META_IZPOLNI(posnetek_url, RTV_META_IZPOLNI_V, s, '"', + char); fprintf(stderr, "test: %s\n", m->posnetek_url); memmove((m->posnetek_url)+4, (m->posnetek_url)+5, strlen((m->posnetek_url)+5)+1); RTV_NAPISI(HROSC, "Popravil HTTPS URL na HTTP"); + if (nasel_addaptivemedia == 1) { + RTV_NAPISI(HROSC, "Izmed več streamov izbral najboljšega."); + goto rtv_meta_izpolni_naselnajboljsistream; + } } + nasel_addaptivemedia = 0; + break; + case 2: /* addaptiveMedia */ + nasel_addaptivemedia = 1; + RTV_NAPISI(HROSC, "Naslednji najden pretok bo najboljši."); break; default: - RTV_NAPISI(OPOZORILO, "Doseg nedefinirane kode!"); + RTV_NAPISI(OPOZORILO, "Doseg nedefinirane kode; case=%lu", + j-RTV_META_IZPOLNI_METAKEYS_SIZEOF); } } } - } + } /* endfor: for (i = 0; i < ftell(odgstream); i++) */ + rtv_meta_izpolni_naselnajboljsistream: rtv_meta_izpolni_returncleanly: fclose(odgstream); diff --git a/tcp.c b/tcp.c index 4d9418e..df49c30 100644 --- a/tcp.c +++ b/tcp.c @@ -13,7 +13,7 @@ #include #include #define ERR_INET_ADDR "0.9.9.0" -#define TCPC_READ_BUF 1024 +#define TCPC_READ_BUF 1048576 /* en megabajt */ union ip_conv { unsigned char c[4]; struct in_addr in; -- cgit v1.2.3