Obrazové artefakty ve streamu

Hamparle

  • ****
  • 360
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Obrazové artefakty ve streamu
« kdy: 21. 11. 2020, 13:27:23 »
Nevěděli byste, co poradit, když mi kamery při přenosu streamu z wifi "kostičkuje"? I při bitrate 1.5Mbps (mírně ale přesto) Při víc jak 4Mbps to je už celkem znatelné. Připojení je 802.11n (tedy 72Mbps, i při polovině reálné propustnosti 40 Mbps je tohle zlomek), ...

Problém může být na víc úrovních, chyby ve vysílání wifi, chyby při přijetí, divné zpracování UDP stacku (různé buffery).

 Kamera vysílá pakety 1328bajtové na UDP. Rozumím, že UDP může být chybové, ale přece nemůže být normální takhle chybový "uživatelský zážitek". Díval jsem se do wiresharku při IO graph a Unit of Interval 10ms, tam se dá vypozorovat, že pakety chodí shluknuté třeba po 20 paketech, pak je mezera....(takhle to asi nic neřekne bez konkrétního obrázku, ale myslím, že to problém není, možné). Navíc i když nastavím bitrate 18Mbps, vidím v wiresharku, že přichází 18Mbps

Problém  je s každou wifi kartou...

Kód: [Vybrat]
C:\Users\Lukas>ffmpeg -v debug  -fflags nobuffer -f mpegts -i udp://10.5.5.141:8
554?pkt_size=1330&buffer_size=13200 -f mpegts -c:v copy -c:a copy  udp://localho
st:10000

Samozřejmě ffmpeg mohu nahradit příkazem ffplay rovnou, to je jen kosmetické, stejně tak jsem to zkoušel bez ?
(pkt_size=xxx&buffer_size= a nobuffer)

Zkoušel jsem se dívat i sem https://ffmpeg.org/ffmpeg-protocols.html , ale nevím, co by třeba zde konrétně bylo jak nastavit.

Kód: [Vybrat]
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1903902
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1906905
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1909908
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1912911
[mpegts @ 00000000001203c0] Continuity check failed for pid 4113 expected 1 got
2
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1915914
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1918917
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1921920
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1924923
[NULL @ 0000000000136100] ct_type:1 pic_struct:0
[mpegts @ 00000000001203c0] invalid dts/pts combination 1927926
« Poslední změna: 21. 11. 2020, 13:36:27 od Petr Krčmář »


Re:Obrazové artefakty ve streamu
« Odpověď #1 kdy: 21. 11. 2020, 13:49:40 »
zkus víc zlepšit wifi signál předevšim jestli to je jakoby nějaká venkovní hlídací kamera někde dál vod domu narafičená na šmírování zlejch sousedů ;D ;D ;) ;)
koukni jestli kamerka neumí taky i nějaký jiný jinak kódovaný streamy věčinou toho uměj víc :) ;)
lidi postižený environmentálním žalem hele choděj za ekopsycholožkama hele 🤡 💆 🤡 💆

Hamparle

  • ****
  • 360
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Re:Obrazové artefakty ve streamu
« Odpověď #2 kdy: 21. 11. 2020, 23:03:38 »
Ne ne, bohužel takovéhle triviální možné příčiny jsem vyloučila, je jedno jestli kamerku dám metr od kompu nebo 4 metry, furt ,ukazuje Windows netsh wlan show net mode=bssid 99% Síla signálu.

Jediný co umí je nastavit bitrate s přesností 1B/s a výstupní rozlišení. FPS a crop si bere z momentálního nastavení, které vidím na live view dotykovém displeji. Dokonce je jedno jestli je kamera v režimu photo, timelapse nebo série, prostě stream funguje jako náhled.

Zkrátka nepřišla jsem na nějaké faktory, který by nějak míru artefaktů ovlivňovaly, ffmpeg furt sype ty varovné výpisy dts/pts (snad jen na vyjímku bitrate: s bitrate do 1Mbps to je vizuálně  OK,  kolem 2000000 bitů za sekundu to je vidět, se za3Mbps to začne být horší. Ale není to tak že by byl obraz s rostoucím bitrate hůř rozeznatelný, spíš artefakty jsou jemnější.)


