summaryrefslogtreecommitdiffstats
path: root/README.md
blob: 5595ff3be40938ed6ee65418a61db4c6a42e8bae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# rtv4d-dl: program za prenašanje videoposnetkov iz arhiva TV SLO

## legalne stvari
z uporabo programa se strinjate z naslednjimi stavki:  
* avtorja ne boste tožili in se strinjate, da je program povsem legalen.
* program uporabljate na lastno odgovornost.
* če ni kje drugje avtor napisal drugače ali če to ni zakonsko drugače:
	- ne smete distribuirati programa in izdelovali kopij.
		- razlog: da lahko RTV v teoriji zahteva izbris programa iz Interneta
	- smete ga uporabljati samo za zasebno nekomercialno uporabo.
	- ne smete spreminjate izvorne kode
		- razlog: da lahko RTV kadarkoli blokira program prek user-agent niza.

## funkcije  
* prenašanje videoposnetkov iz arhiva kot odklenjene videodatoteke
* z različico 0.0.1 tudi prenašanje avdioposnetkov!
* [**novo**]: z različico 0.0.3 tudi prenašanje televizijskih prenosov v živo

## možnosti uporabe programa  
* prenos oddaje: `rtv4d-dl oddaja <URL/ID oddaje> [izhodna datoteka]`
	- primer: `rtv4d-dl oddaja 4d.rtvslo.si/arhiv/vreme/89614963`
	-	primer: `rtv4d-dl oddaja 89614963 89614963.mp4`
* prenos metapodatkov oddaje: `rtv4d-dl meta-oddaja <URL> [datoteka]`
	- primer: `rtv4d-dl meta-oddaja 89614963 89614963.txt`
	- opomba: nekateri metapodatki veljajo omejeno časa (video URL)
* prenos sličice oddaje: `rtv4d-dl slicica-oddaja <URL> [datoteka]`
	- primer: `rtv4d-dl slicica-oddaja 89614963 89614963.jpg`
* prenos zadnjih dveh ur prenosa v živo: `rtv4d-dl zivo <prog.> [dolž.] [dato.]`
	- primer: `rtv4d-dl zivo tv.slo1 9999999 tv.slo1.ts` (prenese vse)

# dodatne informacije:  
* pisanje v STDOUT: kot pot datoteke napišite `/dev/stdout`
* program se poveže na \*.rtvslo.si, spremenite izvorno kodo za drugo
	infrastrukturo
* **živo**: za možne programe in razlago dolžine glej *dodatno o prenosu v živo*

# trenutna izdaja programa:  
* program je bil nazadnje ročno testiran 13. decembra 2020 in takrat je DELOVAL.
* različica: 0.0.3

## 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
* ne potrebuje nobenih knjižnic, razen seveda `stdio.h` in `stdlib.h` (še)
* navodila za grajenje (samo pod *GNU Compiler Collection*):
	- `make` (sledite navodilom)
* rtv4d-dl na *najpopularnejšem operacijskem sistemu za osebne računalnike*
	**NE DELUJE**
	- za uporabo na tem operacijskem sistemu lahko uporabite
		[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*
* narediti mehanizem za avtomatsko posodobitev binarne datoteke
	- namesto HTTP se bo uporabljajo preprosto podpisovanje, BREZ KNJIŽNIC

## predvajanje v živo
* ker predvajanje v živo na RTVSLO trenutno potrebuje Javascript, bi bilo
	uporabno narediti minimalističen HTTP/RTP strežnik, ki bi delal zahteve na RTV
	in kot izhod uporabniku ponudil pretok.
* RTV za avdio/radio v živo že ponuja možnost poslušanja brez javascripta, imajo
	namreč icecast2 strežnik na [mp3.rtvslo.si](mp3.rtvslo.si), tako da tega po
	mojem ni potrebno izdelati še v rtv4d-dl.
* RTV4D arhiv ponuja samo videokvalitete do 720p (1280x720 pikslov). Pri
	prenosu v živo pa je maksimalna velikost 1080p (1920x1080 pisklov). Če torej hočemo dobiti kvalitetno vsebino, jo moramo posneti preden gre v arhiv.

### dodatno o prenosu v živo
* prenos v živo ima zblojene timestampe. vsaka TS datoteka je ali 4 sekunde ali
	5 sekund. sicer bi bilo vse v redu, če bi chunklist datoteka vsebovala več
	kot dve uri posnetkov. Kljub temu, da streaming strežnik takoj ne zbriše
	datotek in da imajo datoteke imena po vrsti, je nemogoče predvideti, katera
	datoteka je potrebna ob določenem času.
*	za avtomatsko pridobitev vseh videoprogramov, ki so na voljo kot prenosi v
	živo, bi bilo potrebno narediti podporo za HTTPS. zato so na voljo samo
	naslednji programi: `tv.slo1`, tv.slo2`, `tv.slo3`, `tv.kp1`, `tv.mb1`,
	`tv.mmctv`. programe lahko dodajate samo s spremembo izvorne kode.
* argument dolžina je število sekund od trenutnega časa do največjega zamika.
	nastavitev 4 bo torej prenesla najmanj zadnje štiri sekunde. Ker TS datoteke
	nimajo enake dolžine, bo pač preneseno toliko podatkov, da bo shranjeno enako
	ali več sekund, kot je bilo navedenih. Če je specificiranih več kot za dve
	uri sekund, oziroma več, kolikor jih ima chunklist z dolžinami, bo program
	predvidel, da je vsaka datoteka dolga štiri sekunde. Ko na CDN strežniku ni
	toliko sekund, kot jih uporabnik želi, bo to napisano kot OPOZORILO, naložilo
	pa se bo vse, kar je na voljo. Brez argumenta dolžine se torej naloži vse, kar
	CDN strežnik trenutno ima, recimo 10 ur v najvišji resoluciji 1080p.
		-	za bolj natančno štetje dolžin, ko se chunklist tabela konča, bi bilo
			potrebno najti ali narediti sistem za pridobivanje dolžin iz TS datotek.