Ich habe noch ein paar crashes behoben Nun sollten auch unverschlüsselte streams wieder funktionieren.
[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.
-
Danke für das Beispiel. Ich bekomme leider die gleiche Fehlermeldung.
Ich habe dann in Firefox
https://on.orf.at/video/14259531…ellungsprogramm laufen lassen und mit der Netzwerkanalyse nach manifest.mpd gefiltert:https://vod-ww.mdn.ors.at/cms-worldwide_…il/manifest.mpd
Auch diese URL resultiert in Can't Open URL. Ein wget kann das Manifest herunterladen.
-
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.
-
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
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.
-
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.
-
Zabrimus HIer das passende package.mk
Du musst den header patch nun wieder rausnehmen.
PS: das ganze lief nun auch unter Kodi 20 mit den Kodi 21er includes. Das scheint doch nicht ganz so kritisch zu sein.
-
Du musst den header patch nun wieder rausnehmen.
PS: das ganze lief nun auch unter Kodi 20 mit den Kodi 21er includes. Das scheint doch nicht ganz so kritisch zu sein.
Perfekt. Ich habe es drin und es baut auch wieder für CE20.
-
Kompiliert jetzt auch bei mir mit Kodi 20.
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 -
mpv udp://localhost:333
Ports unter 1024 sind nicht immer die beste Wahl. Probiere mal einen Port > 1024 aus. Oder probierst du das als root?
-
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!