No a vzhledem k tomu, že se ukazují  ty chyby v ffmpeg, tak si myslím, že tam bude problém, stream na počítači je správný a jakési shlukování paketů by neměla být překážka. Ale je to jen nepodložený odhad a problém je na nižší vrstvě

Mám pocit, že je to třeba nějaká odchýlený implementace H264/AVC, případně že by to spravil nějaký neznámý parametr pro dekodér


Doporučíte nějaký program, který by dokázal prohlédnou udp Mpeg4ts stream, aniž by využíval ffmpeg(knihovny)?
Co znamenají ty chyby ve výstupu?

Přijdeš mi permanentně pod vlivem nějakých energetizérů.


Důležitá věc: AUDIO je OK naprosto
« Poslední změna: 21. 11. 2020, 23:06:25 od Hamparle »

Re:Obrazové artefakty ve streamu
« Odpověď #3 kdy: 21. 11. 2020, 23:43:21 »
Dá se ta kamera připojit drátem?
Zkus chytit stream tcpdumpem/wiresharkem do souboru a zkus přehrát - třeba s vlc.

RDa

  • *****
  • 2 465
    • Zobrazit profil
    • E-mail
Re:Obrazové artefakty ve streamu
« Odpověď #4 kdy: 22. 11. 2020, 02:33:34 »
UDP + WIFI = muzes s tim delat co chces, to nikdy nepojede. To je jak prodavat vodu v cedniku.
Jestli to neumi TCP, nebo wired spojeni tak vyhodit ten kram.


Hamparle

  • ****
  • 360
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Re:Obrazové artefakty ve streamu
« Odpověď #5 kdy: 22. 11. 2020, 14:11:52 »
Jedině přes HDMI grabber, ten ani nemám. Navíc nevím ,jestli by smartphone přes otg redukci uměl připojit HDMI grabber, jestli by stačila přenosová rychlost a vůbec celý tento ansámbl s drátem by snižoval komfort a mobilitu. Tudy cesta nevede. To jsme se dostali někam na způsob baterky na podvozku


Zde jsem vyzkoušel """radu""" upgradovat ne verzi vyšší než 4.2.2.

Výsledek: Nefunguje to vůbec
Kód: [Vybrat]
ffplay -v debug (-flags nobuffer) -f mpegts -codec:v  -i "udp://9.5.0.0:8554(?pkt_size/buffersize....)"

ffplay version 4.3.1-2020-11-08-full_build-www.gyan.dev Copyright (c) 2003-2020 the FFmpeg developers

Initialized direct3d renderer.
[mpegts @ 000000d8b836a400] Opening 'udp://9.5.0.0:8554' for reading
[udp @ 000000d8b836aa40] No default whitelist set
[udp @ 000000d8b836aa40] end receive buffer size reported is 393216
[mpegts @ 000000d8b836a400] Unable to seek back to the start
[mpegts @ 000000d8b836a400] stream=0 stream_type=1b pid=1011 prog_reg_desc=
[mpegts @ 000000d8b836a400] stream=1 stream_type=f pid=1100 prog_reg_desc=
[mpegts @ 000000d8b836a400] stream=2 stream_type=80 pid=200 prog_reg_desc=
[mpegts @ 000000d8b836a400] Unable to seek back to the start
[mpegts @ 000000d8b836a400] Before avformat_find_stream_info() pos: 1643124 bytes read:1644064 seeks:0 nb_streams:3
[mpegts @ 000000d8b836a400] parser not found for codec none, packets or times may be invalid.
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 1 got 6
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 13 got 9
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 0 got 5
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 12 got 1
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 7 got 5

^...asi 300x

[mpegts @ 000000d8b836a400] Packet corrupt (stream = 0, dts = 0).

.... Continuity....


