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

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von uwe67 ()

  • Da es frei konfigurierbar ist, sollte das direkt machbar sein.


    vdr-User-# 755 to_h264 chk_r

  • 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

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

  • Xcoder


    ...mit fix von Heute wieder alles Ok!


    Merci & Gruss

    Wolfgang

  • 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.2.0, softhddevice, permashift, 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

  • 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.2.0, softhddevice, permashift, satip