vdr-live-plugin HTML5 Web-Streaming
-
-
Tolle Sache!
Mit VAAPI geht CPU Auslastung von 125% auf 17% runter!
Auf meinem 10 Watt System mit openSUSE Tumbleweed, ffmpeg 4.1, IntelCeleron J4105 CPU, bei 1.50GHz, Kanal "ZDF HD", habe ich folgende Werte probiert:
CPU transcoding:
bei allen live.StreamVideoOpt...
ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -i <input> -map 0:v -map 0:a:0 -c:v libx264 -preset ultrafast -qmin 18 -qmax 30 -g 25 -r 25 -c:a aac -ac 2
Codeserver1:~ # top top - 11:03:11 up 309 days, 5:08, 2 users, load average: 1,82, 0,73, 0,47 Tasks: 160 total, 2 running, 158 sleeping, 0 stopped, 0 zombie %Cpu(s): 19,5 us, 1,6 sy, 12,3 ni, 65,0 id, 0,0 wa, 0,0 hi, 1,6 si, 0,0 st MiB Mem : 7623,316 total, 361,422 free, 542,773 used, 6719,121 buff/cache MiB Swap: 7625,562 total, 7587,316 free, 38,246 used. 6622,469 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13199 root 20 0 839952 168788 29100 S 125,2 2,162 0:32.95 ffmpeg 11122 root 20 0 1983872 155468 22020 S 6,977 1,992 23:45.78 vdr
VAAPI transcoding:
bei allen live.StreamVideoOpt...
ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -hwaccel vaapi -hwaccel_output_format vaapi -i <input> -map 0:v -map 0:a:0 -vf 'deinterlace_vaapi=rate=field:auto=1,scale_vaapi=w=1280:h=720' -c:v h264_vaapi -preset slow -qmin 18 -qmax 30 -g 25 -r 25 -c:a aac -ac 2 -b:v 2M -maxrate 2M -bufsize 1.8M
Für maximale Bildqualität Parameter "-b:v 2M -maxrate 2M -bufsize 1.8M" weglassen.
Codeserver1:~ # top top - 11:07:25 up 309 days, 5:12, 2 users, load average: 0,47, 0,56, 0,45 Tasks: 161 total, 2 running, 159 sleeping, 0 stopped, 0 zombie %Cpu(s): 3,4 us, 5,5 sy, 0,2 ni, 88,1 id, 0,5 wa, 0,0 hi, 2,3 si, 0,0 st MiB Mem : 7623,316 total, 310,711 free, 451,793 used, 6860,812 buff/cache MiB Swap: 7625,562 total, 7587,316 free, 38,246 used. 6607,543 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20607 root 20 0 709572 98788 55384 R 17,22 1,265 0:06.45 ffmpeg 11122 root 20 0 1981800 155568 22020 S 6,954 1,993 24:00.45 vdr
Und das tollste auf einem betagten Android-Handy über VPN Mobilfunk (Upload 736kbit/s) im Chrome Browser geht es ohne zu murren mit diesen Einstellungen (Video Bitrate auf 300kbit/s):
ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -hwaccel vaapi -hwaccel_output_format vaapi -i <input> -map 0:v -map 0:a:0 -vf 'deinterlace_vaapi=rate=field:auto=1,scale_vaapi=w=640:h=360' -c:v h264_vaapi -preset slow -qmin 18 -qmax 30 -g 25 -r 25 -c:a aac -ac 2 -b:v 0.3M -maxrate 0.3M -bufsize 0.3M
-
Future Wunsch 1:
könnte man den LevelSelector https://github.com/clappr/clappr-level-selector-plugin oder besser https://github.com/LA1TV/clappr-quality-selection-plugin einbauen? Und als Parameter <videobitrate> dem ffmpeg übergeben, z.B. so:
ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M ... -c:a aac -ac 2 -b:v <videobitrate> -maxrate <videobitrate> -bufsize <videobitrate>
Träum... Future Wunsch 2:
Im Fullscreenmodus: per Maus/Touchscreen eine Kanalauswahlliste ala https://github.com/irongomme/clappr-channels mit jeweils dem Senderlogo.
Das wäre für ein Android-Tablet ideal.
-
VP9 wäre noch eine tolle Ergänzung, vp9_vaapi wird von neueren Intel Systemen unterstützt und fast alle aktuellen Smartphones und Browser können das. Es ist in etwa mit HEVC zu vergleichen nur das es auch im Browser etc geht.
Es braucht nur 1/3-1/2 der Bitrate von H264 !
-
Da es frei konfigurierbar ist, sollte das direkt machbar sein.
-
Da es frei konfigurierbar ist, sollte das direkt machbar sein.
ah schön, ich scheitere noch am bauen des plugins deswegen hab ich es noch nicht in Aktion gesehen
-
-
Gibt einen neuen commit. Jetzt werden Sessions verwendet so dass mehrere User parallel streamen könnnen.
Wenn man mit der GPU transcodiert kommt man aber je nach GPU schnell ans Limit der maximalen GPU-Endoder. Mit NVIDIA GeForce sind nur 2 Encoder vorhanden: https://developer.nvidia.com/v…decode-gpu-support-matrix
-
-
Es gibt eine neue Version mit verbessertem Handling von FFmpeg. Damit sollte es seltener notwendig sein, dass man nach einem Kanalwechsel die Seite noch mal manuell neu laden muss.
@uw67 schaue ich mir an. Das Kanalplugin sieht interessant aus.
-
Funktioniert jetzt auch für mpeg4 Sender oder über VPN. Supi!
-
-
Hallo,
Reicht da ein #include <unistd.h> in Zeile 11 von pages/stream_data.ecpp?
Merci, damit läuft nun auch i386 im PPA durch!
Gruss
Wolfgang
-
OK, danke. Ist nun auch im git drin.
-
Wenn man mit der GPU transcodiert kommt man aber je nach GPU schnell ans Limit der maximalen GPU-Endoder. Mit NVIDIA GeForce sind nur 2 Encoder vorhanden: https://developer.nvidia.com/v…decode-gpu-support-matrix
da gibt es einen Patch für Die Consumer Karten sind künstlich auf 2 limitiert.
-
-
Ich spiele gerade auch ein wenig mit dem Plugin rum und nachdem ich endlich auch ein Bild auf meinem Laptop bekomme, ist meine Begeisterung noch größer geworden. Mir bleibt aber leider bisher verschlossen wie sich die vier Webstreaming Optionen verwenden lassen. Wertet das Plugin je nach Endgerät die URL aus und wählt dann die passende ffmpeg-Option? Ich hätte gern, dass ich beim Aufruf der Live-Streaming-Seite über meinen VPN-Account einen demenprechend kodierten Stream bekomme, beim Aufruf in meinem Heimnetz jedoch die volle Bandbreite benutzen kann. Wie kann ich das konfigurieren?
-
hre1 Die Streaming-Option wird je nach Vtype des Kanals gewählt. Dieser ist in der channels.conf bei der VPID nach dem '=' eingetragen (http://vdr-wiki.de/wiki/index.php/Channels.conf#VPID). Daher ist das momentan fix pro Kanal. Wählbare Datenrate hatte ich schon angedacht, hatte aber noch keine elegante Lösung wie das schlank implementiert werde kann gefunden.
-
Hab nun auch mal das Plugin aus dem git geladen und gebaut. Die SD Sender klappen alle super, die HD Sender klappen jedoch meist nicht, hin und wieder allerdings schon. Ist das ein bekanntest Problem? Evtl. ist ja im untenstehenden Log vom fehlgeschlagenen Starten des Das Erste HD Steamings was zu erkennen. Es sind durchaus ein paar Fehler dabei, die mir allerdings nicht wirklich was sagen:
Code
Alles anzeigenpr 3 00:43:42 vdr vdr: [3003] vdrlive::stream::session(614c9714f20a35745e781599eebd14de) Apr 3 00:43:42 vdr vdr: [3003] vdrlive::stream::vtype(27) Apr 3 00:43:42 vdr vdr: [3003] vdrlive::stream::f_worker(0x7f3dc001ad90) Apr 3 00:43:42 vdr vdr: [3003] Live: FFmpegTread::StartFFmpeg() change channel 26 -> 1 Apr 3 00:43:42 vdr vdr: [3003] Live: FFmpegTread::StartFFmpeg() completed Apr 3 00:43:42 vdr vdr: [3003] vdrlive::stream::StartFFmpeg(1) Apr 3 00:43:42 vdr vdr: [11037] stream utility handler thread started (pid=2232, tid=11037, prio=high) Apr 3 00:43:42 vdr vdr: [11037] Live: FFmpegTread::Action() started channel = 1 Apr 3 00:43:42 vdr vdr: [11037] Live: FFmpegTread::Action packetizer cmd: ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -i "http://localhost:3000/1" -map 0:v -map 0:a:0 -c:v copy -c:a aac -ac 2 Apr 3 00:43:42 vdr vdr: [11037] Live: FFmpegTread::Action::Open(1) ffmpeg started Apr 3 00:43:42 vdr vdr: [3003] vdrlive::stream: generating EPG info Apr 3 00:43:42 vdr vdr: [3216] Streamdev: Accepted new client (HTTP) 127.0.0.1:47162 Apr 3 00:43:42 vdr vdr: [11042] streamdev-livestreaming thread started (pid=2232, tid=11042, prio=high) Apr 3 00:43:42 vdr vdr: [11041] streamdev-writer thread started (pid=2232, tid=11041, prio=high) Apr 3 00:43:42 vdr vdr: [11043] device 2 receiver thread started (pid=2232, tid=11043, prio=high) Apr 3 00:43:42 vdr vdr: [11044] device 2 TS buffer thread started (pid=2232, tid=11044, prio=high) Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] SPS unavailable in decode_picture_timing Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] non-existing PPS 0 referenced Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] SPS unavailable in decode_picture_timing Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] non-existing PPS 0 referenced Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] decode_slice_header error Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] no frame! Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] SPS unavailable in decode_picture_timing Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] non-existing PPS 0 referenced Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] SPS unavailable in decode_picture_timing Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] non-existing PPS 0 referenced Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] decode_slice_header error Apr 3 00:43:43 vdr vdr[2232]: [h264 @ 0x55c5ae074fc0] no frame! Apr 3 00:43:43 vdr vdr: [3005] vdrlive::stream_data::f_worker(0x7f3dc001ad90) Apr 3 00:43:43 vdr vdr: [3005] vdrlive::stream_data::mimetype(application/x-mpegURL) Apr 3 00:43:43 vdr vdr: [3005] vdrlive::stream_data::session(614c9714f20a35745e781599eebd14de) Apr 3 00:43:43 vdr vdr: [3005] vdrlive::stream_data::path(/tmp/live-hls-buffer/614c9714f20a35745e781599eebd14de/master_1.m3u8) Apr 3 00:43:43 vdr vdr: [3005] vdrlive::stream_data::is_open(false) 100 /tmp/live-hls-buffer/614c9714f20a35745e781599eebd14de/master_1.m3u8 Apr 3 00:43:43 vdr vdr: [11037] Live: FFmpegTread::Action() ffmpeg starting... 0 Apr 3 00:43:43 vdr vdr: [3005] vdrlive::stream_data::is_open(false) 99 /tmp/live-hls-buffer/614c9714f20a35745e781599eebd14de/master_1.m3u8 Apr 3 00:43:44 vdr vdr: [3005] vdrlive::stream_data::is_open(false) 98 /tmp/live-hls-buffer/614c9714f20a35745e781599eebd14de/master_1.m3u8 Apr 3 00:43:44 vdr vdr: [3005] vdrlive::stream_data::is_open(false) 97 /tmp/live-hls-buffer/614c9714f20a35745e781599eebd14de/master_1.m3u8 Apr 3 00:43:44 vdr vdr[2232]: [mpegts @ 0x55c5ae056580] Could not find codec parameters for stream 0 (Unknown: none ([12][0][0][0] / 0x000C)): unknown codec Apr 3 00:43:44 vdr vdr[2232]: Consider increasing the value for the 'analyzeduration' and 'probesize' options Apr 3 00:43:44 vdr vdr[2232]: [mpegts @ 0x55c5ae056580] Could not find codec parameters for stream 1 (Unknown: none ([11][0][0][0] / 0x000B)): unknown codec Apr 3 00:43:44 vdr vdr[2232]: Consider increasing the value for the 'analyzeduration' and 'probesize' options Apr 3 00:43:44 vdr vdr[2232]: [mpegts @ 0x55c5ae056580] Could not find codec parameters for stream 2 (Unknown: none ([11][0][0][0] / 0x000B)): unknown codec Apr 3 00:43:44 vdr vdr[2232]: Consider increasing the value for the 'analyzeduration' and 'probesize' options Apr 3 00:43:44 vdr vdr[2232]: [mpegts @ 0x55c5ae056580] Could not find codec parameters for stream 10 (Unknown: none ([5][0][0][0] / 0x0005)): unknown codec Apr 3 00:43:44 vdr vdr[2232]: Consider increasing the value for the 'analyzeduration' and 'probesize' options Apr 3 00:43:44 vdr vdr: [3005] vdrlive::stream_data::is_open(false) 96 /tmp/live-hls-buffer/614c9714f20a35745e781599eebd14de/master_1.m3u8 Apr 3 00:43:44 vdr vdr[2232]: [hls @ 0x55c5ae097440] Cannot use rename on non file protocol, this may lead to races and temporary partial files Apr 3 00:43:44 vdr vdr: [11037] Live: FFmpegTread::Action() ffmpeg running 1 Apr 3 00:43:44 vdr vdr: [11037] Live: FFmpegTread::Action() waiting: 1/60 Apr 3 00:43:44 vdr vdr: [3005] vdrlive::stream_data::size(100) Apr 3 00:43:44 vdr vdr: [3005] vdrlive::stream_data::range() Apr 3 00:43:44 vdr vdr: [5531] vdrlive::stream_data::f_worker(0x7f3dc001ad90) Apr 3 00:43:44 vdr vdr: [5531] vdrlive::stream_data::mimetype(application/x-mpegURL) Apr 3 00:43:44 vdr vdr: [5531] vdrlive::stream_data::session(614c9714f20a35745e781599eebd14de) Apr 3 00:43:44 vdr vdr: [5531] vdrlive::stream_data::path(/tmp/live-hls-buffer/614c9714f20a35745e781599eebd14de/ffmpeg_1_data.m3u8) Apr 3 00:43:45 vdr vdr: [5531] vdrlive::stream_data: EXT-X-TARGETDURATION: 1 Apr 3 00:43:45 vdr vdr: [5531] vdrlive::stream_data::size(184) Apr 3 00:43:45 vdr vdr: [5531] vdrlive::stream_data::range() Apr 3 00:43:45 vdr vdr: [3003] vdrlive::stream_data::f_worker(0x7f3dc001ad90) Apr 3 00:43:45 vdr vdr: [3003] vdrlive::stream_data::mimetype(video/MP2T) Apr 3 00:43:45 vdr vdr: [3003] vdrlive::stream_data::session(614c9714f20a35745e781599eebd14de) Apr 3 00:43:45 vdr vdr: [3003] vdrlive::stream_data::path(/tmp/live-hls-buffer/614c9714f20a35745e781599eebd14de/ffmpeg_1_data20190403004345.ts) Apr 3 00:43:45 vdr vdr: [3003] vdrlive::stream_data::size(1288552) Apr 3 00:43:45 vdr vdr: [3003] vdrlive::stream_data::range()
-
Kannst du noch einige Zeilen mehr posten. Bis hier war alles ok. Die Codec Meldungen sind von ffmpeg. Einige Sender senden zusätzliche Streams mit welchen ffmpeg nichts anfangen kann, ist kein Problem.
Gelegentlich muss man einfach die Seite neu laden.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!