[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 1 got 0
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 14 got 15
[mpegts @ 000000d8b836a400] Packet corrupt (stream = 0, dts = 225225).
[h264 @ 000000d8b83a0d00] ct_type:1 pic_struct:0
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 9(AUD), nal_ref_idc: 0
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 7(SPS), nal_ref_idc: 1
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 8(PPS), nal_ref_idc: 1
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 6(SEI), nal_ref_idc: 0
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 5(IDR), nal_ref_idc: 1
[h264 @ 000000d8b83a0d00] nal_unit_type: 9(AUD), nal_ref_idc: 0
[h264 @ 000000d8b83a0d00] nal_unit_type: 7(SPS), nal_ref_idc: 1
[h264 @ 000000d8b83a0d00] nal_unit_type: 8(PPS), nal_ref_idc: 1
[h264 @ 000000d8b83a0d00] nal_unit_type: 6(SEI), nal_ref_idc: 0/0
[h264 @ 000000d8b83a0d00] nal_unit_type: 5(IDR), nal_ref_idc: 1
[h264 @ 000000d8b83a0d00] Format yuvj420p chosen by get_format().
[h264 @ 000000d8b83a0d00] Reinit context to 864x480, pix_fmt: yuvj420p
[h264 @ 000000d8b83a0d00] ct_type:1 pic_struct:0
[h264 @ 000000d8b83a0d00] no picture
[h264 @ 000000d8b83a0d00] cabac decode of qscale diff failed at 35 5
[h264 @ 000000d8b83a0d00] error while decoding MB 35 5, bytestream 237052
[h264 @ 000000d8b83a0d00] concealing 1364 DC, 1364 AC, 1364 MV errors in I frame
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 4 got 9
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 0 got 1


Tak se ptám, i kdybych měl mít verzi vyšší než 4.2.2, tak pět let se musí čekat, než přes ffmpeg to půjde bez artefaktů, zatímco přes appku pro smartphon si to jde (nevšiml jsem si že by si uživatelé stěžovali)

Re:Obrazové artefakty ve streamu
« Odpověď #6 kdy: 22. 11. 2020, 14:41:48 »
by ses nacekal nez to vyrobce tvoji webkamery commitne do ffmpegu..
velmi casto to je "vylepseni" streamu od vyrobce. jeho appka s tim pocita, ffmpeg jede podle specifikace. u lepsich kamer to jde vypnout (napr axis zipstream, nebo hikvision h264+), tipuju ze u tvoji ne..

Re:Obrazové artefakty ve streamu
« Odpověď #7 kdy: 22. 11. 2020, 15:39:18 »
Jedině přes HDMI grabber, ten ani nemám. Navíc nevím ,jestli by smartphone přes otg redukci uměl připojit HDMI grabber, jestli by stačila přenosová rychlost a vůbec celý tento ansámbl s drátem by snižoval komfort a mobilitu. Tudy cesta nevede. To jsme se dostali někam na způsob baterky na podvozku


Zde jsem vyzkoušel """radu""" upgradovat ne verzi vyšší než 4.2.2.

Výsledek: Nefunguje to vůbec
Kód: [Vybrat]
ffplay -v debug (-flags nobuffer) -f mpegts -codec:v  -i "udp://9.5.0.0:8554(?pkt_size/buffersize....)"

ffplay version 4.3.1-2020-11-08-full_build-www.gyan.dev Copyright (c) 2003-2020 the FFmpeg developers

Initialized direct3d renderer.
[mpegts @ 000000d8b836a400] Opening 'udp://9.5.0.0:8554' for reading
[udp @ 000000d8b836aa40] No default whitelist set
[udp @ 000000d8b836aa40] end receive buffer size reported is 393216
[mpegts @ 000000d8b836a400] Unable to seek back to the start
[mpegts @ 000000d8b836a400] stream=0 stream_type=1b pid=1011 prog_reg_desc=
[mpegts @ 000000d8b836a400] stream=1 stream_type=f pid=1100 prog_reg_desc=
[mpegts @ 000000d8b836a400] stream=2 stream_type=80 pid=200 prog_reg_desc=
[mpegts @ 000000d8b836a400] Unable to seek back to the start
[mpegts @ 000000d8b836a400] Before avformat_find_stream_info() pos: 1643124 bytes read:1644064 seeks:0 nb_streams:3
[mpegts @ 000000d8b836a400] parser not found for codec none, packets or times may be invalid.
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 1 got 6
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 13 got 9
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 0 got 5
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 12 got 1
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 7 got 5

^...asi 300x

[mpegts @ 000000d8b836a400] Packet corrupt (stream = 0, dts = 0).

.... Continuity....


[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 1 got 0
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 14 got 15
[mpegts @ 000000d8b836a400] Packet corrupt (stream = 0, dts = 225225).
[h264 @ 000000d8b83a0d00] ct_type:1 pic_struct:0
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 9(AUD), nal_ref_idc: 0
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 7(SPS), nal_ref_idc: 1
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 8(PPS), nal_ref_idc: 1
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 6(SEI), nal_ref_idc: 0
[extract_extradata @ 000000d8b83ae540] nal_unit_type: 5(IDR), nal_ref_idc: 1
[h264 @ 000000d8b83a0d00] nal_unit_type: 9(AUD), nal_ref_idc: 0
[h264 @ 000000d8b83a0d00] nal_unit_type: 7(SPS), nal_ref_idc: 1
[h264 @ 000000d8b83a0d00] nal_unit_type: 8(PPS), nal_ref_idc: 1
[h264 @ 000000d8b83a0d00] nal_unit_type: 6(SEI), nal_ref_idc: 0/0
[h264 @ 000000d8b83a0d00] nal_unit_type: 5(IDR), nal_ref_idc: 1
[h264 @ 000000d8b83a0d00] Format yuvj420p chosen by get_format().
[h264 @ 000000d8b83a0d00] Reinit context to 864x480, pix_fmt: yuvj420p
[h264 @ 000000d8b83a0d00] ct_type:1 pic_struct:0
[h264 @ 000000d8b83a0d00] no picture
[h264 @ 000000d8b83a0d00] cabac decode of qscale diff failed at 35 5
[h264 @ 000000d8b83a0d00] error while decoding MB 35 5, bytestream 237052
[h264 @ 000000d8b83a0d00] concealing 1364 DC, 1364 AC, 1364 MV errors in I frame
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 4 got 9
[mpegts @ 000000d8b836a400] Continuity check failed for pid 4113 expected 0 got 1


Tak se ptám, i kdybych měl mít verzi vyšší než 4.2.2, tak pět let se musí čekat, než přes ffmpeg to půjde bez artefaktů, zatímco přes appku pro smartphon si to jde (nevšiml jsem si že by si uživatelé stěžovali)

nóó von tam nepiše žeby to měla bejt verze 4.2.2 ale vodkazuje se přímo na nějakej konkrétní build ztý stránky zeranone.com kterou boužel mezitim asi jako vypnuli :o :-\
Harald Meyer June 26, 2020 at 4:34 am

Please make sure to use the ffmpeg 4.2.2 version from https://ffmpeg.zeranoe.com/builds/

něco zustalo skovaný v archivu hele

možná nám taky prozraď coto je jakoby přesně za kamerku :o :o takle jenom hádám žeto asi jako bude nějaký gopro :o :o
lidi postižený environmentálním žalem hele choděj za ekopsycholožkama hele 🤡 💆 🤡 💆

Re:Obrazové artefakty ve streamu
« Odpověď #8 kdy: 23. 11. 2020, 13:15:53 »
A kolik zarizeni mas na te wifine? Porad to je jenom jeden kanal, na kterym se musej stridat......takze pokud je tam k tomu 5 mobilu a 2 notebooky, nebude to fungovat nikdy. A ano, odpovidalo by tomu to, ze pri vetsim bitrate jsou chyby castejsi.....

Re:Obrazové artefakty ve streamu
« Odpověď #9 kdy: 23. 11. 2020, 14:43:55 »
Ono dovod preco mas obrazove artefakty na zivom streame, je sposobene tym, ze udp paket dorazi do streamu v nespravnom case. A tym padom ho pri prehravani prehravac zahodi. Kedze nesedi casova znacka paketu. Ak sa jedna o klucovy frame v streame, tak vidno rozkockovany cely obraz. Ak sa jedna o iny menej poctatny ramec, tak to clovek kolko krat ani nepostrehne. Toto je dost velky problem udp streamingu, hlavne cez wifi. Kde prenos dat cez wifi sa opakuje niekolko krat, pri chybnom doruceni ramca. Udp si ale nesleduje ci bol paket doruceny alebo nie a posiela dalsie. Avsak wifi ako taka, si kontroluje ci ramec odoslany na opacnu stranu dorazil a ak nie posle ho znovu. Burst paketov je bezna vec, kedze vacina kamier ma variabilny bit rate a tym padom odosiala roznou rychlostou data. Na strane ffmepegu dochadza ku cachovaniu zaznamu, ktory sa spracovava, preto nemusi ukazovat chyby na vstupe, aj ked realne tam su. Cim vyzsi je datovy tok, tym viac sa prejavuje nestabilita wifi a upd prenosu.

Hamparle

  • ****
  • 360
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Re:Obrazové artefakty ve streamu
« Odpověď #10 kdy: 25. 11. 2020, 15:59:40 »
A kolik zarizeni mas na te wifine?
Na tom zařízení mám: ... chvíle napětí... Přesně jedno zařízení, a sice, počítač,  na na kterém ten UDP stream sleduji. Psal jsem, že ta kamera vytvoří AP. Hledám taky způsob, jak donutit kameru, aby se ta připojila k AP (ostatně kamera má http příkaz na vracející seznam AP okolo), protože je to plýtvání wifi kartami, protože musím vyčlenit jednu wifi kartu pro komunikaci s kamerou a druhou do internetu.

A jak donutit kanál (síťový stack přijímače a nebo ffmpeg), tak aby respektoval zamýšlené pořadí paketů ? Přijde mi tragické, že taková drobnost jako špatné pořadí paketů to dokáže znemožnit. Furt ale nevím, jací soudruzi udělali chybu. autoři udp stacku, ffmpeg knihovny pro udp  protokol nebo mpegts protokolu...



« Poslední změna: 25. 11. 2020, 16:04:34 od Hamparle »

Re:Obrazové artefakty ve streamu
« Odpověď #11 kdy: 25. 11. 2020, 16:29:28 »
https://trac.ffmpeg.org/wiki/StreamingGuide#Pointtopointstreaming
Citace
If you run into packet loss (green frames, tearing/shearing--since UDP is not guaranteed delivery, this can occur) first make sure your FFmpeg is compiled with pthreads support enabled (if it is, then it uses a separate thread to receive from the UDP port, which can cause less packet loss)....

Re:Obrazové artefakty ve streamu
« Odpověď #12 kdy: 25. 11. 2020, 18:18:47 »
hamprle skusil si ty zeranoe buildy?? nějakej sypač technický soli do jídla byl tak hodnej a ty buildy skoval u sebe na githubu taky hele :D ;)
všimla sem si toho win shellu co máš v dotazu skoušel si to taky dělat v nějakým linuxu s tim ffmpegem jestli to blbne taky?? :o :o

joa jestli to je tamta gopro kamerka tak by se ti třeba mohla hodit tadleta pythoní knihovna hele :o ;)
lidi postižený environmentálním žalem hele choděj za ekopsycholožkama hele 🤡 💆 🤡 💆

