[TOC] # Testy PRET Wszystkie materiały 1920x1080 @ 24fps ## Parametry * `-bt` – CONVERT_BITRATE_TOLERANCE – tolerancja odchylenia od ustawionego bitrate * `-b:v` – DEFAULT_BITRATE – bitrate video * `-preset` – CONVERT_PRESET – preset, dotyczy głównie h264 i 265 * `-vcodec` – CONVERT_VCODEC – kodek video * `-bufsize` – CONVERT_BUFSIZE – rozmiar bufora do estymacji bitrate * `?cbr` – CONVERT_CONSTANT_BITRATE – minrate = maxrate = bitrate w ffmpeg ## Pliki - mcslogo - hyundai - s20 - s10 - woda - tapeta ### Pobieranie z KONW http://31.186.83.4:8096/media/`nazwa ustawień konw`_`nazwa pliku`.ts http://31.186.83.4:8096/media/K_hevc_1_woda.ts ## Protokoły ### UDP Dwie pierwsze tury testów były przeprowadzone na protokole `udp`. FFMPEG nadaje `-f mpegts udp://239.255.12.42:5001`, ffplay odbiera `udp://239.255.12.42:5001`. ### SAP (RTP) Począwszy of trzciej tury testów protokołem jest `sap` (strumieniowanie `rtp`). Do `RTP` potrzeba dodatkowego portokołu `RTCP`, który standardowo jest na porcie o jeden wyższym. Nie udało się zmusić ffmpega do pracy na jednym porcie, czyli w trybie `rtcp-mux`. Dodatkowo `RTP` trzeba rozgłosić zapomocą `SDP`, np. w postaci pliku (nieakceptowalne) albo protokołem `SAP` (użyte). Reasumując w tej chwili aż trzy porty dotyczą jednego strumienia (dla przykładu kanał 1): - 239.255.12.42:5010 (RTC) - 239.255.12.42:5011 (RTPC) - 224.2.127.254:5001 (SAP), *adres domyślny* **TODO:** napisać więcej o RTP. FFMPEG nadaje `-f sap 'sap://239.255.12.42:5010?announce_port=5001'`, ffplay odbiera `sap://:5001`. # Pierwsza tura testów ## KONW (konfiguracje konwertera) | Nazwa | -bt | -b:v | -preset | -vcodec | -bufsize | ?cbr | | -------- | ----- | ----- | --------- | ------- | -------- | ---- | | K_h264_1 | 500k | 4M | veryslow | h264 | 500k | 1 | | K_h264_2 | 500k | 1M | slow | h264 | 500k | 0 | | K_h264_3 | 500k | 2M | slow | h264 | 500k | 0 | | K_hevc_1 | 500k | 4M | veryslow | hevc | 500k | 0 | | K_hevc_2 | 500k | 1M | veryslow | hevc | 500k | 0 | ## PRET – Streamer (ffmpeg) | Nazwa | net | -pkt_size | -formatprobesize | -probesize | codec | | -------- | ----- | ----- | ----- | ----- | ----- | | S_1 | multicast | 1316 | 3k | 5k | copy | | S_2 | multicast | 1888 | 3k | 5k | copy | | S_3 | multicast | 1316 | 3k | 5k | hevc, h264 | Od trzeciego testu wysyłane dwa kanały (czyli 2x większy ruch sieciowy). **UWAGA** Każdy `ffplay` zajmuje ~190% procesora (w tym podgląd)! ### S_1 `ffmpeg -hide_banner -re -f mpegts -threads 1 -formatprobesize 3k -probesize 5k -i pipe:0 -c copy -fflags +igndts+genpts -f mpegts -tune zerolatency -pkt_size 1316 -f mpegts udp://239.255.12.42:5001 -progress unix:///tmp/tmpvyl8_tso/progress.sock` ### S_2 Zmniana `pkt_size` nie wniosła żadnej zmainy w żadnym teście. `ffmpeg -hide_banner -re -f mpegts -threads 1 -formatprobesize 3k -probesize 5k -nostats -i pipe:0 -c copy -fflags +igndts+genpts -f mpegts -tune zerolatency -pkt_size 1880 -f mpegts udp://239.255.12.42:5001 -progress unix:///tmp/tmpn7ay180o/progress.sock` ### S_3 Rekodowanie w locie (ultrafast). Dla h265 (hevc): `ffmpeg -hide_banner -re -f mpegts -threads 1 -formatprobesize 3k -probesize 5k -nostats -i pipe:0 -vcodec hevc -preset ultrafast -an -fflags +igndts+genpts -f mpegts -tune zerolatency -pkt_size 1316 -f mpegts udp://239.255.12.42:5001 -progress unix:///tmp/tmp2qfis2e6/progress.sock` Dla h264: `ffmpeg -hide_banner -re -f mpegts -threads 1 -formatprobesize 3k -probesize 5k -nostats -i pipe:0 -vcodec libx264 -preset ultrafast -an -fflags +igndts+gepnts -f mpegts -tune zerolatency -pkt_size 1316 -f mpegts udp://239.255.12.42:5001 -progress unix:///tmp/tmp2qfis2e6/progress.sock` Efekt poniżej krytyki. ## PRET – Player (ffplay) Odtwarzacz jest wołany (kanał pierwszy, drugi analogicznie): `/usr/bin/ffplay -window_title 'Channel 1' -fflags nobuffer -noinfbuf -fs udp://@239.255.12.42:5001` ### Monitory 1. `Intel(R) Celeron(R) CPU J1900 @ 1.99GHz` 2. `AMD E-350D APU with Radeon(tm) HD Graphics` Monitor 2 na początku zawierał odtwarzacz opartą o VLC (przez pierwsze dwa testy) `multimedia-display_1.0.1_i386.deb`. ## Obserwacje Przyjmujemy skalę 10 punktową (1 - nagorzej, 10 - idealnie) ### K_h264_1 + S_1 * Dla reklam dynamicznych sypiące się piksele. ocena - 5 pkt. (jako baza to kolejnych testów) * reklama statyczna wygląda prawidłowo. * monitor 2 - VLC, nie brany pod uwagę do wyników ### K_hevc_1 + S_1 * znaczne pogorszenie jakości materiałów wideo, duża ilość artefaktów ocena - 2 pkt. * monitor 2 - VLC, nie brany pod uwagę do wyników ### K_hevc_2 + S_1 * bardzo dobra jakość materiału, brak błedów w odtwarzaniu na monitorze 1, ocena - 10 pkt. * monitor 2, nie dawał sobie rady i materiał się zacinał. ocena - 2 pkt. ### K_h264_2 + S_1 (aktualnie ustawione w KONW) * pogorszenie jakości odtwarzanych materiałów (widoczne piksele) materiał odtwarza się płynnie na obu monitorach ocena - 6 pkt. ### K_h264_3 + S_1 * poprawa jakości w stosunku do poprzedniego testu (mniej pikseli), jednak pojawiły się artefakty ocena - 3 pkt. # Druga tura testów Testy zostały przprowadzone dla różnych nastaw, przy czym, nie wszystkie kombinacje zostały sprawdzone. FPS 24. 1. Przepływności: - 300k (*testowane w drugiej części*) - 400k (*testowane w drugiej części*) - 500k - 600k (*testowane w drugiej części*) - 700k (*testowane w drugiej części*) - 800k - 1M - 2M - 4M 2. Rozmiarów: - 1920x1080 (Full HD) - 1280x720 (HD Ready) - 854x480 (WVGA) 3. Kodeków: - H.264 - HEVC (H.265) W repozytorium PRET-a jest skrypt `./scripts/pret-testing.sh` ułatwiający poniższe testy (pobiera pliki, zmienia ustawienia, pozwala restartować PRET-a i ffplay). ## Obserwacje 1. (hevc,1280x720,1M) - bardzo dobra jakość obrazu, obraz odtwarzany płynnie, bez zacięć, podczas jednego z przebiegów playlisty przez krótką chwilę dla pliku woda widoczne artefakty – kanał 1, kanał 2 (sytuacja powtarza się bardzo nieregularnie) Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 534536 94280 904520 0 0 0 0 864 1363 19 2 79 0 0 (20%) • 3 0 0 925736 72904 586056 0 0 0 0 1346 1715 55 2 43 0 0 (57%) ``` 2. (hevc,1280x720,2M) - jakość obrazu bardzo dobra, obraz odtwarzany płynnie, bez zacięć, często zdarzają się artefakty na obu monitorach. Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 534576 94280 904928 0 0 0 0 1010 1458 21 3 75 0 0 (25%) • 1 0 0 923284 73136 587000 0 0 0 0 1673 1872 95 3 2 0 0 (98%) ``` 3. (hevc,1280x720,4M) - jakość obrazu bardzo dobra, kanał 1 obraz odtwarzany płynnie, na kanale 2 zacięcia odtwarzanego materiału (hyundai), bardzo częste artefakty na obu urządzeniach Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 530948 94300 905772 0 0 0 0 1444 1667 33 5 62 0 0 (38%) • 4 0 0 905736 73552 588652 0 0 0 0 1867 2059 96 4 0 0 0 (100%) ``` 4. (hevc,1280x720,800k) - bardzo dobra jakość obrazu, obraz odtwarzany płynnie, bez zacięć, bez artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 533104 94316 906348 0 0 0 0 882 1224 15 3 82 0 0 (18%) • 0 0 0 918688 73680 589384 0 0 0 0 1228 1694 46 4 50 0 0 (50%) ``` 5. (hevc,1280x720,500k) - dobra jakość obrazu, obraz odtwarzany płynnie, bez zacięć, bez artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 2 0 0 532076 94364 907412 0 0 0 0 811 1245 15 3 82 0 0 (18%) • 2 0 0 916292 74280 592328 0 0 0 0 1014 1614 44 3 53 0 0 (47%) ``` 6. (hevc,1920x1080,500k) - bardzo dobra jakość obrazu, obraz odtwarzany płynnie na kanale 1, kanał 2 zacina się, bez artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 3 0 0 488452 94376 909240 0 0 0 0 1068 1203 36 4 60 0 0 (40%) • 3 0 0 882088 74728 594292 0 0 0 0 992 1405 98 2 0 0 0 (100%) ``` 7. (hevc,1920x1080,800k) - bardzo dobra jakość obrazu, obraz odtwarzany płynnie na kanale 1, kanał 2 zacina się notorycznie, sporadyczne artefakty kanał 1 (jednorazowy przypadek przy n przebiegu) Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 2 0 0 490992 94420 909532 0 0 0 0 858 1279 23 3 73 0 0 (27%) • 3 0 0 868456 75292 596712 0 0 0 0 1092 1323 99 1 0 0 0 (100%) ``` 8. (hevc,1920x1080,1M) - bardzo dobra jakość obrazu, obraz odtwarzany płynnie na kanale 1, kanał 2 zacina się notorycznie, brak artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 493964 94460 909572 0 0 0 0 1013 1273 31 4 65 0 0 (35%) • 2 0 0 866304 75456 597848 0 0 0 0 1181 1339 99 1 0 0 0 (100%) ``` 9. (hevc,854x480,1M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, brak artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 545432 94468 906936 0 0 0 0 814 1315 13 2 85 0 0 (15%) • 1 0 0 908012 75584 598408 0 0 0 0 1195 1563 43 3 54 0 0 (45%) ``` 10. (hevc,854x480,2M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, brak artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 0 0 0 540464 94476 907004 0 0 0 404 946 1579 13 2 85 0 0 (15%) • 0 0 0 922268 75844 599548 0 0 0 0 1579 1845 36 3 61 0 0 (39%) ``` 11. (hevc,854x480,4M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, duża liczba artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 0 0 0 541532 94476 907060 0 0 0 0 589 1243 7 2 92 0 0 (8%) • 1 0 0 919488 75900 599900 0 0 0 0 1181 1622 22 4 74 0 0 (26%) ``` 12. (h264,854x480,4M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, duża liczba artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 0 0 0 544404 94476 907224 0 0 0 0 750 1364 6 2 92 0 0 (8%) • 0 0 0 923476 75972 600404 0 0 0 36 1451 1955 18 3 80 0 0 (20%) ``` 13. (h264,854x480,2M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, brak artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 549288 94500 907544 0 0 0 0 547 1260 4 1 95 0 0 (5%) • 1 0 0 921928 76080 600952 0 0 0 0 1878 2150 21 4 76 0 0 (24%) ``` 14. (h264,854x480,1M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, brak artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 548684 94512 907620 0 0 0 80 751 1376 6 2 92 0 0 (8%) • 0 0 0 921124 76272 601868 0 0 0 0 1231 1823 14 5 82 0 0 (18%) ``` 15. (h264,854x480,800k) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, brak artefaktów Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 0 0 0 546612 94532 907708 0 0 0 0 582 1309 4 1 95 0 0 (5%) • 1 0 0 919204 76620 603484 0 0 0 0 1161 1658 13 3 84 0 0 (16%) ``` 16. (h264,1280x720,800k) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, brak artefaktów, w nielicznych, dynamicznych scenach widoczne piksele Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 0 0 0 536160 94536 908724 0 0 0 0 798 1353 10 2 87 0 0 (13%) • 2 0 0 905428 76684 603812 0 0 0 0 1211 1775 24 4 73 0 0 (27%) ``` 17. (h264,1280x720,1M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, brak artefaktów, w nielicznych, dynamicznych scenach widoczne piksele Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 539880 94540 908792 0 0 0 0 803 1298 10 2 88 0 0 (12%) • 2 0 0 904208 76812 604384 0 0 0 0 1286 1795 27 3 70 0 0 (30%) ``` 18. (h264,1280x720,2M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, na obu monitorach zdarzają się artefakty, w nielicznych, dynamicznych scenach widoczne piksele Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 527132 94540 908780 0 0 0 0 922 1462 10 2 87 0 0 (13%) • 0 0 0 899580 76900 604828 0 0 0 0 1655 1913 29 3 69 0 0 (31%) ``` 19. (h264,1920x1080,2M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, po kilku przebiegach na obu monitorach zdarzają się artefakty, Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 2 0 0 501272 94544 902388 0 0 0 52 1009 1412 16 3 81 0 0 (19%) • 0 0 0 871964 76988 605480 0 0 0 56 1401 1636 51 2 47 0 0 (53%) ``` 20. (h264,1920x1080,1M) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, na obu monitorach zdarzają się artefakty, w dynamicznych scenach widoczne piksele Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 502744 94552 910732 0 0 0 76 948 1361 16 4 80 0 0 (20%) • 1 0 0 874604 77220 606544 0 0 0 0 1266 1613 47 2 51 0 0 (49%) ``` 21. (h264,1920x1080,800k) - dobra jakość obrazu, obraz odtwarzany płynnie, brak zacięć, na obu monitorach zdarzają się artefakty, w dynamicznych scenach widoczne piksele Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 1 0 0 500032 94552 910888 0 0 0 44 945 1453 17 3 80 0 0 (20%) • 2 0 0 865300 77296 607016 0 0 0 0 1198 1730 40 2 59 0 0 (60%) ``` 22. (h264,1920x1080,500k) - słaba jakość obrazu, wszechobecna pikseloza Obciążenie monitorów: ``` r b swpd free buff cache si so bi bo in cs us sy id wa st • 0 0 0 507488 94552 911000 0 0 0 0 847 1333 15 3 82 0 0 (18%) • 0 0 0 879936 77376 607240 0 0 0 0 1214 1744 38 3 59 0 0 (41%) ``` ### Podsumowanie Wychodzi z badań, że konwerter powinien być ustawiony na `hevc`, `1280x720`, 800k. Po dodatkowych testach przeprływnaiość została obnizona do `600k`. Na takie parametry został ustawieny konwerter. Niemniej po kilku, kilkunastu godzinach zaczęły pojawiać się artefakty, szczególnie na statycznych planszach. # Trzecia tura testów W tym miejscu został zmieniony protoków z `udp` na `sap`, czyli `RTP` rozgłaszany przez `SAP`. Testy polegały na podmianie statycznych obrazów bez restartu PRET-a. ![video frames](https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/I_P_and_B_frames.svg/500px-I_P_and_B_frames.svg.png) Obraz z konwertera miał następujący układ ramek. Ramka `I` o wielkości 43790. ``` IBBBBpBBBBpBBBBpBBBpBBBBpBpppBBpppBBpBBBBppBBpBB BBpBBBBpBBBBpBpBBBBppBBpppBBpppBBpBBBBpBpBBBBpBB BBpBBBBppBBpBBBBpBpBBBBp ``` Wymuszenie wiezkszej liczby kluczowych ramek `I` (`-g 48`, czyli co 2 s) spowododowało, że pierwsza 2s planszy było OK, ale potem były artefakty. Ramki `I` o wielkościach 43865, 56552, 56485. ``` IBBBBpBBBBpBBBBpBBBpBBBBpBpppBBpppBBpBBBBppBBpBB IBBBBpBBBBppBBpBBBBpBBBBpBpppBBpBBBBppBBpppBBpBB IBBBBppBBpBBBBpBBBBpBBBp ``` Na koniec obraz został w ogóle pozbawiony ramek dwukierunkowych `B` (`-bf 0`). Przez chwilę wydawało się, że jest lepiej, ale artefakty wróciły. Ramka `I` o wielkości 43399. ``` Ippppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppp ``` Układ ramek można uzyskać za pomocą: ```bash ffprobe -hide_banner -show_frames FILE.ts > /tmp/ffprobe.log 2>&1 echo $(sed -nE '/^pict_type/ {s/.*=//; p; }' /tmp/ffprobe.log) \ | sed -e 's/ //g' -e 's/P/p/g' ``` # Czwarta tura testów Na koniec zostały uruchomione różne testy nie wymagające zaangażowania. ### PRET ze statyczną planszą (2 kanały) Dość szybko zaczęły się artefakty (po niecałych 10 min). ### FFMPEG ze statyczną planszą (2 kanały) Jak wyżej, ale bez PRET-a. Polecenie uruchomione z ręki: ```bash while :; do cat ../media/e03cf015\:wrzeisen-2020-tapeta-panorama-auto_0002255.ts done | ffmpeg -hide_banner -re -f mpegts -threads 1 -formatprobesize 3k \ -probesize 5k -nostats -i pipe:0 -c copy -fflags +genpts -tune zerolatency \ -pkt_size 1316 -f sap 'sap://239.255.12.42:5010?announce_port=5001' ``` Analogicznie na drugim kanale. Testy własnie trwają, od 7 godzin nie ma artefaktów. ... # Różności Narzędzie do tabeli w ViM: https://github.com/dhruvasagar/vim-table-mode