minimale hardwaresetup voor ffmpeg/vlc transcoding

Wil je iets weten over de hardware van een computer? Draait je CPU fan niet meer? Je printer wil niet meer mee?
Dan moet je hier zijn.
Plaats reactie
blaatpraat
Elite Poster
Elite Poster
Berichten: 1300
Lid geworden op: 10 jan 2014, 12:09
Uitgedeelde bedankjes: 32 keer
Bedankt: 103 keer

Project: het maken van een videomatrix.
Input: 4x 10Mbps videostream (1920x1080).
Output: 1x 1920x1080 videostream

Verwerken:
Neem de inputs, verklein ze naar 960x540, en plaats er 4 op 1 HD scherm, en deze terug streamen.

Ik heb dit werkend gekregen, zowel met ffmpeg als met vlc (waarbij het met vlc iets beter werkt naar mijn mening).

OS die dit zal uitvoeren: een nog te bepalen linux distro, enkel CLI.

Nu is de vraag: welke hardware heb ik hier minimaal voor nodig.
De testomgeving die ik heb staan is alvast onvoldoende merk ik (CPU: Intel Core I5-6300).
CPU zit aan zijn max, en krijg continu artefacten in het beeld.

Is dit in feite vooral een CPU intensieve taak? Of moet ik eerder kijken naar een GPU (ook al zal het een CLI server zijn)?
Hoeveelheid RAM zal niet veel uitmaken, vermoed ik, dus een standaard 8GB van tegenwoordig zal wel volstaan.
Gebruikersavatar
Block
Erelid
Erelid
Berichten: 1921
Lid geworden op: 31 jul 2005, 01:08
Uitgedeelde bedankjes: 160 keer
Bedankt: 110 keer
Recent bedankt: 4 keer

Wil je een videoscherm matrix van die inkomende stream?

http://www.smartavi.com/assets/images/p ... wall/1.jpg

Of wil je een mozaiek scherm maken?



Mag het eventueel dedicated hardware zijn? Of is het gewoon om één dag een uitzending te doen en daarna terug voor iets anders te gebruiken?
select replace * from userbase.be where topic ('got hostile', 'got friendly and polite');
skindred
Plus Member
Plus Member
Berichten: 128
Lid geworden op: 19 dec 2005, 14:32
Bedankt: 6 keer

Met ffmpeg moet je zeker eens kijken naar vaapi hardware decoding / encoding.

Volgens mij moet dit al lukken met een simpele Atom CPU van 100€.

Via vaapi of qsv kan je met gemak 4 gelijktijdige transcode jobs aan.
blaatpraat
Elite Poster
Elite Poster
Berichten: 1300
Lid geworden op: 10 jan 2014, 12:09
Uitgedeelde bedankjes: 32 keer
Bedankt: 103 keer

Block schreef:Wil je een videoscherm matrix van die inkomende stream?

http://www.smartavi.com/assets/images/p ... wall/1.jpg

Of wil je een mozaiek scherm maken?



Mag het eventueel dedicated hardware zijn? Of is het gewoon om één dag een uitzending te doen en daarna terug voor iets anders te gebruiken?
Mozaïek zal een betere benaming zijn inderdaad.

Bedoeling is om dit permanent te laten draaien (24/7, 4-5 jaar aan een stuk, en daarna kan het systeem eens rebooten), tot de opstelling het begeeft.
skindred schreef:Met ffmpeg moet je zeker eens kijken naar vaapi hardware decoding / encoding.

Volgens mij moet dit al lukken met een simpele Atom CPU van 100€.

Via vaapi of qsv kan je met gemak 4 gelijktijdige transcode jobs aan.
Even wat opgezocht, want ik dacht dat mijn testcomputer dit ondersteunde.
Blijkt dat dit enkel onder linux werkt (wat goed is, die specifieke testcomputer draaide windows op dat moment).

Dus zolang er een GPU in zit van intel, die VA-API ondersteunt, zou het vlotjes moeten gaan?
Even wat testen draaien dus.
Gebruikersavatar
raf1
Elite Poster
Elite Poster
Berichten: 5780
Lid geworden op: 17 nov 2009, 22:39
Uitgedeelde bedankjes: 261 keer
Bedankt: 1770 keer
Recent bedankt: 10 keer

blaatpraat schreef:Of moet ik eerder kijken naar een GPU?
Ja, absolute noodzaak als je geen geld wil verspillen aan nutteloze dure hardware van een bedrijf genaamd Intel.
Elke GPU heeft tegenwoordig H.264 hardware acceleration en Picture-in-Picture technologie waardoor dit project mogelijk wordt met een goedkope Android-mediaplayer, smartphone, of zelfs een 5 jaar oude raspberry pi.

