Hallo zusammen,
nachdem ich heute ein wenig Zeit zum rumspielen hatte, wollte ich meine Erkenntnisse hier teilen:
Ausgangspunkt: VDR läuft auf Intel-NUC mit Celeron N2820 (headless)
Problem: unterwegs (z.B. Hotel-WLAN oder Mobilfunk) steht nicht genügend Datenrate / traffic zur Verfügung
Lösung: Streaming mit re-encoding
Nachteil: Hohe CPU-Last, dadurch nur SD-Streaming.
Ich weiß nicht mehr genau, wo die "externremux.sh" her war, ich glaube, hier aus dem Forum irgendwo. Jedenfalls habe ich die ein bisschen erweitert, sodass mein NUC nun in HW de- und encodieren kann:
#!/bin/bash
echo -ne 'Content-type: video/mpeg\r\n'
echo -ne '\r\n'
#decode and encode in SW
#ffmpeg -f mpegts -i - -vcodec mpeg4 -b 300k -vf scale=512:288 -acodec libmp3lame -ab 32000 -ar 44100 -ac 1 -async 50 -f mpegts pipe:1
#ffmpeg -f mpegts -i - -c:v libx264 -c:a libfdk_aac -b:a 128k -b:v 650k -vf yadif -profile:v baseline -level 3.0 -bufsize 1851k -crf 31 -f mpegts pipe:1
#ffmpeg -f mpegts -i - -c:v libx264 -c:a copy -vf yadif -b:v 650k -preset:v veryfast -profile:v baseline -level 3.0 -bufsize 1851k -crf 27 -f mpegts pipe:1
#ffmpeg -f mpegts -i - -c:v libx265 -c:a copy -vf yadif -b:v 650k -preset:v veryfast -profile:v baseline -level 3.0 -bufsize 1851k -crf 27 -f mpegts pipe:1
#decode in SW, encode in HW
#ffmpeg -vaapi_device /dev/dri/renderD128 -f mpegts -i - -vf 'hwupload,scale_vaapi=w=1280:h=720:format=nv12' -c:v h264_vaapi -c:a copy -b:v 650k -f mpegts pipe:1
#decode and encode in HW
#ffmpeg -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -f mpegts -i - -vf 'hwupload,scale_vaapi=w=1280:h=720:format=nv12' -c:v h264_vaapi -c:a copy -b:v 650k -f mpegts pipe:1
ffmpeg -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -f mpegts -i - -vf 'hwupload,scale_vaapi=w=1280:h=720:format=nv12' -c:v h264_vaapi -c:a aac -b:a 72kaac -b:a 72k -b:v 650k -f mpegts pipe:1
Display More
HIer habe ich ein bisschen mit den Codecs rumgespielt, ihr seht verschiedene Einstellungen:
Oben wird alles in software gemacht. Sorgt für hohe CPU-Last, ist aber relativ leicht zu durchschauen. (das sind die kopierten Zeilen)
In der Mitte war der Versuch, das Encoding in HW zu überführen. Läuft immer noch mit ca. 100% cpu-Last bei HD-Material (also 1 von 2 Kernen voll ausgelastet). Der Celeron ist halt nicht so gut im dekodieren von h264.
Unten dann alles in HW; Wenn man Audio nicht anfasst, läuft FFMPEG bei ca. 10% CPU. Mit re-encoding des Audio-Streams liegt man dann bei ca. 25%.
In der untersten Zeile rechne ich das Video in 1280x720 um, damit 1080i-Material nicht noch größer übertragen wird als notwendig. Bei geringen Datenraten sieht das eh eher nach Klötzchen-Fernsehen aus. Nachteil ist, dass SD-Programme so auf 1280x720 hochskaliert werden.
Rausnehmen ist schwierig, hier bekomme ich eine FFMPEG-Fehlermeldung.
Vermutlich wird das alles auch mit NVIDIA-Grafikkarten funktionieren. Bei AMD: keine Ahnung.