Hamparle

  • ****
  • 360
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Re:Obrazové artefakty ve streamu
« Odpověď #13 kdy: 25. 11. 2020, 19:12:05 »
tak zatím vyzkoušeno jen ve windows, furt stejná šračka
Kód: [Vybrat]
  libswresample   3.  7.100 /  3.  7.100
[mpegts @ 000000a9f327a5c0] Unable to seek back to the startf=0/0
[mpegts @ 000000a9f327a5c0] Unable to seek back to the startf=0/0
[NULL @ 000000a9f32b0500] [Eval @ 000000a9f5f6eb20] Undefined constant or missing '(' in
nobuffer'
[NULL @ 000000a9f32b0500] Unable to parse option value "nobuffer"
[NULL @ 000000a9f32b0500] Error setting option flags to value nobuffer.
[mpegts @ 000000a9f327a5c0] Failed to open codec in avformat_find_stream_info
[mpegts @ 000000a9f327a5c0] Packet corrupt (stream = 0, dts = 630630).
[mpegts @ 000000a9f327a5c0] Packet corrupt (stream = 0, dts = 633633).
[NULL @ 000000a9f32b0500] non-existing PPS 0 referenced
[h264 @ 000000a9f32b0500] non-existing PPS 0 referenced
[h264 @ 000000a9f32b0500] decode_slice_header error
[h264 @ 000000a9f32b0500] no frame!
[mpegts @ 000000a9f327a5c0] Packet corrupt (stream = 0, dts = 0).
[h264 @ 000000a9f32b0500] non-existing PPS 0 referenced

I když vynechám nobuffer...

Tu knihovnu znám, i skript pro nastavení capture (ten už je pro to co řeším), ale vlastně volá jen ffmpeg a navíc posílá UDP paket aby se nezastavil stream (bez něj po 10s skončí), to ale pro mé účely stačí.