vdr-live-plugin HTML5 Web-Streaming

  • Hallo,


    Für jene die sich da mal damit versuchen wollen:


    https://github.com/REELcoder/vdr-plugin-live


    Es wird ein neueres ffmpeg benötigt. Ich habe ein static-build in /tmp/. Temporäre Streaming-Dateien werden in /tmp/live-hls-buffer/ angelegt.


    ffmpeg wandelt den 1. Audiostream auf AAC um. Der Video-Stream wird nur durchkopiert. Für die meisten Browser bedeutet das, dass nur HD Sender mit H264 Stream funktionieren.




    Viel Spass

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

  • Es wird ein neueres ffmpeg benötigt.

    Reicht ffmpeg 3.4.4?


    ... anscheinend nicht, ich bekomme ein: hls:networkError_manifestLoadTimeOut

  • Ich hatte mir letzte Woche ein static build von https://johnvansickle.com/ffmpeg/ geholt. Es war die letzte git Version. Erst damit hat ffmpeg brauchbare master m3u8 Playlists mit der Option -master_pl_name erstellt.


    In /tmp/live-hls-buffer sollte eine Datei master_<Kanalnummer>.m3u8 erstellt werden die dann auf die ffmpeg_<Kanalnummer>_<timestamp>.m3u8 verweist.


    Beobachte mal was in /tmp/live-hls-buffer und syslog passiert.


    Gruss, Xcoder

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

  • Bei mir mit ffmpeg 4.1 läuft es nicht:



    vdr-User-# 755 to_h264 chk_r

  • Hi,


    dann ist ffmpeg-3.3.0 wohl auch to Old!

    Code
    1. vdr: [22320] vdrlive::stream_data::f_worker(0x7f18d800dfe0)
    2. vdr: [25601] stream utility handler thread started (pid=17981, tid=25601, prio=high)
    3. vdr: [25601] Live: FFmpegTread::Action() started channel = 1
    4. vdr: [25601] Live: FFmpegTread::Action::Open(1) ffmpeg started
    5. vdr: [25601] Live: FFmpegTread::Action() ffmpeg starting... 0
    6. vdr: [21272] vdrlive::stream_data::f_worker(0x7f18d800dfe0)
    7. vdr: [21272] vdrlive::stream_data::mimetype(application/x-mpegURL)
    8. vdr: [21272] vdrlive::stream_data::session(3813e444ccf8da209042cd86682d7d57)
    9. vdr: [21272] vdrlive::stream_data::path(/tmp/live-hls-buffer/master_1.m3u8)
    10. vdr: [21272] vdrlive::stream_data::is_open(false) 50 /tmp/live-hls-buffer/master_1.m3u8


    Gruss

    Wolfgang

  • Bei mir mit ffmpeg 4.1 läuft es nicht:


    Code
    1. vdrlive::stream_data::mimetype(application/vnd.apple.mpegurl)
    2. vdrlive::stream_data::session(4244c557cc825d75f0293f21b349bf18)
    3. vdrlive::stream_data::path(/tmp/live-hls-buffer/master_20.m3u8)
    4. vdrlive::stream_data::is_open(false) 2 /tmp/live-hls-buffer/master_20.m3u8
    5. vdrlive::stream_data::is_open(false) 1 /tmp/live-hls-buffer/master_20.m3u8
    6. vdrlive::stream_data: DECLINED

    @jfsffm: Bei deinem System werden m3u8 Dateien als Mime-Type application/vnd.apple.mpegurl erkannt. Da hast du wohl eine andere /etc/mime<irgendwas>.


    Ich matche in stream_data.ecpp auf application/x-mpegURL und stelle den timeout für das erscheinen der master*.m3u8 auf 10 sekunden. Da es bei dir nicht application/x-mpegURL ist, wird nur ein Timeout von 400 ms genommen. So schnell ist ffmpeg aber nicht und wird vorzeitig totgeschlagen.


    Ich matche wohl besser auf die Dateiendung statt auf den Mime Type. Danke für den Hinweis.


    wolfi.m Vermutlich wir es schon 4.x sein müssen. Habe jetzt nicht genau nachgeprüfft ab wann da die ffmpeg Option -master_pl_name richtig funktioniert. Offenbar hat sich bei ffmpeg bei HLS kürzlich noch relativ viel getan.


    Gruss, Xcoder

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

  • Hi,

    Offenbar hat sich bei ffmpeg bei HLS kürzlich noch relativ viel getan.

    so wird es sein! ...mit ffmpeg aus static-build funktioniert es, Merci!:tup




    P.S

    Build i386 läuft auf Launchpad(PPA) nicht durch,amd64 ist Ok.

    Build-Log dazu poste ich später!


    Gruss

    Wolfgang

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von wolfi.m ()

  • eine schöne Funktion :]

    Könnte man evtl. den alten Streaming-Button "Sendung im Browser zeigen" auch so konfigurieren, das das neue HTML5-Streaming damit gestartet würde?
    Nur so als Idee ohne Ahnung zu haben ;D

    Achso, bei mir hilft es meistens den gewünschten Sender nochmals zu starten, dann ist er garantiert zu sehen (timeout?)

    Gruß, jo01

  • jo01 Klar kommt sobald alles sauber funktioniert. Da gibt es schon noch einiges zu tun... Aufnahmen fehlen natürlich auch noch.


    Bei mir klemmt gelegentlich der streamdev-server. Dann hängt ffmpeg und wird durch das cPipe::Close() abgehängt und läuft aber weiter. Ich bin noch dabei den ffmepg Prozess besser zu steuern und nach Ablauf des Timout abzuschiessen wenn etwas am hängen ist.


    Eeleganter wäre es natürlich ohne streamdev-server zu arbeiten und selber cReceiver zu implementieren.


    Ob der clappr HTML5-Player die beste Lösung ist, kann man auch noch prüffen.


    Gruss, Xcoder

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

  • jo01 Klar kommt sobald alles sauber funktioniert. Da gibt es schon noch einiges zu tun... Aufnahmen fehlen natürlich auch noch.

    Uih, der "Sabber"-Reflex setzt auf einmal schlagartig ein ;)

    Es ist schön wenn sich noch etwas am Live-Plugin tut:
    Auch im Jahr 2018 (bald 2019) ist das bei mir noch dauerhaft auf dem VDR-Serverlein im Einsatz.
    Daher freue ich mich über jede Neuerung :]

    jo01

  • M-Reimer eine native Playlist bietet doch streamdev-server schon selber an: http://<server>:3000/channels.m3u Oder was meinst Du genau?


    Die aktuelle Version auf github hat jezt einverbessertes Handling des ffmpeg Prozesses. Jetzt sollten keine toten ffmpeg's mehr hängenbleiben.


    Gruss

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

  • Mein Gedanke war, eine M3U auszuliefern, die praktisch genau den Sender, bei dem im Webinterface auf "Play" geklickt wurde, extern in einem Viewer startet.


    Dann könnte man direkt aus dem Webinterface beliebige Streams "extern" starten. Zum Beispiel wieder in VLC.


    Zumindest für mich bringt halt reines HD-Streaming nichts. Und zumindest ich lege wenig Wert darauf, dass Streaming direkt im Browser läuft. Wenn vom Browser aus ein externes Programm gestartet wird ist OK.


    Nur die wenigsten Programme nutze ich in HD, da ich definitiv nie für HD+ zahlen werde. Wenn die Privaten wirklich SD abschalten, dann gibt's für mich halt keine Privatsender mehr. Kann ich gut mit leben.

  • Bei ffmpeg 4.1 bekomme ich folgendes:



    vdr-User-# 755 to_h264 chk_r

  • Bei Chrome sieht das anders aus:



    Code
    1. Nov 30 11:27:19 gentoo vdr[9841]: [10307] vdrlive::stream_data::f_worker(0x7f5f680107c0)
    2. Nov 30 11:27:19 gentoo vdr[9841]: [10307] vdrlive::stream_data::mimetype(application/vnd.apple.mpegurl)
    3. Nov 30 11:27:19 gentoo vdr[9841]: [10307] vdrlive::stream_data::session(0fd4c3c3542cd4ff01d932ab3e7d96cd)
    4. Nov 30 11:27:19 gentoo vdr[9841]: [10307] vdrlive::stream_data::path(/tmp/live-hls-buffer/master_1.m3u8)
    5. Nov 30 11:27:19 gentoo vdr[9841]: [10307] vdrlive::stream_data::is_open(false) 2 /tmp/live-hls-buffer/master_1.m3u8
    6. Nov 30 11:27:19 gentoo vdr[9841]: [10307] vdrlive::stream_data::is_open(false) 1 /tmp/live-hls-buffer/master_1.m3u8
    7. Nov 30 11:27:19 gentoo vdr[9841]: [10307] vdrlive::stream_data: DECLINED


    vdr-User-# 755 to_h264 chk_r

  • jsffm Im ersten Fall ist einfach vom streamdev-server nichts gekommen und ffmpeg hat nicht zu arbeiten begonnen. Es werden maximal 2 Versuche gemacht. Offenbar gibt es beim streamdev-server noch irgend einen Bug. Manchmal kommt einfach beim ersten Versuch nichts. Habe ich gelegentlich auch, vor alle wenn der VDR Prozess gerade neu gestartet wurde.


    2 Fall: Korrigiere ich noch. Als Workaround kannst du in /etc/mime.types folgendes für m3u8 definieren:


    Code
    1. application/x-mpegURL m3u8

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

  • Der Eintrag ist bereits enthalten


    vdr-User-# 755 to_h264 chk_r

  • jsffm

    hast du einen Test mit static-build gemacht um auszuschliessen das es nicht an

    dem installierten ffmpeg liegt?


    P.S

    Habe bei mir in der "ffmpeg.cpp" Zeile 64

    Code
    1. "exec /tmp/ffmpeg -loglevel warning "

    durch

    Code
    1. "exec /opt/ffmpeg -loglevel warning "

    ersetzt damit bleibt mir das File nach reboot erhalten.


    Gruss

    Wolfgang

  • hast du einen Test mit static-build gemacht um auszuschliessen das es nicht an

    dem installierten ffmpeg liegt?

    Nein, habe ich nicht.


    vdr-User-# 755 to_h264 chk_r

  • Spitzenmäßig, ich habe gerade meinen VDR headless auf reinen Streamingbetrieb umgestellt. Da kommt die neue Funktion wie gerufen.

    Davon abgesehen, dass ab und zu der Stream nicht beim ersten Versuch startet, läuft es schon ziemlich gut.


    Besten Dank für diese MEGA-sinnvolle Erweiterung und schon mal vorweg für die kommende bessere Integration. :-)

    Dr. Brömme grübelt:
    Acht Wochen, nachdem man ihm beim Kölner Straßenkarneval einen Gratiskorn angeboten hatte,
    dämmert ihm langsam, dass er einem hinterlistigen Alaafisten aufgesessen ist.