summaryrefslogblamecommitdiffstats
path: root/README.md
blob: 8d1012f945e1ce48c0e425d51c016f4d355af808 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11

                                                                  








                                                                        
                                                                                        









                                                                            





                                                                           
                                                                                     
                                                                     

                                                                                      


                                                                   
                                                     
                                                                    
                                                       
                                                             









                                                                        

                                                                          
                                                         


                                                                                    

                        
                                                                                

                                                                      
                                                                                    



                                                                                       

                             

                                                                                 



                                                                                  
                                                                                  

                                                                                


                                                                          

                                                                                
                                                 
                                                   
                                                                          


                                               
                                                                 
                                                                 
 
                    
                      







                                                                                 

                                                                                


                                                                               

                                                                              




                                                                                        

                                                                                           


                                                                                     
                                                                        

                                                                                      

                             


                                                                                       
                                                                                  














                                                                                     





                                                                                     
# rtv4d-dl: program za prenašanje videoposnetkov iz arhiva TV SLO

## namestitev

### debian/ubuntu

uporabniki `amd64` debian/ubuntu distribucij lahko uporabljajo preprosto
namestitev prek upravitelja paketov `apt`.

```
wget https://sijanec.eu/pgp-key.txt -qO- | sudo apt-key add -
sudo echo deb http://prog.sijanec.eu/ $(lsb_release -sc) main \>\> /etc/apt/sources.list
sudo apt update
sudo apt install rtv4d-dl
```

### druge platforme

za namestitev na druge POSIX platforme si oglejte
[//git.sijanec.eu/sijanec/rtv4d-dl/releases](releases). tam so že prevedene
binarne datoteke za `amd64` arhitekturo.

## 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!
* z različico 0.0.3 tudi prenašanje televizijskih prenosov v živo
* z različico 0.0.4 tudi prenašanje v živo iz tujine
* z različico 0.1.0 tudi namestitveni paket za debian/ubuntu

## 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 živo [2] [3] [4] [5]`
	- primer: `rtv4d-dl živo slo1 slo1 9999999 9999999` (prenese vse)
	- argument 2 je program, 3 je izhodni direktorij,
		4 je število sekund v preteklost, 5 je število sekund v prihodnost
* prenos podnapisov oddaje: `rtv4d-dl podnapisi <url> [datoteka]`
	- primer: `rtv4d-dl podnapisi 15486024 15486024.vtt`

# dodatne informacije:  
* pisanje v STDOUT: kot pot datoteke napišite `/dev/stdout`, pri oknih pa `con`
* 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*
* če RTV strežnik ne ponuja enotne .mp4 datoteke za oddajo ampak zgolj HLS, se
	bo oddaja shranila kot kosi prenosa v živo (datoteka.mp4 => datoteka/....m3u8)
	- take datoteke lahko kasneje združite z ukazom
		`cat datoteka/*.ts | ffmpeg -i - -c:v copy -c:a copy datoteka.mp4`

# trenutna izdaja programa:  
* program je bil nazadnje ročno testiran 29. januarja 2021 in takrat je DELOVAL.
* različica: 0.1.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.
* 0.0.3 - 24. december 2020: dodano prenašanje VTT podnapisov in prenosov v živo
* 0.0.4 - 30. december 2020: dodani alternativni strežniki za prenos v živo iz
	tujine
* 0.0.5 - 5. januar 2021: dodana podoknica z uporabo cygwin in ignoriranje
	binarnih prevedenih datotek iz git repozitorija - so pod
	[izdajami](releases).
* 0.0.6 - 10. januar 2021: če RTV narobe pošlje gzipano vsebino, se ji program
	izogne, ne bom več gradil okenskih datotek
* 0.1.0 - 11. januar 2021: paket za debian/ubuntu
* 0.1.1 - 11. januar 2021: standardizacija Makefile
* 0.1.2 - 29. januar 2021: dodano nalaganje geoblokiranih datotek prek HLS

# o
* program je spisan 100% v C programskem jeziku
* ne potrebuje nobenih knjižnic, razen seveda standardnih POSIX.
* navodila za grajenje (samo pod *GNU Compiler Collection*): make

## 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
* ugotoviti mehanizem rotacije/ponovne uporabe identifikatorjev kosov v živo,
	glej [dodatno o prenosu v živo](#dodatno_o_prenosu_v_živo).

## 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.
	- opomba: seveda predvajanje v živo deluje na VLC predvajalniku v formatu m3u8
		+ primer: [https://ž.ga/tvslo1](https://ž.ga/tvslo1) v VLC network stream
* 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
* ne vemo, koliko sekund posnetkov hrani strežnik, zato predvidevamo, da je
	vsak kos dolg toliko, kot tisti v kazalu, če pa imajo tisti v kazalu različne
	dolžine, pa se izbere najkrajša in se zaokroži na celo sekundo na dol.
*	za avtomatsko pridobitev vseh videoprogramov, ki so na voljo kot prenosi v
	živo, bi bilo potrebno narediti podporo za HTTPS, zato je treba poznati
	kratice programov na pamet: `slo1`, `slo2`, `slo3`, `kp1`, `mb1`, `mmctv`.
* če je število sekund v preteklost večje od vsebine, ki jo ima strežnik v
	kazalu, bo shranjena vsa vsebina, ki je na strežniku za nazaj (~10 ur).
* če je število sekund v prihodnost večje od 0, bo program čakal, da izide nov
	delček pretoka, in ga naložil sproti, vse do izpolnjene kvote.
* program najprej naloži v preteklost, nato v prihodnost, med nalaganjem v
	prihodnost ga sicer lahko prekinete, vendar to naredite med tem, ko poteka
	čakanje na nov segment, ne med nalaganjem segmenta ali tik po nalaganju.
* prenos v živo se shrani kot m3u8 playlist in mpeg ts datoteke. te datoteke
	se lahko normalno združi v eno z ukazom `cat *.ts > zdruzene.ts` in se odpre
	kar zdruzene.ts v VLC predvajalniku. VLC podpira tudi direktno odprtje
	playlist.m3u8 datoteke in branje po kosih.
* če program ni bil prekinjen, bo po končanem prenosu v stdout napisal
	metapodatke pretoka v živo.
* **težava:** vsake toliko časa bo strežnik številko kosa rotiral nazaj. to
	prepreči snemanje neskončno v prihodnost in program bo ostal v krogu.
* za omogočanje snemanja iz tujine se gostiteljska imena pretočnih strežnikov
	zamenjajo s slovenskimi. če slovenski strežniki niso več aktualni, program
	ne bo delal. v tem primeru me kontaktirajte in med prevajanjem (angl.
	*compilation*) nastavite zastavico RTV_NASTAVITEV_BREZ_LOKACIJSKIH_SPREMEMB.