Op een 5 jaar oude raspberry pi, gebruik je dan de hardware accelerated omxplayer of ffmpeg met h264_omx als codec. Wellicht moet je ook wat extra RAM op de Raspberry toewijzen aan de GPU.

meer uitleg op https://t3chadd1ct.wordpress.com/2013/04/19/omxplayer/
Laatst gewijzigd door raf1 15 apr 2017, 14:39, in totaal 1 gewijzigd.
skindred
Plus Member
Plus Member
Berichten: 128
Lid geworden op: 19 dec 2005, 14:32
Bedankt: 6 keer

Voor het gemak zou ik gaan voor Ubuntu.
vaapi support kan je dan vrij snel testen met de tool vainfo
(apt-get update && apt-get install -y vainfo)




http://tipsonubuntu.com/2016/11/02/inst ... ntu-16-04/



Een andere optie is om via docker te werken.
Zo heb ik dit werkende op mijn Synology NAS.
Ofwel draai je de container in privileged mode, ofwel met de --device flag waarbij je /dev/dri/renderD128 passed.

Een livestream neemt net geen 20% van de GPU in beslag (volgens intel_gpu_top)


@raf1

Een RPi is zeer zeker ook een optie!
Maar zou die 4 streams tegelijk kunnen decoden, filters applyen en terug encoderen naar een nieuwe stream?

Ik heb nog wel een RPi2 en RPi3 liggen om dit mee te testen eigenlijk :-)
blaatpraat
Elite Poster
Elite Poster
Berichten: 1300
Lid geworden op: 10 jan 2014, 12:09
Uitgedeelde bedankjes: 32 keer
Bedankt: 103 keer

OS zal ofwel Centos ofwel Debian worden.
Mijn voorkeur gaat uit naar de laatste, maar we zullen zien of ik de IT-server-afdeling op mijn werk daarin meekrijg.

Ik zal eens experimenteren met een RPI (1), daar heb ik er thuis eentje van liggen :-D
bruma
Elite Poster
Elite Poster
Berichten: 1800
Lid geworden op: 06 jan 2014, 13:45
Uitgedeelde bedankjes: 46 keer
Bedankt: 89 keer
Recent bedankt: 1 keer

Ik ben ooit op zoek gegaan naar het omgekeerde 1 stream om op te splitsen naar diverse schermen in een videowall opstelling. Welke zoekwoorden ik heb gebruikt weet ik niet meer maar kwam een project of 2 tegen die inderdaad het omgekeerde deden (open source)

Verstuurd vanaf mijn Innos_D6000 met Tapatalk
Gebruikersavatar
Block
Erelid
Erelid
Berichten: 1921
Lid geworden op: 31 jul 2005, 01:08
Uitgedeelde bedankjes: 160 keer
Bedankt: 110 keer
Recent bedankt: 4 keer

Ooit wel eens een smartavi product voor zoiets gelijkaardig gebruikt. Om een productieketen in een diepvriesomgeving in het oog te houden. De kostprijs weet ik niet, maar werkt denk ik nog altijd probleemloos.

http://smartavi.com/products/multiviewe ... v-16x.html

Ongeveer zoiets maar ging maar tot 4 kanalen.
select replace * from userbase.be where topic ('got hostile', 'got friendly and polite');
Gebruikersavatar
raf1
Elite Poster
Elite Poster
Berichten: 5780
Lid geworden op: 17 nov 2009, 22:39
Uitgedeelde bedankjes: 261 keer
Bedankt: 1770 keer
Recent bedankt: 10 keer

skindred schreef:Maar zou die 4 streams tegelijk kunnen decoden, filters applyen en terug encoderen naar een nieuwe stream?
Vermoedelijk wel met 1080i-bronnen. Het is zeker een must om decoding, scaling en encoding door de GPU te laten afhandelen.
Decoding en scaling moet dan afgehandeld worden via MMAL, ecoding met OpenMAX.
Met een recente multicore RPi kan je eventueel nog iets door de CPU laten afhandelen als je multithreading software gebruikt.

Je zal alleszins ffmpeg of vlc zelf moeten compileren vanaf de source om MMAL, OpenMAX en multithreading te ondersteunen.

Als je onvoldoende framerate en resolutie haalt met de raspberry, dan bestaan er zeker ook iets duurdere ontwikkelbordjes met een GPU die 4k ondersteunt en waarmee het wel kan.

