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

    Code
    1. server1:~ # top
    2. top - 11:03:11 up 309 days, 5:08, 2 users, load average: 1,82, 0,73, 0,47
    3. Tasks: 160 total, 2 running, 158 sleeping, 0 stopped, 0 zombie
    4. %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
    5. MiB Mem : 7623,316 total, 361,422 free, 542,773 used, 6719,121 buff/cache
    6. MiB Swap: 7625,562 total, 7587,316 free, 38,246 used. 6622,469 avail Mem
    7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    8. 13199 root 20 0 839952 168788 29100 S 125,2 2,162 0:32.95 ffmpeg
    9. 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.

    Code
    1. server1:~ # top
    2. top - 11:07:25 up 309 days, 5:12, 2 users, load average: 0,47, 0,56, 0,45
    3. Tasks: 161 total, 2 running, 159 sleeping, 0 stopped, 0 zombie
    4. %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
    5. MiB Mem : 7623,316 total, 310,711 free, 451,793 used, 6860,812 buff/cache
    6. MiB Swap: 7625,562 total, 7587,316 free, 38,246 used. 6607,543 avail Mem
    7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    8. 20607 root 20 0 709572 98788 55384 R 17,22 1,265 0:06.45 ffmpeg
    9. 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

    Multiroom-System:
    Server: ASRock J4105, openSUSE Tumbleweed, 14TB HD, Cine S2 (4Tuner), vdr2.4.0, streamdev-server

    FullHD-Client1: Zotac ZBOX HD-ND22, openSUSE 13.1, vdr2.2.0, streamdev-client, xineliboutput, IR-Empfänger/Sender/Einschalter yaUsbIR V3.5
    FullHD-Client2: Zotac ZBOX HD-ND22, openSUSE 42.1, vdr2.2.0, streamdev-client, softhddevice, IR-Empfänger/Sender/Einschalter yaUsbIR V3.5
    Test-Client: ASRock B85M, openSUSE Tumbleweed, vdr2.4.0, streamdev-client, softhddevice, IR-Empfänger/Sender/Einschalter yaUsbIR V3.5

  • 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.

    Multiroom-System:
    Server: ASRock J4105, openSUSE Tumbleweed, 14TB HD, Cine S2 (4Tuner), vdr2.4.0, streamdev-server

    FullHD-Client1: Zotac ZBOX HD-ND22, openSUSE 13.1, vdr2.2.0, streamdev-client, xineliboutput, IR-Empfänger/Sender/Einschalter yaUsbIR V3.5
    FullHD-Client2: Zotac ZBOX HD-ND22, openSUSE 42.1, vdr2.2.0, streamdev-client, softhddevice, IR-Empfänger/Sender/Einschalter yaUsbIR V3.5
    Test-Client: ASRock B85M, openSUSE Tumbleweed, vdr2.4.0, streamdev-client, softhddevice, IR-Empfänger/Sender/Einschalter yaUsbIR V3.5

    The post was edited 1 time, last by uwe67 ().

  • 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.


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Xcoder


    ...mit fix von Heute wieder alles Ok!


    Merci & Gruss

    Wolfgang

    TT S2-6400 - saa716x kompilieren unter 20.04(Focal)

  • 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.

    VDR: Zotac ZBOX EN860, 16GB RAM, 2 TB HDD, Debian Stretch, vdr-2.4.1, softhddevice, satip

  • Funktioniert jetzt auch für mpeg4 Sender oder über VPN. Supi! :tup

  • 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

    TT S2-6400 - saa716x kompilieren unter 20.04(Focal)

  • 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.

    VDR: Zotac ZBOX EN860, 16GB RAM, 2 TB HDD, Debian Stretch, vdr-2.4.1, softhddevice, satip

  • 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:


  • 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.

    VDR: Zotac ZBOX EN860, 16GB RAM, 2 TB HDD, Debian Stretch, vdr-2.4.1, softhddevice, satip