[dash2ts] Stream IPTV/Zattoo mit inputstream-adaptive und widevine

  • Ich habe mal unter yavdr einen Test gestartet, daher der andere Pfad zu Kodi. Von on.orf.at habe ich mir eine URL einer offenen Sendung kopiert, was dann so aussieht:

    /usr/local/bin/dash2ts -u https://on.orf.at/video/14259531/pressekonferenz-neue-albertina-direktion-praesentiert-ausstellungsprogramm -p 333 -k /usr/lib/x86_64-linux-gnu/kodi

    Leider bekomme ich dann folgende Fehlermeldung:

    -------Start---------
    Error: 3
    Can't Open URL

    Habe ich einen Denkfehler?

  • Leider bekomme ich dann folgende Fehlermeldung

    Deine URL zeigt nicht auf ein Manifest. Um direkt URLs zu finden teste ich immer mit uBlock und dem Stream Analyzer. Dort suche ich dann nach dem Starten des Stream nach einer URL die mit manifest.mpd endet. Das ist dann die URL zum Stream.

    Ich habe heute mal etwas mit Zattoo getestet. Das funktioniert auch. Da kannst du mal mit der URL siehe unten testen. Ich weiss aber nicht wie lange die aktuell bleibt.

    Edited once, last by jojo61 (January 22, 2025 at 8:43 AM).

  • Auch diese URL resultiert in Can't Open URL.

    Hmmm dann hänge mal ein -v an die Parameter dran. Dann gibt es ein erweitertes Log. Hast du die aktuellste Version aus dem GIT ?

    Evtl stimmt ja doch etwas nicht mit dem Pfad. Am Ende des Pfades muss es mit addons/inputstream.adaptive weitergehen. Das hängt das Programm an den Pfad dran um zum plugin zu kommen.

  • #> git pull https://github.com/jojo61/dash2ts.git
    Von https://github.com/jojo61/dash2ts
    * branch HEAD -> FETCH_HEAD
    Bereits aktuell.

    #> /usr/local/bin/dash2ts -v -u https://vod-ww.mdn.ors.at/cms-worldwide_…il/manifest.mpd -p 333 -k /usr/lib/x86_64-linux-gnu/kodi
    -------Start---------
    Path /usr/lib/x86_64-linux-gnu/kodi
    drm_token:
    Server Port 333
    Error: 3
    Use lib: /usr/lib/x86_64-linux-gnu/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.20.3.18 with API Version 0
    Addon LOG: Open()
    Addon LOG: Property found "inputstream.adaptive.license_key" value: [redacted]
    Addon LOG: Property found "inputstream.adaptive.license_type" value: com.widevine.alpha
    Addon LOG: Property found "inputstream.adaptive.stream_selection_type" value: adaptive
    Can't Open URL

  • Ok. Nun wird es etwas komplizierter. Du nutzt Kodi 20 und ich nutze die Kodi include Files von Kodi 21. Evtl. hat sich da etwas an den Strukturen geändert und das API des plugin ist damit nicht kompatibel. Der Error 3 beim laden deutet darauf hin.

    Es gibt nun 2 Möglichkeiten. a) du besorgst dir das inputstream-adaptive plugin von Kodi 21 und testest mal damit oder b) du tauschst die include Dateien unter dash/src/addons mit denen von Kodi 20 aus. Da kannst du einfach den gazen Baum "kodi-dev-kit" von Kodi 20 hinkopieren. Ich habe die dunkle Vermutung das ich dash2ts für die jeweilige Kodi Version extra compilieren muss. Das wäre dann doof.

    PS: dein link zum ORF funktioniert bei mir.

    Edited once, last by jojo61 (January 20, 2025 at 9:36 AM).

  • Du nutzt Kodi 20 und ich nutze die Kodi include Files von Kodi 21.

    Ich denke gerade darüber nach, ob ich für VDR*ELEC die Includes vor dem make aus der entsprechenden Version kopieren soll. Vorteil wäre, daß die jeweilige Version der Includes verwendet wird. Nur falls es dann zu Build-Problemen aufgrund Änderungen der Includes kommt, hänge ich wieder in den Seilen. Ich weiß nur nicht, wie oft so etwas passiert.

    Die Includes sind unverändert übernommen worden von kodi/xbmc/addons/kodi-dev-kit/include/kodi?

  • Die Includes sind unverändert übernommen worden von kodi/xbmc/addons/kodi-dev-kit/include/kodi?

    Ja so ist es. Ab /kodi-dev-kit habe ich es einfach rüberkopiert. Wie wird das denn im Kodi Baum gemacht? Dort werden doch auch einige plugins mitcompiliert ? Die brauchen doch auch diese includes.

    Ich habe das ganze nun etwas umgebaut und das main() ganz klein gemacht. Ich will das man den rest dann auch in femde Programme dazulinken kann. Dazu habe ich dann entsprechend zwei Klassen definiert.

    Ausserdem brauche ich das auch um meine Idee von einem Zattoo Streamer umzusetzen :)

    Kommt bald ins Git.

  • Ja so ist es. Ab /kodi-dev-kit habe ich es einfach rüberkopiert. Wie wird das denn im Kodi Baum gemacht? Dort werden doch auch einige plugins mitcompiliert ? Die brauchen doch auch diese includes.

    Das Build Verzeichnis von Kodi ist bekannt (und kann dynamisch bestimmt werden, Versionsunabhängig) und man kommt damit auch an das Include Verzeichnis.

    Ich habe das dash2ts etwas gepatched und genau die Includes aus dem aktuellen Kodi verwenden lassen. Dabei habe ich dann gesehen, daß CoreELEC 20 wohl nicht funktioniert bzw. ich würde da ziemliche Probleme erwarten, wenn die CE21 Header verwendet werden.

    Das Problem ist der audioconverter.h bzw. der profile Parameter. Die ganzen Werte für AACCodecProfile* gibt es in den Includes von CE20 gar nicht. Dort finde ich nur H264, VP9 und AV1.

    Dazu fällt mir keine Lösung ein, außer dash2ts für CE20 aus dem Build zu nehmen, obwohl ich das selbst produktiv noch einsetze.

  • Ich denke du musst es wohl erstmal aus dem Build von CE20 rausnehmen. Ich schau mir das dann mal an. Ich kann es ja einzeln in CE20 versuchen zu bauen und schauen wo es hakt.

    Dazu bräuchte ich deine Änderungen am package.mk

    Ich habe nun ins GIT die umgebaute Version gepusht. Da kannst du mal in dash2ts.cpp schauen wie man das ganze evtl. in eigene Programme verlinkt. Ich habe versucht möglichst alles in zwei c++ Klassen zu verbergen.

    Wäre super wenn du das package.mk dafür anpassen könntest. Hier die die passende Version (ohne deine Änderungen).

  • Dazu bräuchte ich deine Änderungen am package.mk

    Der Patch für dash2ts ist besteht aus 2 Teilen:
    Im Makefile habe ich den Include-Pfad für Kodi konfigurierbar gemacht und in den Sourcen die Includes geändert.
    Also z.B. "addons/kodi-dev-kit/include/kodi/versions.h" geändert in "kodi/versions.h".

    Ich muss erst einmal das Bauen für CoreELEC-20 verhindern, bevor ich committen kann. Ansonsten geht der Build schief.

  • Ich habe Variante b) getestet und kann die Probleme mit audioconverter.h bestätigen.

    #> sudo apt-cache policy kodi-addon-dev
    kodi-addon-dev:
    Installiert: 6:20.2+git20230630.0528-5f418d0b13-0yavdr1~jammy
    Installationskandidat: 6:20.2+git20230630.0528-5f418d0b13-0yavdr1~jammy
    Versionstabelle:
    *** 6:20.2+git20230630.0528-5f418d0b13-0yavdr1~jammy 500
    500 https://ppa.launchpadcontent.net/seahawk1986-ho…mmy-kodi/ubuntu jammy/main amd64 Packages
    100 /var/lib/dpkg/status

    #> ls -l /usr/include/kodi
    insgesamt 296
    -rw-r--r-- 1 root root 65856 Mai 12 2013 AddonBase.h
    drwxr-xr-x 5 root root 4096 Jan 20 17:03 addon-instance
    -rw-r--r-- 1 root root 24830 Mai 12 2013 AudioEngine.h
    drwxr-xr-x 5 root root 4096 Jan 20 17:03 c-api
    -rw-r--r-- 1 root root 90897 Mai 12 2013 Filesystem.h
    -rw-r--r-- 1 root root 26552 Mai 12 2013 General.h
    drwxr-xr-x 6 root root 4096 Jan 20 17:03 gui
    -rw-r--r-- 1 root root 9468 Mai 12 2013 Network.h
    drwxr-xr-x 3 root root 4096 Jan 20 17:03 platform
    drwxr-xr-x 2 root root 4096 Jan 20 17:03 tools
    -rw-r--r-- 1 root root 22814 Mai 12 2013 versions.h
    -rw-r--r-- 1 root root 23454 Mai 12 2013 xbmcclient.h


    #> ls -l src/addons/kodi-dev-kit/include/kodi
    lrwxrwxrwx 1 vdr vdr 17 Jan 20 17:09 src/addons/kodi-dev-kit/include/kodi -> /usr/include/kodi

    #> make
    mkdir -p build/./src/
    g++ -I./src -I./src/mpegts -I./src/addons -I./src/addons/kodi-dev-kit -I./src/addons/kodi-dev-kit/include -I./src/kodi-dev-kit/include -I/usr/local/include -MMD -MP -ggdb -c src/dash2ts.cpp -o build/./src/dash2ts.cpp.o
    In file included from src/dash2ts.cpp:39:
    src/audioconverter.h: In function ‘int ConvertAudioCodecProfile(int)’:
    src/audioconverter.h:21:10: error: ‘AACCodecProfileMAIN’ was not declared in this scope; did you mean ‘AV1CodecProfileMain’?
    21 | case AACCodecProfileMAIN:
    | ^~~~~~~~~~~~~~~~~~~
    | AV1CodecProfileMain
    src/audioconverter.h:23:10: error: ‘AACCodecProfileLOW’ was not declared in this scope; did you mean ‘VP9CodecProfile3’?
    23 | case AACCodecProfileLOW:
    | ^~~~~~~~~~~~~~~~~~
    | VP9CodecProfile3
    src/audioconverter.h:25:10: error: ‘AACCodecProfileSSR’ was not declared in this scope; did you mean ‘VP9CodecProfile3’?
    25 | case AACCodecProfileSSR:
    | ^~~~~~~~~~~~~~~~~~
    | VP9CodecProfile3
    src/audioconverter.h:27:10: error: ‘AACCodecProfileLTP’ was not declared in this scope; did you mean ‘VP9CodecProfile3’?
    27 | case AACCodecProfileLTP:
    | ^~~~~~~~~~~~~~~~~~
    | VP9CodecProfile3
    src/dash2ts.cpp: In function ‘int main(int, char**)’:
    src/dash2ts.cpp:386:27: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
    386 | AddSettingString(NULL,"DECRYPTERPATH",decrypt.c_str());
    | ^~~~~~~~~~~~~~~
    src/dash2ts.cpp:387:27: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
    387 | AddSettingString(NULL,"debug.save.license","false");
    | ^~~~~~~~~~~~~~~~~~~~
    src/dash2ts.cpp:388:27: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
    388 | AddSettingString(NULL,"debug.save.manifest","false");
    | ^~~~~~~~~~~~~~~~~~~~~
    make: *** [Makefile:48: build/./src/dash2ts.cpp.o] Fehler 1

  • Wäre super wenn du das package.mk dafür anpassen könntest. Hier die die passende Version (ohne deine Änderungen).

    Ich habe die Änderungen committed. Ich denke, der Patch hat mit VDR*ELEC nichts zu tun, sondern kann auch für andere Systeme verwendet werden. Im Makefile gibt es einen Default

    Code
    KODI_ADDON_INCLUDE ?= src/addons/kodi-dev-kit/include

    der dann für VDR*ELEC im package.mk überschrieben wird, damit die CE/LE Version verwendet wird.

    Wenn der Build für CE20 erfolgen soll, dann muss in packages/virtual/vdr-all/package.mk das if entfernt werden.

    Code
    if [ "${DISTRONAME}" = "CoreELEC" ] && [ "${OS_MAJOR}" -ge "21" ]; then
       PKG_DEPENDS_TARGET+=" dash2ts"
    fi

    header-makefile.patch.txt

  • Also z.B. "addons/kodi-dev-kit/include/kodi/versions.h" geändert in "kodi/versions.h".

    Du kannst mir die Änderungen auch vorab schicken. Ich werde sie eh übernehmen, dann brauchst du erst gar keinen patch einchecken.

    ch habe Variante b) getestet und kann die Probleme mit audioconverter.h bestätigen.

    Ich werde mir das morgen mal mit CE20 anschauen.

    Es gibt aber natürlich immer die Möglichkeit sich das inputstream.adaptive von CE21 zu besorgen und es in einen bliebigen Pfad zu legen. Diesen Pfad dann einfach dem dash2ts mitgeben.

    <bliebiger_pfad>/addons/inputstream.adaptive/..... und <beliebiger_pfad>/cdm/widevine.so

    Das wird ja nicht von CE20 gebraucht und auch nicht genutzt und läuft dann eben daneben.

  • Nach einigem Kopfweh ist es mir nun auch gelungen das ganze unter Kodi 20 zum laufen zu bringen.

    Um nicht noch mehr Pfade übergeben zu müssen braucht es unter Kodi 20 (wie auch bei allen anderen Versionen) folgende Struktur:

    <übergebener_Pfad_zu_Kodi>/addons/inputstream.adaptive/inputstream.adaptive.so.xx.yy.zz wobei xx 20,21, oder 22

    <übergebener_Pfad_zu_Kodi>/addons/inputstream.adaptive/libssd_wv.so

    <übergebener_Pfad_zu_Kodi>/cdm/libwidevinecdm.so

    Falls die Struktur unter Kodi 20 nicht so ist dann muss man das mit Symlinks so erzeugen.

  • Kompiliert jetzt auch bei mir mit Kodi 20. :thumbup:

    Beim Abspielen mit mpv bekomme ich folgende Fehlermeldung:

    #> mpv udp://localhost:333
    [ffmpeg] udp: bind failed: Permission denied
    Failed to open udp://localhost:333.

    #> lsof -i|grep dash
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    dash2ts 1881 vdr 3u IPv4 10220 0t0 UDP localhost:32924->localhost:333

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!