Het blijft natuurlijk een uitdaging om de juiste software instructies vanuit Linux rechtstreeks naar de GPU te sturen.
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 434 keer
Bedankt: 1972 keer

Misschien moet je dit eens bekijken...
blaatpraat
Elite Poster
Elite Poster
Berichten: 1300
Lid geworden op: 10 jan 2014, 12:09
Uitgedeelde bedankjes: 32 keer
Bedankt: 103 keer

Nog even dit topic schoppen.

Ondertussen al wat doorgetest, maar nog steeds geen stabiele oplossing gevonden.
Noch onder windows, noch onder linux krijg ik iets stabiel als output.

Een RPI heb ik nog niet geprobeerd, maar wel met een (hardwarematig) zwaardere computer.

Voorbeeld van een commando (ik heb verschillende variaties alvast geprobeerd):

Code: Selecteer alles

ffmpeg
        -vaapi_device /dev/dri/renderD128 
	-i "udp://239.0.0.1:2000?fifo_size=1000000&overrun_nonfatal=1"
	-i "udp://239.0.0.2:2000?fifo_size=1000000&overrun_nonfatal=1"
	-i "udp://239.0.0.3:2000?fifo_size=1000000&overrun_nonfatal=1"
	-i "udp://239.0.0.4:2000?fifo_size=1000000&overrun_nonfatal=1"
	-filter_complex "
		nullsrc=size=1920x1080 [base];
		[0:v] setpts=PTS-STARTPTS, scale=960x540 [upperleft];
		[1:v] setpts=PTS-STARTPTS, scale=960x540 [upperright];
		[2:v] setpts=PTS-STARTPTS, scale=960x540 [lowerleft];
		[3:v] setpts=PTS-STARTPTS, scale=960x540 [lowerright];
		[base][upperleft] overlay=shortest=1 [tmp1];
		[tmp1][upperright] overlay=shortest=1:x=960 [tmp2];
		[tmp2][lowerleft] overlay=shortest=1:y=540 [tmp3];
		[tmp3][lowerright] overlay=shortest=1:x=960:y=540
	"
	 -c:v h264_vaapi
	-f mpegts udp://239.0.2.1:2000
Ik heb de fifo_size vergroot en overrun_nonfatal aangezet omdat ik continu circular buffer overrrun kreeg, maar voor zover ik weet is dit enkel maar een pleister op de wonde, en niet de correcte manier.
Iemand een idee hoe ik dit wel kan oplossen?

De 4 input streams zijn 1080i, elk zo'n 10Mbps, doenbaar dus zou ik stellen.
De stream-bron en de computer zitten naast elkaar op een gigabit-switch.

De bedoeling is dus dat dit robuust werkt (als 1 van de 4 inputs een probleem zou vertonen, de kans is immens klein alvast, zou dit nog steeds moeten werken). De reden dat ik dit zeg, is omdat ffmpeg soms de neiging heeft om gewoon te stoppen, zonder enige aanleiding.

Ook krijg ik maar iets van een 15 fps (vanaf ik iets van filtering toepas), wat in feite te weinig is hiervoor (de bron is 50-60 fps).

Iemand een idee wat ik fout doe? Of zit ik echt wel aan de hardwarematige limieten?
CPU van de testmachine is een Intel I5 6300.
GPU is een Intel HD Graphics 520.
Gebruikersavatar
raf1
Elite Poster
Elite Poster
Berichten: 5780
Lid geworden op: 17 nov 2009, 22:39
Uitgedeelde bedankjes: 261 keer
Bedankt: 1770 keer
Recent bedankt: 10 keer

Als de framerate naar 15 daalt, dan lijkt me dat je op de CPU werkt aan 100% belasting. Dan ga je natuurlijk circular buffer overrrun krijgen omdat de CPU de input gewoon niet kan volgen. In principe mag de CPU niet noemenswaardig belast worden, bijvoorbeeld 30 á 40%, en moet al het grafische werk door de GPU gedaan worden.

Je zal dus moeten proberen om ffmpeg te optimaliseren voor jouw GPU, dit betekent misschien dat sommige filters niet werken. Je zal eens moeten opzoeken welke scaling filters werken op een Intel GPU.

Probeer bijvoorbeeld eens met -vcodec h264_qsv, dan gebruik je rechtstreeks de Intel HD Graphics 520
zie handleiding: https://software.intel.com/en-us/articl ... ith-ffmpeg
Plaats reactie

Terug naar “Hardware”