vdr-live-plugin HTML5 Web-Streaming

  • Hi,

    tja, wenn das denn alle mitmachen...


    Aber wird hier ne OT Diskussion!


    Wenn umstellen, dann wohl eher auf h.265! h.264 ist doch auch aussterbend!


    MFg,

    Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easy-vdr.de

  • Hallo,

    Video Stream Transcoding Parameter sind in Live-Einstellungen konfigurierbar.

    wollte mit GPU testen, geht leider nicht mit "ffmpeg-static" - kein Encoder "h264_nvenc" für meine GT630



    Code
    V..... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
    V..... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
    V..... h264_v4l2m2m         V4L2 mem2mem H.264 encoder wrapper (codec h264)
    V..... h264_vaapi           H.264/AVC (VAAPI) (codec h264)
    V..... libx265              libx265 H.265 / HEVC (codec hevc)
    V..... hevc_vaapi           H.265/HEVC (VAAPI) (codec hevc)


    Encoder "ffmpeg-3.3.0"

    Code
    V..... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
    V..... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
    V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
    V..... h264_vaapi           H.264/AVC (VAAPI) (codec h264)
    V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
    V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
    V..... libx265              libx265 H.265 / HEVC (codec hevc)
    V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
    V..... hevc_vaapi           H.265/HEVC (VAAPI) (codec hevc)


    Gruss

    Wolfgang

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

  • Das Feld für die Konfiguration könnte was größer sein.


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

  • Das nächste Problem, bei hevc wäre die Dekodierung per GPU wichtig, das muss aber vor -i <input> angegeben werden. Derzeit nur Angaben für Encoding möglich.


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

  • Geht das nicht, wenn dieser Parameter in den Packetizer command kommt? Dann wäre es nur noch vor "-analyzeduration 1.2M -probesize 5M".

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

  • Das Problem ist, das es unterschiedlich ist, ob mpeg2 oder hevc.


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

  • Hi,


    Idee finde ich super, jetzt bin ich auch endlich mal zum Testen gekommen. Allerdings bekomme ich weder in Chrome noch in Firefox ein Bild. Fehler Chrome:

    Cloud not play video - Error code: hls:4 - Firefox: FF: Error code: hls:networkError_manifestLoadError


    Als Inputs habe ich hier DVB-C über lokale DVB-Karte und sat-ip. Beides gibt selbes Fehlerbild - ich vermute es liegt irgendwie an der Erkennung des Video-Codecs (-analyzeduration 1.2M -probesize 5M)


    vdr log sieht eigentlich gut aus, ich denke es liegt irgendwie am Videostream (Consider increasing the value for the 'analyzeduration' and 'probesize' options)


    Wenn ich ffmpeg direkt starte, sieht es eigentlich auch gut aus, es werden diverse Files ffmpeg_5_data* erstellt, allerdings sind sie meistens (?) mit VLC nicht abspielbar

    Beispiel ARD HD per satip - Originalwerte -analyzeduration 1.2M -probesize 5M


    Alternativ ARD HD per satip - Werte für -analyzeduration 2.2M -probesize 10M

    eigentlich gleiche Fehlermeldungen, die Files ffmpeg_5_data* sind aber immer (?) mit VLC abspielbar


    Irgendwelche Ideen, woran das liegen kann? Bzw. welche Logfiles oder Tests helfen, den Fehler weiter einzugrenzen?


    Ausgangsbasis: vdr-2.4.0 auf Ubuntu 16.04 mit ffmpeg 4.0.3-1~16.04.york0 (von hier https://launchpad.net/~jonathonf/+archive/ubuntu/ffmpeg-4) oder auch ffmpeg N-47764-g16ec62bbf4-static (https://johnvansickle.com/ffmp…g-git-amd64-static.tar.xz)


    Danke

    bärti

  • Änderung der Konfiguration funktioniert bei mir nicht, nach Änderung steht wieder der alte Inhalt da.


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

  • bärti analizeduration/probesize kommt immer wegen den Datenstreams die von den Sendern parallel mitgesendet werden. Wichtig ist dass der Video-Stream (normalerweise 0:0) und ein Audio-Stream (0:1) korrekt erkannt werden.


    • hls:networkError_manifestLoadError kommt gelegentlich wenn der ffmpeg nicht schnell genug mit der Erzeugung der ersten Dateien war. Das sollte nach max 10 s erfolgen. Desshalb ist analizeduration/probesize recht klein gewählt. In diesem Fall einfach die Seite neu laden.
    • hls:4 ist vermutlich ein Poblem mit dem Audio-Format. Bitte liefere eine TS Datei aus /tmp/live-hls-buffer/ wenn das mit neuladen der Seite nicht weggeht.

    Ansonsten ist in deinem Fall alles richtig gelaufen. ffmpeg wurde nach 60 Sekunden beendet weil vom Browser nichts mehr geholt wurde.

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

  • Die ersten 2 Parameter geändert durch:

    Code
    h264_nvenc -preset fast

    bringt schon etwas Besserung.


    Was halt noch fehlt ist die Dekodierung durch die GPU


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

  • Besser:

    Code
    h264_nvenc -preset llhp

    ich habe mal testhalber decoding eingetragen für hevc:


    Code
    -c:v hevc_cuvid

    dann geht aber nur noch hevc, kein h264, kein mpeg2.


    Hier die Auslastung der GPU, man sieht deutlich, dass das decoding die meiste Last bringt. Die CPU-Last ist dabei sehr gering.

    Code
    # gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk
    # Idx     W     C     C     %     %     %     %   MHz   MHz
        0    27    46     -    20    12     5    24  3304  1037


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

  • Hi,


    mein Problem ist behoben, dummer Fehler meinerseits.

    Ich nutze live normalerweise hinter einem nginx als reverse proxy, wenn ich live direkt aufrufe, klappt alles wie es soll. Aus Gewohnheit hatte ich da nicht mehr dran gedacht. Ziemlich cool!


    Hier gibt es denke ich noch einen kleinen Bug, dann würde es auch hinter dem reverse proxy funktionieren

    Der HLS-Player versucht immer "/media/master_1.m3u8" zu laden, also mit "/" zu Beginn als absoluter Pfad.

    - direkt hinter live klappt das als http://home:8008/media/master_1.m3u8

    - der reverser proxy macht liefert live als http://home/live/ aus, da wird dann ein http://home/media/master_1.m3u8 - home/media gibt es aber nicht


    Eine Änderung von "/media/master_1.m3u8" nach "media/master_1.m3u8" sollte das beheben und auch hinter dem reverse proxy funktionieren.


    Ich habe mir das solange per nginx-config gefixt

    Code
    location /media/ {
            proxy_pass                            http://192.x.x.x:8008/media/;
            proxy_set_header Host                 $http_host;
            proxy_set_header X-Real-IP            $remote_addr;
            proxy_set_header X-Forwarded-For      $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto    $scheme;



    ciao

    chris

  • bärti schaue ich mir an.


    jsffm Kannst Du mir mal für alle bei dir relevenanten Fälle das vollständige ffmpeg Kommando geben. Es findet sich sicher eine Lösung die alle Fälle abdeckt. Ich habe bei mir nun auch GPU encoding am laufen. Decoding habe ich aber noch nicht hingekriegt.

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

  • Mit


    ffmpeg -decoders | grep cuvid


    bekommst Du die möglichen decoders angezeigt:


    Code
     V..... h264_cuvid           Nvidia CUVID H264 decoder (codec h264)
     V..... hevc_cuvid           Nvidia CUVID HEVC decoder (codec hevc)
     V..... mjpeg_cuvid          Nvidia CUVID MJPEG decoder (codec mjpeg)
     V..... mpeg1_cuvid          Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
     V..... mpeg2_cuvid          Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
     V..... mpeg4_cuvid          Nvidia CUVID MPEG4 decoder (codec mpeg4)
     V..... vc1_cuvid            Nvidia CUVID VC1 decoder (codec vc1)
     V..... vp8_cuvid            Nvidia CUVID VP8 decoder (codec vp8)
     V..... vp9_cuvid            Nvidia CUVID VP9 decoder (codec vp9)  


    Es muss vor -i <input> folgendes eingefügt werden:

    Code
    h264       - (nichts - rien - nothing)
    mpeg2video -c:v mpeg2_cuvid
    hevc       -c:v hevc_cuvid


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

  • So nun ist das Kommando für ffmpeg voll flexibel.


    Bei mit geht nun GPU transcoding auch. Das Problem war eine zu alte NVIDIA Treiber-Version, mit 410 läuft nun auch das decoding über die GPU


    Ich habe dafür folgendes in der vdr setup.conf:


    Code
    live.StreamVideoOpt0 = ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -hwaccel cuvid -c:v h264_cuvid -i <input> -map 0:v -map 0:a:0 -c:v h264_nvenc -preset slow -qmin 18 -qmax 30 -g 25 -r 25 -c:a aac -ac 2
    live.StreamVideoOpt1 = ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -i <input> -map 0:v -map 0:a:0 -c:v h264_nvenc -preset slow -qmin 18 -qmax 30 -g 25 -r 25 -c:a aac -ac 2
    live.StreamVideoOpt2 = ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -hwaccel cuvid -c:v mpeg2_cuvid -i <input> -map 0:v -map 0:a:0 -c:v h264_nvenc -preset slow -qmin 18 -qmax 30 -g 25 -r 25 -c:a aac -ac 2
    live.StreamVideoOpt3 = ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -i <input> -map 0:v -map 0:a:0 -c:v h264_nvenc -preset slow -qmin 18 -qmax 30 -g 25 -r 25 -c:a aac -ac 2


    Bitte die Life - Einstellungen anpassen/löschen da es da prinzipielle Änderungen gibt.

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

    Einmal editiert, zuletzt von Xcoder ()

  • Wo finde ich da den Eintrag für hevc? Warum wird h264 transkodiert?


    Edit:


    Im Code ist die Erklärung: Opt1 = hevc.


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

  • Meine Einstellung für hevc:


    Code
    ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -c:v hevc_cuvid -i <input> -map 0:v -map 0:a:0 -c:v h264_nvenc -preset llhp -c:a aac -ac 2

    Edit:


    Die Bezeichnung h265 für hevc ist zwar korrekt, aber nicht gebräuchlich.


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

  • jsffm passe die Bezeichnungen noch an. Läuft bei Dir alles? Ich kann hevc mit GPU nicht prüfen da mein Barebone "nur" eine 1st Gen Maxwell GPU hat. HEVC geht leider erst mit Pascal.


    H264 transcodiere ich um die Datenrate auf mein 1MByte Upload Limit anzupassen. Dann kann ich auch von aussen über VPN streamen.


    Default werde ich aber auf Software transcoding lassen, da die ffmpeg static builds nur das unterstützen.


    Hat hier jemand eine Intel oder AMD GPU mit welcher man GPU transcoding laufen lassen könnte? Mit RaspPI sollte auch was zu machen sein...

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

  • Ich habe noch scaling auf hd720 ergänzt:


    Code
    ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -c:v hevc_cuvid -i <input> -map 0:v -map 0:a:0 -c:v h264_nvenc -preset llhp -s hd720 -c:a aac -ac 2


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

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!