Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
SVEUC ILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
ZAVRŠNI RAD br. 5791
Procjena performansi usluga strujanja igara uživo na osnovu
analize kriptiranog prometa uporabom metoda strojnog
učenja
Blaž Planinić
Zagreb, lipanj 2018.
Sadržaj
1. Uvod ............................................................................................................. 1
2. Strujanje video sadržaja ............................................................................. 3
2.1. Prilagodljivo strujanje putem protokola HTTP ..................................... 3
2.2. Strujanje video sadržaja uživo ............................................................. 4
2.3. Platforma Twitch.tv .............................................................................. 4
3. Iskustvena kvaliteta ..................................................................................... 7
3.1. Definicija iskustvene kvalitete .............................................................. 7
3.2. Iskustvena kvaliteta usluga video strujanja ......................................... 8
4. Metodologija rada ........................................................................................ 9
4.1. Laboratorijsko okruženje ..................................................................... 9
4.2. Korišteni alati ..................................................................................... 10
4.2.1. Alat tcpdump ............................................................................ 10
4.2.2. IMUNES ................................................................................... 11
4.2.3. JavaScript ................................................................................ 11
4.2.4. Weka ........................................................................................ 12
4.3. Priprema podataka za analizu ........................................................... 12
4.3.1. Prikupljanje podataka ............................................................... 13
4.3.1.1. Prikupljanje podataka s aplikacijske razine ........................ 13
4.3.1.2 Prikupljanje mrežnog prometa ............................................ 15
4.3.2. Obrada prikupljanih podataka .................................................. 16
4.4. Strojno učenje ................................................................................... 17
5. Analiza rezultata ........................................................................................ 19
6. Zaključak .................................................................................................... 22
7. Literatura .................................................................................................... 23
8. Sažetak ....................................................................................................... 25
9. Summary .................................................................................................... 26
10. Dodaci ........................................................................................................ 27
10.1 Dodatak: Popis Slika ........................................................................ 27
10.2 Dodatak: Popis Tablica .................................................................... 28
10.3 Dodatak A: Skripta za prikupljanje podataka s aplikacijske razine ... 29
10.4 Dodatak B: Skripta za parsiranje podataka s aplikacijske razine ..... 29
1
1. Uvod
U današnje vrijeme, jedan od najpopularnijih oblika zabave jest igranje
višemedijskih videoigara. Ljudi zamjenjuju odmor i tradicionalna druženja igranjem
videoigara, te im to zapravo predstavlja bijeg od svakodnevnih problema i
razmišljanja. Prema statističkim podacima, u 2017. godini 65% kućanstava sadrži
uređaj za igranje videoigara, a prosječna dob igrača (eng. gamer) je 35 godina [1].
Videoigre je moguće igrati na različitim uređajima, kao što su: osobno računalo (eng.
personal computer, PC), PlayStation, Xbox, osobni mobitel i mnogi drugi.
Međutim, u novije vrijeme sve popularnije postaje i takozvano strujanje (engl.
streaming) videoigara uživo u kojem igrači dijele svoj video sadržaj igre koju igraju
s drugima na Internetu. Trenutno među vodećim platformama u Europi i Americi
koje nude igračima uslugu dijeljenja sadržaja videoigara su Twitch i YouTube
Gaming. Koliko je popularno strujanje igara uživo, govore i same brojke. Tako
Twitch kaže da trenutno broji preko 2 milijuna aktivnih ljudi koji streamaju, te preko
15 milijuna dnevno aktivnih korisnika [2][3].
Dakle, usluge video strujanja danas čine dominantni udio ukupnog prometa
na Internetu [13]. Najveći dio tog prometa povezan je s popularnim uslugama
temeljenim na prilagodljivom strujanju putem protokola HTTP. Davatelji mrežnih
usluga uglavnom nemaju uvid u performanse i parametre kvalitete video tokova koji
prolaze njihovom mrežom, obzirom da je promet često kriptiran.
Cilj ovog rada je prikupljanje i snimanje podataka sa mrežne i aplikacijske
razine usluge Twitch prilikom strujanja igara uživo kako bi se razvio model temeljen
na tehnici strojnog učenja kojim bi se testiralo do koje se mjere performanse na
razini aplikacije mogu procijeniti na temelju prometnih značajki.
Ovaj rad sastoji se od 6 poglavlja. U drugom poglavlju ukratko je opisano
strujanje video sadržaja uživo, platforma Twitch.tv i njezina svrha. Također su
opisane tehnike kojima se koristi Twitch.tv za strujanje videoigara uživo. Tako je
opisano prilagodljivo strujanje putem protokola HTTP.
U trećem poglavlju objašnjen je pojam iskustvene kvalitete i njezinog
značenja danas. Osim iskustvene kvalitete opisana je i kvaliteta usluge, te koja je
razlika između njih. Također je opisan jedan od načina mjerenja iskustvene kvalitete
2
te koji su to parametri koji utječu na iskustvenu kvalitetu.
U sljedećem poglavlju objašnjena je metodologija rada, odnosno način
prikupljanja i pripreme podataka s mrežne i aplikacijske razine te je opisana
arhitektura sustava koja je bila korištena pri mjerenju. Također su objašnjeni
korišteni alati koji su bili potrebni u mjerenju i prikupljanju podataka.
U petom poglavlju opisana je analiza prikupljenih podataka. Podaci su
obrađeni i pripremljeni za stvaranje modela strojnog učenja, te se analizira koliko je
moguće na osnovu mrežnih parametara procijeniti aplikacijske parametre, odnosno
parametre iskustvene kvalitete.
Na samom kraju rada slijede zaključak, popis korištene literature, sažetak na
hrvatskom i engleskom jeziku te dodaci s popisom slika, popisom tablica i
napravljenim skriptama.
3
2. Strujanje video sadržaja
U ovom poglavlju opisana je platforma Twitch.tv, njezin nastanak i razvoj sve
do danas. Također su opisane tehnike kojima se Twitch.tv služi u strujanju video
sadržaja uživo koje je isto tako ukratko objašnjeno.
2.1. Prilagodljivo strujanje putem protokola HTTP
Prilagodljivo strujanje putem protokola HTTP (eng. HTTP adaptive
streaming) je jedan od najčešće korištenih tehnologija kod platformi koje se bave
prikazivanjem video zapisa. Ovaj protokol je kombinacija učitavanja (eng. download)
i istovremenog prikazivanja video sadržaja. Podaci video zapisa se prenose do
korisnika putem HTTP veze gdje se pohranjuju u aplikacijski spremnik (eng. buffer).
Kada je dovoljna količina podataka skinuta, odnosno pohranjena u buffer, video će
se pokrenuti. Sve dok ima podataka u buffer-u video će se prikazivati, a u suprotnom
video će zastati (eng. stalling) i pričekati dok se buffer ponovno ne napuni dovoljnom
količinom podataka potrebnom da bi se video počeo reproducirati. Ovo će se
događati kada su uvjeti u mreži loši, te je potrebno više vremena za skidanje
podataka. Kvaliteta, odnosno rezolucija videa se automatski prilagođava uvjetima u
mreži. Tako, kada su uvjeti dobri video teži biti reproduciran na što većoj kvaliteti, a
u suprotnom u što manjoj kvaliteti samo da ne dođe do zastoja [20]. Slika 1 prikazuje
kako se kvaliteta video zapisa prilagođava dinamičkim uvjetima u mreži. Video zapis
na poslužitelju je pohranjen u obliku različitih segmenata određene veličine, duljine
i kvalitete. Dakle, video zapis se pohranjuje u raznim verzijama koje se razlikuju po
kvaliteti, odnosno mogu biti različite rezolucije ili brzine kodiranja (eng. bitrate).
Svaka verzija videa podijeljena je u segmente koji obično traju otprilike dvije do
deset sekundi, te se učitava segment po segment. Kada klijent procijeni da je pala
propusnost mreže (Slika 1), sljedeći segmenti će se slati u nižoj kvaliteti.
4
Slika 1 - Prilgodljivo strujanje putem protokola HTTP
2.2. Strujanje video sadržaja uživo
Danas, strujanje video sadržaja uživo jedna od najdominantijih usluga na
Internetu. Prema istraživanjima, najveći dio prometa na Internetu otpada na
gledanje video zapisa i video zapisa uživo. Predviđa se da će video, bio uživo ili ne,
zauzimati 78% svijetskog prometa na Internetu do 2021. godine [13]. Strujanje video
sadržaja uživo koristi se u svim područjima života, od streamanja nogometnih
utakmica i velikih događanja pa sve do streamanja vlastitih zbivanja koje želimo
podijeliti s drugima. Tako strujanje video sadržaja uživo koriste i nude svojim
korisnicima jedne od najpopularnijih društvenih mreža danas, Facebook i Instagram
[21][22].
Jedna od glavnih značajki strujanja video sadržaja uživo je da ono zaista
bude uživo, odnosno da se video koji snima igrač prenese do gledatelja bez
kašnjenja. No nažalost to nije ostvarivo te uvijek postoji kašnjenje (eng. latency).
Kašnjenje je vrijeme koje protekne od trenutka kada se neki događaj u videu dogodi
do trenutka kada gledatelj taj događaj vidi. Nastoji se da kašnjenje bude što manje
te da video bude što više u stvarnom vremenu (eng. real time). Nažalost Twitch.tv
ne omogućuje svojim gledateljima premotavanje videa unazad za vrijeme gledanja
video sadržaja uživo, a video je nakadno moguće vidjeti samo ako streamer pohrani
prethodno snimljen video na svoj račun (eng. account) na Twitch.tv-u.
2.3. Platforma Twitch.tv
Twitch je trenutno jedna od vodećih platformi u svijetu videoigara koja služi
za dijeljenje i prikazivanje video sadržaja igrača. Platforma je osnovana u lipnju
5
2011. godine, a trenutni vlasnik je tvrtka Amazon koja ga je kupila 2014. godine za
skoro milijardu dolara [9]. Twitch je prvotno bio dio Justin.tv platforme koja je
osnovana 2007. godine i koja je bila podjeljena u nekoliko kategorija. Kako je interes
za gaming kategoriju rastao jako brzo, kompanija je odlučila osnovati posebnu
platformu za istoimenu kategoriju, te je tako nastao Twitch.tv [10]. Prema podacima
iz ožujka 2018. godine, broj zaposlenih bio je preko 1000 [10].
Twitch je platforma napravljena za igrače koji dijele svoj video sadržaj s
drugima i za one koji taj sadržaj žele gledati. Pritom, igrači koji dijele svoj sadržaj s
drugima, imaju mogućnost komentiranja svoje igre (eng. gameplay) i istovremenog
prikazvanja sebe dok igraju. Također Twitch omogućuje igračima šansu da kroz
svoju strast za igranjem nešto i zarade. Igrač može zaraditi na više načina. Jedan
je taj da po broju svojih novih pretplatnika (eng. subscribers) mjesečno zaradi
određeni iznos, a drugi je da ga njegovi gledatelji doniraju. Donirati se može
proizvoljan iznos, pa se tako donacije kreću od jednog dolara pa sve do nekoliko
stotinjaka dolara. Kako mlade generacije vide mogućnost lake zarade, svakim
danom ima sve više i više novih streamera, no ipak samo rijetki uspiju. Gledatelji
svoje omiljene streamer-e mogu gledati putem aplikacije koja je dostupna za
Android i za iOS mobilne uređaje, te putem Internet preglednika [11]. U ovom radu
video zapisi će se gledati putem Internet pregledinika Google Chrome.
Twitch, kao i platforma YouTube, za prikazivanje videa koristi tehniku
prilagodljivog strujanja putem protokola HTTP. Ova tehnika prilagodljivog strujanja
detaljnije je opisana u poglavlju 2.1. Slika 2 prikazuje postavke potrebne za
emitiranje (eng. braodcast) na Twitch.tv-u. Tako se može vidjeti da Twitch korisiti
H.264 kodek (eng. codec) za kodiranje video sadržaja.
6
Slika 2 - Twitch.tv potrebne postavke [11]
7
3. Iskustvena kvaliteta
U ovom poglavlju objašnjen je pojam iskustvene kvalitete i njezinog značenja
danas. Osim iskustvene kvalitete opisana je i kvaliteta usluge, te koja je razlika
između njih. Također je opisan jedan od načina mjerenja iskustvene kvalitete te koji
su to parametri koji utječu na iskustvenu kvalitetu.
3.1. Definicija iskustvene kvalitete
Iskustvena kvaliteta (eng. Quality of Experience, QoE) relativno je novi
koncept koji se bavi mjerenjem razine korisničkog zadovoljstva korištenjem
određene usluge ili proizvoda [14]. Sve većim razvojem višemedijskih usluga,
naglasak s tehnologije pomaknuo se na korisnike i njihove zahtjeve. Kako je danas
velik broj različitih usluga, a svakim danom izlaze nove, iskustvena kvaliteta je
otvoreno područje istraživanja. Nažalost, zbog subjektivnosti iskustvene kvalitete
nemoguće je definirati gotov model za mjerenje iskustvene kvalitete koji bi vrijedio
za sve telekomunikacijske usluge, ali je zato moguće definirati pojedine modele za
procjenu iskustvene kvalitete za različite tipove usluga.
Iskustvena kvaliteta nastala je kao nadopuna kvalitete usluge (eng. Quality
of Service, QoS). Međunarodna unija za telekomunikaciju (eng. International
Telecommunication Union, ITU) definira QoS kao ukupan efekt performansi
određene usluge koja se određuje zadovoljstvom krajnjeg korisnika [12]. Dakle, cilj
je osigurati uvjete u mreži i na razini usluge takve da se zadovolje očekivanja i
zahtjevi krajnjeg korisnika u smislu iskustvene kvalitete.
Kao što je već rečeno, iskustvena kvaliteta jest subjektivna mjera koja se
oslanja na korisnička mišljenja. Kod takvih se mjerenja najčešće koristi ljestvica
srednje ocjene kvalitete (eng. Mean Opinion Score, MOS). MOS vrijednosti se
izražavaju pomoću ACR (eng. Absolute Category Rating) ljestvice (Tablica 1). No
mora se naglasiti kako ni ova mjera nije najbolja za ocjenu kvalitete usluge jer
različiti su kriteriji ocjenjivanja pojedinih korisnika [15].
8
Tablica 1 - MOS vrijednosti
Ocjena Opis
5 Odlično
4 Dobro
3 Prihvatljivo
2 Loše
1 Vrlo loše
3.2. Iskustvena kvaliteta usluga video strujanja
Prilikom gledanja videa postoje mnogi parametri koji utječu na iskustvenu
kvalitetu. Ti parametri zovu se ključni pokazatelji uspješnosti (eng. Key Performance
Indicators, KPI). Neki od njih su početno kašnjenje (eng. inital delay), zastajkivanje
(eng. stalling), postotak video zapisa prikazanog na određenoj rezoluciji i mnogi
drugi. U nastavku su ukratko opisani navedeni KPIevi.
Početno kašnjenje je jedan od najprisutnijih KPIeva koji utječu na
iskustvenu kvalitetu prilikom gledanja video zapisa. Sve dok se dovoljno podataka
ne prikupi u buffer video se neće pokrenuti. Dakle, vrijeme proteklo od trenutka kada
korisnik pokrene video reprodukciju do trenutka kada ta reprodukcija zaista krene
naziva se početno kašnjenje.
Zastajkivanje je slično kao i početno kašnjenje, no ono se ne manifestira na
početku videa, već nakon što video krene s reprodukcijom. Događa se kada se
buffer isprazni te nema dovoljno podataka za daljnju reprodukciju videa. Vrijeme
potrebno da se buffer ponovno dovoljno napuni i da video nastavi s reprodukcijom
naziva se vremenom zastajkivanja (eng. stalling duration).
Kvaliteta video zapisa je isto jedan od faktora koji najviše utječu na
iskustvenu kvalitetu. Segmenti video zapisa mogu se razlikovati po kvaliteti
primjerice u smislu rezolucije ili brzine kodiranja. Što je postotak ukupnog videa
prikazanog na višoj rezoluciji veći, to će i iskustvena kvaliteta u pravilu biti bolja.
9
4. Metodologija rada
U ovom poglavlju je opisan način mjerenja i prikupljanja podataka s
aplikacijske i mreže razine u laboratoriju koji su nam potrebni za kasnije razvijanje
modela putem metoda strojnog učenja (Slika 3). Podaci s aplikacijske razine (npr.
timestamp, naslov videa, trenutna veličina buffera itd.) se prikupljaju putem
platforme Twitch.tv, prilikom gledanja video igara uživo, koja nudi opciju detalja
videa (eng. Show video stats), što je opisano u poglavlju 2.3. Obradom prikupljenih
podataka s aplikacijske razine dobivamo KPIeve (u ovom radu samo početno
kašnjenje) koji predstavaljaju podatke koji utječu na razinu zadovoljstva korisnika.
Podaci s mrežne razine zajedno s KPIevima čine skup podataka za razvijanje
modela strojnog učenja. Prilikom prikupljanja podataka, uvjeti u mreži su kontrolirani
pomoću skripte u IMUNES-u [4] koja svake sekunde mijenja karakteristike mreže,
što je detaljnije opisano u poglavlju 4.3.
Slika 3 - Prikupljanje i priprema podataka
4.1. Laboratorijsko okruženje
Prilikom prikupljanja podataka korištena su tri računala koja imaju pristup
Internetu te uređaj Net.Shark koji služi za repliciranje mrežnog prometa [16]. Slika
4 prikazuje postrojenje u laboratoriju.
Računalo br.1 u sebi sadrži dvije mrežne kartice, od kojih je jedna povezana
izravno na Internet, a druga na lokalni usmjeritelj (eng. router). Ono pokreće
operacijski sustav FreeBSD na kojem je instaliran program IMUNES [4] pomoću
kojeg se manipulira propusnost mrežne poveznice. Računalo br.1 je dalje spojeno
na uređaj Net.Shark koji samo služi za kopiranje podataka mrežnog prometa na
10
računalo br.2. Računalo br.2 pokreće operacijski sustav Linux te ono preko
programskog alata tcpdump snima i sprema mrežni promet u obliku .pcap datoteke.
Računalo br.3 pokreće operacijski sustav Windows 10 na kojem se preko
preglednika Google Chrome gleda strujanje igrara uživo putem platforme Twitch.tv.
Računalo je spojeno na lokalni usmjeritelj, koji je preko Računala br.1 spojeno na
Internet.
Slika 4 - Laboratorijsko okruženje
4.2. Korišteni alati
U ovom potpoglavlju opisani su alati koji su korišteni kao pomoć u izradi
ovog završnog rada.
4.2.1. Alat tcpdump
Tcpdump je jedan od najrasprostranjenijih besplatnih alata koji se pokreće
pomoću komande linije, a služi za prikaz i prikupljanje mrežnih podataka, odnosno
TCP/IP i ostalih paketa koji su primljeni ili poslani na mreži na kojoj je računalo
spojeno [17]. Alat je moguće instalirati i koristiti na različitim operacijskim sustavim,
kao što su Linux, Solaris, BSD, macOS i drugi [6].
Tcpdump nudi mogućnost ispisa podataka mreže u izlaznu datoteku koja je
oblika .pcap (Slika 10).
11
4.2.2. IMUNES
IMUNES (eng. Multiprotocol Network Emulator/Simulator, IMUNES) je alat
pomoću kojeg se može manipulirati mrežnim parametrima [4]. On nudi interaktivno
grafičko sučelje (eng. Graphical User Interface, GUI) za prikaz topologije mreže koja
se onda može emulirati, odnosno simulirati u realnom vremenu [5]. IMUNES je
temeljen na operacijskim sustavima Linux i FreeBSD [4].
Slika 5 prikazuje shemu u IMUNES-u koja se odnosi na računalo (Računalo
br.1 , Slika 4) s dvije mrežne kartice koje koristimo za prikupljanje podataka u ovom
radu. Jedna mrežna kartica spojena je izravno na Internet, a druga mrežna kartica
je spojena preko Net.Shark-a u lokalni usmjeritelj. Promet se sa sučelja koje je
spojeno na Internet preusmjerava na sučelje koje je spojeno na usmjeritelj.
Slika 5 - Shema u IMUNES-u koja se koristi tijekom prikupljanja podataka
Jedna od najznačajnijih mogućnosti koje nudi IMUNES su postavke
ograničenja na propusnost mrežnog prometa (eng. bandwidth). U ovom radu koristit
će se 5 različitih skripti koje generiraju različite propusnosti u mreži što je detaljnije
opisano u sljedećim poglavljima.
4.2.3. JavaScript
JavaScript (JS) je skriptni programski jezik sličan Javi koji se prvi put pojavio
1995. godine te se razvija sve do danas. Zadnja stabilna verzija JavaScripta je izašla
2017. godine. Jezik je poseban po tome što se izvršava u Internet pregledniku (eng.
Web browser) na strani korisnika, a ne na poslužitelju (eng. Server) [7]. JavaScript
omogućuje različite stvari, kao što su mijenjanje sadržaja prikazane Internet
stranice, rad s animacijama, dohvat informacija o Internet stranici, validaciju
različitih formi i mnoge druge [18].
Pomoću JavaScript-a u ovome radu će se napisati skripta koja prikuplja
12
podatke s aplikacijske razine. Skripta se nalazi na kraju rada (Dodatak A) te je
detaljnije opisana u poglavlju 4.3.
4.2.4. Weka
Weka (eng. Waikato Environment For Knowledge Analysis) je programski
alat napisan u jeziku Java koji sadrži kolekciju algoritama strojnog učenja za
obavljanje posla dubinske analize podataka (eng. Data mining) [18]. Alat je razvijen
na Sveučilištu Waikato u Novom Zelandu. Weka uključuje cijeli niz postupaka za
pripremu podataka te neke mogućnosti za vizualizaciju dobivenih rezultata.
Algoritmi u Weka-i mogu biti direktno primjenjeni na skup podataka (kao što će se
koristiti u ovom radu) ili pozvani iz vlastitog Java programa, odnosno koda. Slika 6
prikazuje izgled grafičkog sučelja programskog alata Weka-e.
Slika 6 - Weka programski alat: primjer grafičkog sučelja
4.3. Priprema podataka za analizu
U ovom potpoglavlju opisan je način prikupljanja podataka, odnosno osnovne
informacije i upute kako su podaci prikupljani. Također je opisana obrada
prikupljenih podataka pripremljenih za daljnju analizu, odnosno za generiranje
modela strojnog učenja.
13
4.3.1. Prikupljanje podataka
Potrebno je istovremeno prikupiti podatke s aplikacijske i mrežne razine.
Prikupljat će s podaci o 100 različitih video zapisa. Prilikom prikupljanja podataka
mrežni uvjeti su kontrolirani pomoću 5 različitih skripti koje se pokreću u
programskom alatu IMUNES [4] na računalu br.1 (Slika 4). Skripte smanjuju
propustnost mreže, od kojih neke predstavljaju bolje, a neke lošije uvjete u mreži.
Skripte koriste dnevnike koje manipuliraju raspoloživim prijenosnim pojasom
objavljenje u [28]. Svaka skripta traje 5 sati te kada dođe do kraja počinje ponovno
ispočetka i tako sve dok se ručno ne prekine. Kao što je već rečeno neke skripte
predstavljaju bolje, a neke lošije uvjete u mreži, a razlog tome je što su prijenosni
pojasevi podijeljeni s određenim faktorom (10, 20, 30, 40 i 50). Stoga je 100 videa
podjeljeno u 5 skupina po 20 različitih videa, tako da je svaka skupina kontorlirana
pomoću jedne skripte. U sljedeća dva potpoglavalja opisan je detaljan postupak
prikupljanja podataka.
4.3.1.1. Prikupljanje podataka s aplikacijske razine
Prikupljanje podataka s aplikacijske razine odvija se u pregledniku Google
Chrome u tri koraka:
1.) Uključivanje Alata za razvojne programere,
2.) Omogućavanje opcije „Show Video Stats“ na stranici Twitch.tv i pokretanje
video zapisa uživo,
3.) Pokretanje JavaScript skripte u Alatu za razvojne programere.
Navedeni koraci detaljnije su objašnjeni u nastavku. 1.) Uključivanje Alata za razvojne programere:
Potrebno je uključiti opciju alata za razvojne programere koja se aktivira u
nekoliko koraka:
1.) Opcije Google Chrome-a,
2.) Više Alata (eng. More tools),
3.) Alati za razvojne programere (eng. Developer tools).
Nakon što se alat otvorio potrebno se pozicionirati na opciju „Console“ koja nudi
mogućnost izvršavanja različitih naredbi. Slika 7 prikazuje prethodno opisan korak.
14
Slika 7 - Alati za razvojne programere
2.) Omogućavanje opcije „Show video stats“ na stranici Twitch.tv i pokretanje video
zapisa uživo:
Otvaranjem bilo kojeg video zapisa potrebno je pritisnuti na opciju „Settings“
(kotačić s desne donje strane video zapisa) nakon čega se otvara izbornik s više
opcija. Nadalje, potrebno je pritisnuti na opciju „Advanced“, a potom na „Show video
stats“ nakon čega se otvara prozorčić s dodatnim informacijama o parametrima
video zapisa (Slika 8).
Slika 8 - Statistika video zapisa uživo na Twitch.tv-u
15
3.) Pokretanje JavaScript skripte u Alatu za razvojne programere:
Nakon što su obavljena prethodna dva koraka, potrebno je pokrenuti skriptu
(Dodatak A) koja dohvaća podatke statistike video zapisa iz opcije „Show video
stats“ koja je opisana u drugom koraku. Skripta je automatizirana tako da podatke
dohvaća svake sekunde. Za svaki video potrebno je prikupiti 120 zapisa što zapravo
predstavlja 120 sekundi video zapisa jer se podaci prikupljaju svake sekunde, te
nakon toga prijeći na novi video. Slika 9 prikazuje primjer prikupljanja podataka
nakon pokretanja skripte.
Slika 9 - Primjer prikupljanja podataka iz Console-e nakon pokretanja skripte
4.3.1.2 Prikupljanje mrežnog prometa
Podaci s mrežne razine prikupljaju se na Računalu br.2 (Slika 4). Mrežni
promet se počinje prikupljati nakon pokretanja skripte u alatu tcpdump, te je skriptu
potrebno pokrenuti prije nego što se podaci s aplikacijske razine počnu prikupljati.
Podaci se na kraju spremaju u datoteku oblika .pcap (Slika 10). Također, ta
datoteka omogućuje uvid u protokole koji se koriste u gledanju video zapisa uživo,
a to su TCP na transportnom sloju i TLS koji se koristi za sigurnost, odnosno
šifiriranje.
16
Slika 10 - Mrežni promet u Wiresharku
4.3.2. Obrada prikupljanih podataka
Podaci koji su prikupljeni s aplikacijske i mrežne razine potrebno je obraditi i
pripremiti tako da se dobije skup podataka za razvijanje modela strojnog učenja
(Slika 3).
Podaci dobiveni s aplikacijske razine pohranjeni su u tekstualnu datoteku.
Svaku tekstualnu datoteku potrebno je obraditi tako da se dobiju željeni ključni
pokazatelji uspješnosti (KPIevi) video zapisa. Obrada datoteke vrši se pomoću
skripte napisane u Javi (Dodatak B). Skripta računa sljedeće KPI-eve: postotak
video zapisa prikazanog na određenoj rezoluciji (1080, 768, 720, 480, 360, 240,
160, 144), početno kašnjenje te prosjek playback rate-ova. Pošto Twitch.tv uvijek
pokušava video prikazivati na što većoj rezoluciji, za jako loše mrežne uvjete
postotak videa na najvećoj rezoluciji će biti visok jer bufferu treba dosta vremena da
se napuni te je tako početno kašnjenje na visokoj rezoluciji dosta veliko. Twitch.tv
tako funkcionira, tako da nema smisla izračunavat postotak videa na određenoj
rezoluciji i prosječni playback jer neće odavati realan dojam stvarne situacije. Stoga
će se za KPI-eve uzimati samo prosječno kašnjenje videa. Izračunati KPI-evi se
17
zajedno s timestamp-om i naslovom videa spremaju u izlaznu datoteku oblika .csv
(eng. Comma Separated Values) (Slika 11).
Slika 11 - Primjer .csv datoteke
Prikupljeni podaci koji predstavljaju značajke mrežnog prometa se dalje
trebaju obraditi tako da se pomoću njih može istrenirati model strojnog učenja.
Dakle, mrežni atributi s kojima će se predviđati KPIevi su navedeni u tablici (Tablica
2), a neki od njih zapravo prestavljaju podatke koji su dobiveni matematičkim
izračunom. Dakle, to su medijan, maksimalna vrijednost, prosječna vrijednost,
standradna devijacija i varijanca od podataka koji su učitani od strane klijenta u
periodima od jedne ili dvije sekudne. Osim podataka koji su dobiveni matematičkim
izračunom, za predviđanje će se također koristiti i broj izgubljenih segemenata i broj
resetiranja.
4.4. Strojno učenje
U prethodnim potpoglavljima opisano je kako su podaci prikupljeni i obrađeni
za strojno učenje. Strojno učenje (eng. Machine learning) je znanost koja se bavi
programiranjem računala na način da optimiziraju neki kriterij uspješnosti temeljem
podatkovnih primjera ili prethodnog iskustva [23]. Pomoću strojnog učenja želi se
na temelju viđenih podataka stvoriti model koji mora moći predvidjeti svojstva novih,
još neviđenih podataka. Odnosno, cilj strojnog učenja je izgraditi modele koji dobro
generaliziraju.
18
Postoji mnogo algoritama u strojnom učenju, no u ovom radu opisat će se i
koristiti samo tri. U nastavku su ukratko objašnjeni i opisani OneR, J48 i Random
Forest algoritmi. Ovi algoritmi su implementirani u programsku alatu Weka koji će
se koristiti za razvijanje modela u ovome radu.
1.) OneR je jednostavan algoritam učenja razvijen od strane Roberta Holtea sa
Sveučilišta Ottawa [24]. Ovaj algoritam generira skup pravila koji testiraju samo
jedan atribut. Algoritam se koristi za diskretne atribute, a glavna ideja je [25]:
for each attribute a do
for each value v from the domain of a do
Select the set of instances where a has value v.;
Let c be the most frequent class in that set.;
Add clause to rule for a: if a has value v then the class is c
end
Calculate the classification accuracy of this rule.
end
Use the rule with the highest classification accuracy.
2.) J48 je algoritam stabla odluke (eng. decision tree) koji koristi strategiju od vrha
prema dnu (eng. top-down strategy) [26]. To znači da u početku algoritam odabire
atribut kao korijenski čvor i onda stvara grane za svaku moguću vrijednost atributa.
Instance su podijeljene u podskupove, ovisno o vrijednosti atributa, i dodani kao
čvorovi na kraj odgovarajućih grana. Proces se ponovalja sve dok sve instance u
pojedinom podskupu nisu iz iste klase.
3.) Random Forest je algoritam učenja koji razvija puno stabla odluka [27]. Za
klasifikaciju nove instance, svako stablo „glasa“ za pojedinu klasu. Instanca je
označena i nazvana klasom koja je dobila najveći broj glasova.
19
5. Analiza rezultata
Predviđanje i analiza rezultata rađena je na dva skupa podataka (Slika 12):
• Skup1: početno kašnjenje je podijeljeno u dvije skupine (kratka, dugačka)
• Skup2: početno kašnjenje je podijeljeno u tri skupine (kratka, srednja i dugačka)
U prvom slučaju (Skup1) dugačka kašnjenja su ona koja su veća od 20
sekudni (plava boja) , a kratka kašnjenja su ona manja od 20 sekundi (crvena boja).
Dok u drugom slučaju (Skup2) kratka kašnjenja su ona od 0 sekudni do 10 sekundi
(modra boja), srednja od 10 do 30 sekudni (crvena boja), a dugačka su ona koja su
veća od 30 sekudni (plava boja).
Cilj je vidjeti do koje se razine ova dva skupa podatka mogu procijeniti samo
na temelju znanja kojeg su naučili pomoću odgovarajućeg algoritma. Za treniranje
na podacima koristi se „Cross-validation“ koji je inicijalno postavljen na 10, što znači
da će se znanje trenirati na 90% podataka, a da će se na preostalih 10% testirati.
Dobiveni rezultati prikazani su u tablici ispod (Tablica 2). Za svaki skup podataka i
pripradajući algoritam dobivene su sljedeće vrijednosti:
• Točnost (eng. Accuracy) – kolika je točnost testiranih podataka u
odnosu na njihovu stvarnu vrijednost.
Slika 12 - Atrubuti za procjenu u Weki
20
• Preciznost (eng. Precision)– koliko je podataka točno procijenjeno da
pripada određenoj vrijednosti (npr. kratko kašnjenje ili dugo kašnjenje)
u odnosu na to koliko je svekupno podataka procjenjeno da pripada
toj vrijednosti.
• Odziv (eng. Recall) – koliko je podataka točno procijenjeno da pripada
određenoj vrijednosti u odnosu na to koliko je stvarna količina tih
vrijednosti.
Tablica 2 - Analiza rezultata dobivenih različitim algoritmima učenja
Atributi Algoritam Odabrani mrežni atributi s kojima predviđamo Točnost
[%]
Preciznost Odziv
MOS
{kratka:s,
dugačka:l}
OneR
stDevSizeIn2sIntervalsDL
75.9259
s: 0.731
l: 0.786
s: 0.760
l: 0.759
J48
maxSizeIn2sIntervalsDL
77.7778
s: 0.882
l: 0.730
s: 0.600
l: 0.931
Random Forest
avgSizeLarger100BUL, stDevSizeIn2sIntervalsDL,
pStDevSizeIn2sIntervalsDL, stDevSizeIn1sIntervalsDL,
lostSegmentCount
82.4074
s: 0.816
l: 0.831
s: 0.800
l: 0.845
MOS
{kratka:s,
srednja:m,
dugačka:l}
OneR
medianSizeIn2sIntervalsDL
68.5185
s: 0.636
m: 0.750
l: 0.652
s: 0.560
m: 0.652
l: 0.811
J48
medianSizeIn2sIntervalsDL
70.3704
s: 0.778
m: 0.756
l: 0.633
s: 0.560
m: 0.674
l: 0.838
Random Forest
percOfUsedTransTimeDL, medianSizeIn2sIntervalsDL,
pVarSizeIn2sIntervalsDL, maxSizeIn2sIntervalsUL,
resetCount
67.5926
s: 0.778
m: 0.653
l: 0.659
s: 0.560
m: 0.696
l: 0.730
Kao što se vidi u tablici (Tablica 2) za predviđanje rezultata pomoću
određenog algoritma odabrani su različiti mrežni atributi. Baš ti mrežni atributi su
odabrani iz razloga jer uz određeni algoritam najbolje predviđaju rezultat. Tako se
vidi da uz neke algoritme ima više mrežnih atributa, a uz neke manje. U pravilu, a
21
vidi se i iz rezultata, kada ima više atributa pomoću kojih predviđamo, rezultat će biti
točniji i precizniji.
Skupovi podataka su obrađeni i testirani pomoću tri algoritma, a to su OneR,
J48 i Random Forest. Za svaki algoritam i skup podataka izračunati su točnost,
preciznost i odziv (Tablica 2). Ovi podaci nam govore do koje je razine moguće
predvidjeti podatke s aplikacijske razine pomoću podataka s mrežne razine. Vidi se
da se podaci s aplikacijske razine relativno dobro mogu procijeniti, pa se tako
točnost kreće od 67% pa sve do 82%. Isto tako se može primjetiti da je prvi skup
podataka (onaj koji samo sadrži kratka i duga kašnjenja) točnije procjenjen, nego
drugi skup podataka koji sadrži kratka, srednja i duga kašnjenja. Razlog tome je što
je lakše procijenti dva parametra, nego tri.
Točnost je zapravo srednja vrijednost preciznosti parametara. Pomoću
preciznosti se vidi koliko se točno procijenio određeni parametar, pa tako se vidi da
je za prvi skup podataka i algoritam Random Forest preciznost za parametre
najveća (81.6% za kratko kašnjenje i 83.1% za dugo kašnjenje), dok je za drugi
skup podataka preciznost najveća uz algoritam J48 (77.8% za kratko kašnjenje,
75.6% za srednje kašnjenje i 63.3% za dugo kašnjenje).
Odziv nam govori koliko je podataka točno procijenjeno da pripada određenoj
vrijednosti u odnosu na stvarnu količinu vrijednosti tih podataka. Vidi se da ovdje
postoci preciznosti variraju i kreću se od čak 50% pa sve do visokih 93%.
22
6. Zaključak
Usluge video strujanja danas čine dominantni udio ukupnog prometa u
Internetu. Najveći dio tog prometa povezan je s popularnim uslugama temeljenim
na prilagodljivom strujanju putem protokola HTTP. Jedan tip usluga video strujanja
jest i strujanje uživo, a u ovom radu sadržaj gledanih video zapisa uživo povezan je
s digitalnim igrama. Trenutno jedne od vodećih platformi u Europi i Americi za
strujanje video igara uživo su Twitch i YouTube Gaming.
Davatelji mrežnih usluga uglavnom nemaju uvid u performanse i parametre
kvalitete video tokova koji prolaze njihovom mrežom, obzirom da je promet često
kriptiran. Stoga, jedini način da se riješi taj problem jest korištenje tehnika strojnog
učenja s kojima bi se na temelju analize značajki mrežnog prometa procijenjivali
parametri koji utječu na iskustvenu kvalitetu. Dakle, cilj ovog rada je prikupljanje i
snimanje podataka sa mrežne i aplikacijske razine usluge Twitch prilikom strujanja
igara uživo kako bi se razvio model temeljen na tehnici strojnog učenja kojim bi se
testiralo do koje se mjere performanse na razini aplikacije mogu procijeniti na
temelju prometnih značajki.
Prilikom gledanja 100 različitih video zapisa uživo putem Web preglednika,
podaci s aplikacijske i mrežne razine istovremeno su prikupljani. Prikupljeni podaci
su dalje obrađeni i sinkronizirani tako da su spremni za generiranje modela strojnog
učenja. Nakon što je izabran podskup značajki mrežnog prometa, generiran je
model kojim se testiralo do koje je mjere podatke s aplikacijske razine moguće
procijeniti na temelju izabranih značajki mrežnog prometa.
Uzimajući sve dobivene rezultate u obzir, može se zaključiti da je podatke s
aplikacijske razine moguće procijeniti i klasificirati pomoću parametara s mrežne
razine u relativno velikoj točnosti (prosječno 70%) generiranjem modela strojnog
učenja.
23
7. Literatura
[1] https://www.bigfishgames.com/blog/2017-video-game-trends-and-statistics-
whos-playing-what-and-why/, zadnji pristup: 06.04.2018.
[2] https://www.twitch.tv/p/partners/faq/, zadnji pristup: 06.04.2018.
[3] https://expandedramblings.com/index.php/twitch-stats/, zadnji pristup:
06.04.2018.
[4] Integrated Multiprotocol Network Emulator/Simulator, http://www.imunes.net/,
zadnji pristup: 11.5.2018.
[5] Puljiz, Zrinka, and Miljenko Mikuc. "Imunes based distributed network
emulator." Software in Telecommunications and Computer Networks, 2006.
SoftCOM 2006. International Conference on. IEEE, 2006.
[6] https://en.wikipedia.org/wiki/Tcpdump, zadnji pristup: 11.5.2018.
[7] https://hr.wikipedia.org/wiki/JavaScript, zadnji pristup: 11.5.2018.
[8] https://commons.wikimedia.org/wiki/File:JavaScript-logo.png, zadnji pristup:
11.5.2018.
[9] Wawro, Alex (2014-08-25). "Amazon to acquire Twitch". Gamasutra. UBM plc.
zadnji pristup: 9.4.2018.
[10] https://en.wikipedia.org/wiki/Twitch.tv, zadnji pristup: 9.4.2018.
[11] https://www.twitch.tv/, zadnji pristup: 11.5.2018.
[12] Definitions of terms related to quality of service , rujan 2008.
[13] https://www.cisco.com/c/en/us/solutions/collateral/service-provider/visual-
networking-index-vni/mobile-white-paper-c11-520862.html, zadnji pristup:
21.06.2018.
[14] Sebastian Möller, Patrick Le Callet and Andrew Perkis, editors. Qualinet White
Paper on Definitions of Quality of Experience. Technical Report Version 1.2.
European Network on Quality of Experience in Multimedia Systems and Services,
2013.
[15] International Telecommunication Union - Telecommunications Sector (ITU-T)
Recommendation P.800.1, 2006. Mean Opinion Score (MOS) Terminology, ožujak
2003.
[16] http://www.albedotelecom.com/pages/fieldtools/src/netshark.php, zadnji
pristup: 21.05.2018.
[17] https://www.tcpdump.org/, zadnji pristup: 21.05.2018.
24
[18] https://www.javascript.com/, zadnji pristup: 21.05.2018.
[19] https://www.cs.waikato.ac.nz/ml/weka/, zadnji pristup: 21.05.2018.
[20] Seufert, Michael, et al. "A survey on quality of experience of HTTP adaptive
streaming." IEEE Communications Surveys & Tutorials 17.1 (2015): 469-492.
[21] https://live.fb.com/, zadnji pristup: 26.05.2018.
[22] https://help.instagram.com, zadnji pristup: 26.05.2018.
[23] Bojana Dalbelo Bašić i Jan Šnajder, Strojno učenje, FER, Kolegij Umjetna
inteligencija, akademska godina 2016./2017.
[24] R.C. Holte. Very simple classification rules perform well on most commonly
used datasets. Machine Learning, 11:63–91, 1993.
[25] Craig G Nevill-Manning, Geoffrey Holmes, and Ian H Witten. The development
of Holte’s 1R classifier. In Second New Zealand International Two-Stream
Conference on Artificial Neural Networks and Expert Systems, 1995.
Proceedings., pages 239–242. IEEE, 1995.
[26] Data Mining with Weka: Decision trees, URL
https://www.youtube.com/watch?v=l7R9NHqvI0Y.
[27] Leo Breiman and Adele Cutler. Random Forests. URL
https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm, zadnji
pristup: 26.05.2018.
[28] J. van der Hooft, et al., “HTTP/2-Based Adaptive Streaming of HEVC Video
Over 4G/LTE Networks,” IEEE Comm. Letters, vol. 20, no. 11, pp. 2177–2180,
2016.
25
8. Sažetak
Strujanje video igara uživo putem platforme Twitch.tv jedna je od
najpopularnijih aktivnosti na Internetu danas. Stoga je bitno da ta aktivnost i usluga
budu što bolji. Često se zna dogoditi da te usluge imaju problema, odnosno da je
iskustvena kvaliteta korisnika koji gleda video zapis uživo loša. Ti podaci koji utječu
na iskustvenu kvalitetu su u mrežnom prometu kripitirani, te ne postoji mogućnost
njihovog pregleda u mreži, već samo na aplikacijskoj razini. Stoga, u ovom radu je
u laboratorijskom okruženju ispitano do koje je mjere podatke s aplikacijske razine
moguće procijeniti na temelju podataka s mrežne razine pomoću metoda strojnog
učenja. Dobiveni rezultati govore da je podatke s aplikacijske razine moguće
procijeniti u relativno velikoj točnosti pomoću određenih mrežnih atributa
generiranjem modela strojnog učenja.
Ključne riječi: Twitch.tv, iskustvena kvaliteta, strujanje igara uživo, strojno učenje
26
9. Summary
Nowadays, watching live video gaming using the Twitch.tv platform is one of
the most popular activities on the Internet. For that reason, it is important that
services on this platform are delivered on a high professional level. Often these
services experience difficulties. In other words, the Quality of Experience (QoE) of
the user watching live video can be low. Since traffic is encrypted, it is not possible
to directly detect problems related to KPIs by inspecting application-level packet
headers. The aim of this study was to investigate whether it is possible to estimate
KPIs only from analyzing encrypted traffic using machine learning techniques. As a
result of the analysis, classification accuracy was found to be about 70%.
Key words: Twitch.tv, Quality of Experience, machine learning, live video gaming
27
10. Dodaci
10.1 Dodatak: Popis Slika
Slika 1 - Prilgodljivo strujanje putem protokola HTTP .............................................. 4
Slika 2 - Twitch.tv potrebne postavke [11] ............................................................... 6
Slika 3 - Prikupljanje i priprema podataka ............................................................... 9
Slika 4 - Laboratorijsko okruženje ......................................................................... 10
Slika 5 - Shema u IMUNES-u koja se koristi tijekom prikupljanja podataka .......... 11
Slika 6 - Weka programski alat .............................................................................. 12
Slika 7 - Alati za razvojne programere ................................................................... 14
Slika 8 - Statistika video zapisa uživo na Twitch.tv-u ............................................ 14
Slika 9 - Primjer prikupljanja podataka iz Console-e nakon pokretanja skripte...... 15
Slika 10 - Mrežni promet u Wiresharku ................................................................. 16
Slika 11 - Primjer .csv datoteke ............................................................................. 17
Slika 12 - Atrubuti za procjenu u Weki ................................................................... 19
28
10.2 Dodatak: Popis Tablica
Tablica 1 - MOS vrijednosti ..................................................................................... 8
Tablica 2 - Analiza rezultata dobivenih različitim algoritmima učenja .................... 20
29
10.3 Dodatak A: Skripta za prikupljanje podataka s aplikacijske razine
window.setInterval(function(){
console.log(new Date().getTime());
console.log(document.getElementsByClassName("tw-ellipsis tw-mg-b-05")[0].innerText);
console.log(document.getElementsByClassName("pl-stats-list js-playback-stats")[0].innerText);
}, 1000);
10.4 Dodatak B: Skripta za parsiranje podataka s aplikacijske razine
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; public class Skripta { public static class Data{ String timestamp; String title; int initialDelay; float perc1080; float perc900; float perc864; float perc810; float perc768; float perc720; float perc480; float perc360; float perc240; float perc160; float perc144; float avgBitRate; int id; } public static void main(String[] args) throws IOException {
30
BufferedReader br = new BufferedReader(new FileReader("div50.txt")); PrintWriter pw = new PrintWriter(new File("id_div50.csv")); List<Data> lista = new ArrayList<>(); String line = null; String timestamp = null; String title = null; int initialDelay = 0; float perc1080 = 0; float perc900 = 0; float perc864 = 0; float perc810 = 0; float perc768 = 0; float perc720 = 0; float perc480 = 0; float perc360 = 0; float perc240 = 0; float perc160 = 0; float perc144 = 0; float avgBitRate = 0; float perc0 = 0; boolean isInitial = true; int id = 0; String savedTitle = null; int counter = 0; while((line = br.readLine()) != null) { if(line.isEmpty()) { counter++; continue; } if(line.startsWith("VM92:5")) { continue; } if (counter >= 120) { savedTitle = title; Data data = new Data(); data.timestamp = timestamp; data.title = title; data.initialDelay = initialDelay; data.perc1080 = (float) perc1080/(120-initialDelay); data.perc900 = (float) perc900/(120-initialDelay);
31
data.perc864 = (float) perc864/(120 - initialDelay); data.perc810 = (float) perc810/(120 - initialDelay); data.perc768 = (float) perc768/(120-initialDelay); data.perc720 = (float) perc720/(120-initialDelay); data.perc480 = (float) perc480/(120-initialDelay); data.perc360 = (float) perc360/(120-initialDelay); data.perc240 = (float) perc240/(120-initialDelay); data.perc160 = (float) perc160/(120-initialDelay); data.perc144 = (float) perc144/(120-initialDelay); data.avgBitRate = (float) avgBitRate/120; data.id = id; timestamp = null; title = null; initialDelay = 0; perc1080 = 0; perc900 = 0; perc864 = 0; perc810 = 0; perc768 = 0; perc720 = 0; perc480 = 0; perc360 = 0; perc240 = 0; perc160 = 0; perc144 = 0; avgBitRate = 0; perc0= 0; isInitial = true; id = 0; lista.add(data); counter = 0; } String tempTimestamp; if(line.startsWith("VM92:3") && counter <= 0) { String[] temp = line.split("\\s+"); timestamp = temp[1].trim(); while((line = br.readLine().trim()) != null) { if (line.startsWith("VM92:3")) { temp = line.split("\\s+"); timestamp = temp[1].trim(); continue; } else { break;
32
} } String[] temp2 = line.split("\\s+"); if(temp2.length < 2) { while((line = br.readLine().trim()) != null) { if(line.isEmpty()) break; } continue; } title = line.substring(9, line.length()).trim(); title = title.replace(",", "a"); if(savedTitle != null) { if(savedTitle.compareTo(title) == 0) { while((line = br.readLine().trim()) != null) { if(line.isEmpty()) break; } continue; } } continue; } else if(line.startsWith("VM92:3") && counter > 0 && counter < 120) { String[] temp = line.split("\\s+"); tempTimestamp = temp[1].trim(); while((line = br.readLine().trim()) != null) { if (line.startsWith("VM92:3")) { temp = line.split("\\s+"); tempTimestamp = temp[1].trim(); continue; } else { break; } } String[] temp2 = line.split("\\s+"); if(temp2.length < 2) continue; String tempTitle = line.substring(9, line.length()).trim(); tempTitle = tempTitle.replace(",", "a"); if(tempTitle.compareTo(title) != 0) { counter = 1; timestamp = tempTimestamp; title = tempTitle; initialDelay = 0;
33
perc1080 = 0; perc900 = 0; perc864 = 0; perc810 = 0; perc768 = 0; perc720 = 0; perc480 = 0; perc360 = 0; perc240 = 0; perc160 = 0; perc144 = 0; avgBitRate = 0; id = 0; } continue; } if(line.startsWith("Video")) { line = br.readLine(); String[] a = line.split("x"); int res = Integer.parseInt(a[1]); if(res == 1080) perc1080++; else if(res == 900) perc900++; else if(res == 864) perc864++; else if(res == 810) perc810++; else if(res == 768) perc768++; else if(res == 720) perc720++; else if(res == 480) perc480++; else if(res == 360) perc360++; else if(res == 240) perc240++; else if (res == 160) perc160++; else if (res == 144) perc144++; else if(res == 0) initialDelay++; else System.out.println(res); continue;
34
} if(line.startsWith("Playback")) { line = br.readLine(); avgBitRate += Float.parseFloat(line.split("\\s+")[0]); continue; } if (line.startsWith("Latency")){ line = br.readLine(); String[] t = line.split("\\s+"); float a = Float.parseFloat(t[0]); if(a == 0) id++; } } StringBuilder sb = new StringBuilder(); for(Data d : lista) { sb.append(d.timestamp + "," + d.title + "," + d.id + "\n"); } pw.write(sb.toString()); pw.close(); System.out.println("done."); } }