Not compiling because at line 125 of /po/ca_Es.po
Quote
msgstr ""STREAM
instead of
Quote
msgstr "STREAM"
Not compiling because at line 125 of /po/ca_Es.po
Quote
msgstr ""STREAM
instead of
Quote
msgstr "STREAM"
Not compiling because at line 125 of /po/ca_Es.po
My bad The language files are useful, but sometimes ....
Fixed in the repository. Thanks
Moin Zabrimus,
ich hätte da noch eine Anregung, vielleicht kannst Du die mit auf die Wunschliste setzen (falls es eine gibt ) :
Es gibt Sender, die nur über youtube ausstahlen. Der lokale Privatsender Hamburg 1 macht das z.B. so. Die noch in diversen Listen, so auch bei Kodi, aufgeführte Adresse https://stream.hamburg1.de/live_abr/hamburg1_abr/live/hamburg1_720p/chunks.m3u8 gibt es nicht mehr. Der Sender musste nach einem Insolvenzantrag wohl Geld sparen und verlinkt unter https://www.hamburg1.de/livestream/ jetzt nur noch auf seinen Youtube-Kanal. Es gibt zwar Tools, mit denen man die m3u-Adresse aus einem Youtube-Link ermitteln kann. Das sind dann ellenlange Adressen, die mit https://manifest.googlevideo.com/api/manifest/hls_variant/expire/ anfangen. Und das Wort expire zeigt auch schon, wo der Hase im Pfeffer liegt: Die Streamadressen sind anscheinend nur tagesgültig. Vielleicht ist es möglich, die Ermittlung der m3u zu einer Youtube-Adresse im Plugin zu integrieren, so dass man eine youtube-Adresse hinterlegen kann, für die bei jedem Aufruf dann die jeweils gültige m3u intern ermittelt wird?
Youtube-Videos waren schon auf meiner persönlichen Wunschliste, weil ich manchmal ein Video vom Desktop auf den Fernseher (VDR) schieben will um es da zu sehen. Aber bei meinem Wunsch weiß ich noch nicht, wie das am Besten zu realisieren ist, weil die Kanalliste eher etwas statisch ist. Das Problem besteht hier bei Hamburg1 nicht.
Ich habe mit yt-dlp rumgespielt und das Programm ist in der Lage die echte Video-URL (m3u8) zu extrahieren, die ich in dem Plugin nutzen könnte. Ein schnelles zappen funktioniert allerdings nicht. Die Art der Video-URL Bestimmung dauert etwas.
Wie es aussieht, wenn ich yt-dlp den Download erledigen lasse um dann nur "nur" noch den Stream einzulesen behalte ich mir für die nächste Version vor. Ich versuche mich erstmal an der URL-Extraktion und dem Nutzen der bereits vorhandenen Funktionalität.
Ich hatte gestern mit dem python-Script https://github.com/Nuttypro69/YouTube_to_m3u die m3u-Adresse zum HH 1-Stream ermittelt. Dazu musste ich noch einen Python-Fehler wie hier beschrieben umgehen. Wenn man nur eine einzige Adresse ermitteln lässt, klappt das auch recht fix (< 2s)
Die ermittelte m3u funktionierte gestern auch ohne erkennbare Probleme im iptv-Plugin. Nur heute ist der m3u-Link leider schon expired.
Ich bekomme übrigens beim make-Aufruf diese Meldungen:
g++ -MM -MG -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DPLUGIN_NAME_I18N='"iptv"' -DGITVERSION='"-GIT-63b24a7"' iptv.c common.c config.c device.c pidscanner.c protocolcurl.c protocolext.c protocolfile.c protocolhttp.c protocoludp.c sectionfilter.c setup.c sidscanner.c socket.c protocolm3u.c protocolradio.c protocolstream.c m3u8handler.c process.c process_unix.c ffmpeghandler.c source.c statistics.c streamer.c > .dependencies
g++: error: iptv.c: No such file or directory
g++: error: common.c: No such file or directory
g++: error: config.c: No such file or directory
g++: error: device.c: No such file or directory
g++: error: pidscanner.c: No such file or directory
g++: error: protocolcurl.c: No such file or directory
g++: error: protocolext.c: No such file or directory
g++: error: protocolfile.c: No such file or directory
g++: error: protocolhttp.c: No such file or directory
g++: error: protocoludp.c: No such file or directory
g++: error: sectionfilter.c: No such file or directory
g++: error: setup.c: No such file or directory
g++: error: sidscanner.c: No such file or directory
g++: error: socket.c: No such file or directory
g++: error: protocolm3u.c: No such file or directory
g++: error: protocolradio.c: No such file or directory
g++: error: protocolstream.c: No such file or directory
g++: error: m3u8handler.c: No such file or directory
g++: error: process.c: No such file or directory
g++: error: process_unix.c: No such file or directory
g++: error: ffmpeghandler.c: No such file or directory
g++: error: source.c: No such file or directory
g++: error: statistics.c: No such file or directory
g++: error: streamer.c: No such file or directory
g++: fatal error: no input files
compilation terminated.
CC iptv.o
Display More
Trotz der gegenteiligen Aussage ("compilation terminated") beginnt das Kompilieren dann dennoch.
Ich hatte gestern mit dem python-Script https://github.com/Nuttypro69/YouTube_to_m3u die m3u-Adresse zum HH 1-Stream ermittelt.
Vielleicht kann man den noch als Alternative verwenden. Muss mal gucken.
Aber die neue Version nutzt aktuell yt-dlp um an die aktuell URL zu kommen.
Channels.conf (Beispiel):
Man beachte hier den neuen Paramter "Y=1", der den Zwischenschritt mit yt-dlp aktiviert.
other.cfg (die 2: ist Hamburg 1, das geht etwas schneller als über https://www.hamburg1.de/livestream/
1:http://ntv1.akamaized.net/hls/live/2014075/NASA-NTV1-HLS/master_2000.m3u8
2:https://youtu.be/_bvFj37lkuQ
Ich bekomme übrigens beim make-Aufruf diese Meldungen:
Es gab noch Regeln für "*.c" Files. Die habe ich jetzt rausgenommen.
In VDR*ELEC ist das aber noch nicht drin. Dazu muss ich mir überlegen wie den yt-dlp da rein bekomme. Wahrscheinlich nutze ich die precompiled binaries - falls gewünscht. Dazu komme ich heute aber nicht mehr.
edit:
Ich habe den Plugin Parameter vergessen zu erwähnen:
Falls ihr yt-dlp verwenden wollt, dann bitte integriert das auto update von ytdlp.
Ich hatte gestern mit dem python-Script https://github.com/Nuttypro69/YouTube_to_m3u die m3u-Adresse zum HH 1-Stream ermittelt.
Ich habe mir das Projekt angeschaut und mich gefragt, warum die URL Extraktion so simpel aussieht. Das Ergebnis ist jetzt im Plugin zu finden. Der Parameter Y für M3U bestimmt die Art der Suche:
Y=1 nutzt yt-dlp um die URL zu bestimmen.
Y=2 nutzt die internen Möglichkeiten und ist eigentlich nur eine String-Suche und kommt ohne yt-dlp aus. Die URL muss dann allerdings direkt auf YT verweisen. Also z.b. eine URL der Form https://youtu.be sein.
Dafür ist Y=2 erheblich schneller als Y=1.
Moin Zabrimus,
erstmal vielen Dank für die rasante Umsetzung meiner Idee. Ich kriege aber noch kein Bild. Vielleicht hast Du eine Idee.
Dem iptv-Plugin habe ich den Parameter -y=-y=yt-dlp_linux_aarch64 übergeben. Das binary ist vorhanden und funktioniert auf der Konsole.
Der channels.conf-Eintrag lautet
/usr/local/share/vdr/plugins/iptv/other.cfg:
Beim Umschalten auf den Kanal sehe ich keinen Fehler im Log, aber es kommt weder Ton noch Bild:
Jul 29 12:44:00 CoreELEC vdr[8288]: [8288] switching to channel 133 I-1-4-53 (Hamburg 1)
Jul 29 12:44:00 CoreELEC vdr[8288]: [8363] IPTV streamer thread ended (pid=8288, tid=8363)
Jul 29 12:44:00 CoreELEC vdr[8288]: [8360] device 4 receiver thread ended (pid=8288, tid=8360)
Jul 29 12:44:00 CoreELEC vdr[8288]: [softhddev]GetVideoSize: 0x0 1.33333
Jul 29 12:44:00 CoreELEC vdr[8288]: [8288] [softhddev]SetPlayMode: 1
Jul 29 12:44:00 CoreELEC vdr[8288]: [8288] [softhddev]SetVolumeDevice: 255
Jul 29 12:44:00 CoreELEC vdr[8288]: Set Playmode 1
Jul 29 12:44:00 CoreELEC vdr[8288]: set trickspeed to 0
Jul 29 12:44:00 CoreELEC vdr[8288]: [8379] device 4 receiver thread started (pid=8288, tid=8379, prio=high)
Nun habe ich es auch nochmal mit Y=2 versucht, aber gleiches Resultat. Wenn ich die m3u selbst extrahiere und mittels M3U-Protocol benutze, funktioniert der Sender - allerdings nur mit einer framerate von 30, was keinen Spaß macht anzusehen. Meinethalben brauchst Du da deshalb nicht mehr zuviel Zeit investieren.
Ein Hinweis noch zum README:
U=list1.cfg The configuration file (located in plugin directory) contains
a list of URL in the format "5:https://URL". Where 5 is the
programm number within the file (must be unique) and the URL points
to an m3u8 URL.
Meines Erachtens gehören die Konfigurationsdateien in das ConfigDirectory (Standard laut vdr Makefile: /var/lib/vdr) und nicht in das ResourceDirectory (Standard laut vdr Makefile /usr/local/share/vdr). Tatsächlich sucht das iptv-Plugin die cfg-Dateien aber in /usr/local/share/vdr/plugins/iptv. Dort erwartet das iptv-Plugin ansonsten aber nur Scripte wie vlc2iptv. Das wiederum sucht seine channel settings in /etc/vdr/plugins/iptv/vlcinput/ - es ist also ein ziemlicher Wildwuchs. Ich kann mit allem leben, aber vielleicht könntest Du in Deinem README noch konkretisieren, welches "plugin directory" gemeint ist.
With the same example of Dr. Seltsam here is okay
but I use a Vdr configuration different on Ubu
in /etc/vdr/plugins/iptv I have the .cfg file
and I have no Vdr in /usr/local/share
Dem iptv-Plugin habe ich den Parameter -y=-y=yt-dlp_linux_aarch64 übergeben. Das binary ist vorhanden und funktioniert auf der Konsole.
Ist der Parameter ein Copy/Paste Fehler? Es muss der komplette Pfad angegeben werden, also sowas wie
-y /richtiger/pfad/yt-dlp_linux_aarch64
Ansonsten kannst du dem Plugin noch den Parameter --trace=511 mitgeben. Allerdings wirst du da gespammt, aber zumindest die Ausgaben der Videoanalyse und der Parameter sollten zu finden sein. Also schnell genug alles wieder stoppen
Allerdings sollte Y=2 funktionieren, wenn die URL stimmt.
Wildwuchs trifft es gut. Schwierig wird es, wenn verschiedene System die Dateien irgendwo anders erwarten. Vielleicht sollte man das im Makefile konfigurieren können.
With the same example of Dr. Seltsam here is okay
but I use a Vdr configuration different on Ubu
The channel is working on your device? Is it also an arm machine or an x86?
Da hatte sich beim -y-Paramter tatsächlich ein Fehler eingeschlichen, nachdem ich zwischenzeitlich das veraltete binary von Ubuntu ersetzt hatte. Und inzwischen hatte ich beim Probieren auch die Adresse in der cfg-Datei in
geändert.
Das log mit --trace=511 sagt:
Jul 29 14:26:16 CoreELEC vdr[9410]: [9410] IPTV1: Found URL https://www.youtube.com/watch?v=_bvFj37lkuQ
Jul 29 14:26:16 CoreELEC vdr[9410]: [9410] IPTV1: virtual bool cIptvProtocolM3U::Open()
Jul 29 14:26:16 CoreELEC vdr[9410]: [9410] IPTV1: yt-dlp throws an error, abort
Jul 29 14:26:16 CoreELEC vdr[9410]: [9410] IPTV1: Unable to read URL 'https://www.youtube.com/watch?v=_bvFj37lkuQ'
Auf der Konsole funktioniert
aber. Es gibt da in der Ausgabe keinen Unterschied zu
Nun nochmal mit Y=2:
Jul 29 14:43:35 CoreELEC vdr[10222]: [10222] IPTV1: Found URL https://www.youtube.com/watch?v=_bvFj37lkuQ
Jul 29 14:43:35 CoreELEC vdr[10222]: [10222] IPTV1: virtual bool cIptvProtocolM3U::Open()
Jul 29 14:43:36 CoreELEC vdr[10222]: [10222] IPTV1: Unable to read URL 'https://www.youtube.com/watch?v=_bvFj37lkuQ'
Aber: wenn ich in der cfg jetzt wieder den ursprünglichen Link https://youtu.be/_bvFj37lkuQ hinterlege, klappt es! (Ich war mir eigentlich sicher, dass ich den wie gepostet auch vorher schon mit Y=2 getestet hatte, aber irgendwie müssen sich mehrere Fehler wohl addiert haben)
Jul 29 14:51:54 CoreELEC vdr[10320]: [10320] IPTV1: Found URL https://youtu.be/_bvFj37lkuQ
Jul 29 14:51:54 CoreELEC vdr[10320]: [10320] IPTV1: virtual bool cIptvProtocolM3U::Open()
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Found Resolution: 256x144
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Found Resolution: 426x240
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Found Resolution: 640x360
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Found Resolution: 854x480
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Found Resolution: 1280x720
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Found Resolution: 1920x1080
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Url: https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1722279115/ei/a5CnZvqjC8KEi9oPqfzLmQM/ip/93.196.89.218/id/_bvFj37lkuQ.2/itag/96/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D137/rqh/1/hdlc/1/hls_chunk_host/rr1---sn-i5heen7r.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/playlist_duration/30/manifest_duration/30/spc/NO7bAeUVcgqEZ0GcyWaqK6VtrSZVN1g3LvN8imlDFoyvyhFwkMKhOf_8VbiBMLU/vprv/1/playlist_type/DVR/initcwndbps/1802500/mh/3n/mm/44/mn/sn-i5heen7r/ms/lva/mv/m/mvi/1/pl/26/dover/11/pacing/0/keepalive/yes/mt/1722257086/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,sgoap,sgovp,rqh,hdlc,xpc,playlist_duration,manifest_duration,spc,vprv,playlist_type/sig/AJfQdSswRQIhAMCykD9gsSQJh3tiuwxf2xRDxajapxeVt1ojMo1k5c_wAiB0x3sQs0QWUmCaRGfb5pDNPCR95f8K4PDLWXQsoWio7A%3D%3D/lsparams/hls_chunk_host,initcwndbps,mh,mm,mn,ms,mv,mvi,pl/lsig/AGtxev0wRQIhALe6P-5I_m5DnIqG3sg4XCb-LObmlKH8BORNFOoBH7BwAiA2DkaC69l8ezrCsj49jNjdj54EqfTINrHrTQ320lmF9g%3D%3D/playlist/index.m3u8
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Width: 1920, Height: 1080
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Channel information:
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: Name: Hamburg 1 (30 fps)
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: VPid: 256
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: SPid: 53
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: TPid: 1
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: APid: 257
Jul 29 14:51:55 CoreELEC vdr[10320]: [10320] IPTV2: FFmpeg call: ffmpeg -hide_banner -re -y -thread_queue_size 32 -i https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1722279115/ei/a5CnZvqjC8KEi9oPqfzLmQM/ip/93.196.89.218/id/_bvFj37lkuQ.2/itag/96/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D137/rqh/1/hdlc/1/hls_chunk_host/rr1---sn-i5heen7r.googlevideo.com/xpc/EgVo2aDSNQ%3D%3D/playlist_duration/30/manifest_duration/30/spc/NO7bAeUVcgqEZ0GcyWaqK6VtrSZVN1g3LvN8imlDFoyvyhFwkMKhOf_8VbiBMLU/vprv/1/playlist_type/DVR/initcwndbps/1802500/mh/3n/mm/44/mn/sn-i5heen7r/ms/lva/mv/m/mvi/1/pl/26/dover/11/pacing/0/keepalive/yes/mt/1722257086/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,sgoap,sgovp,rqh,hdlc,xpc,playlist_duration,manifest_duration,spc,vprv,playlist_type/sig/AJfQdSswRQIhAMCykD9gsSQJh3tiuwxf2xRDxajapxeVt1ojMo1k5c_wAiB0x3sQs0QWUmCaRGfb5pDNPCR95f8K4PDLWXQsoWio7A%3D%3D/lsparams/hls_chunk_host,initcwndbps,mh,mm,mn,ms,mv,mvi,pl/lsig/AGtxev0wRQIhALe6P-5I_m5DnIqG3sg4XCb-LObmlKH8BORNFOoBH7BwAiA2DkaC69l8ezrCsj49jNjdj54EqfTINrHrTQ320lmF9g%3D%3D/playlist/index.m3u8 -codec copy -streamid 0:256 -f mpegts -mpegts_transport_stream_id 1 -mpegts_pmt_start_pid 4096 -mpegts_service_id 53 -mpegts_original_network_id 1 -mpegts_flags system_b -metadata service_name=Hamburg 1 (30 fps) pipe:1
Display More
Aber: wenn ich in der cfg jetzt wieder den ursprünglichen Link https ://youtu.be/_bvFj37lkuQ hinterlege, klappt es!
Die letzte Log-Ausgabe sieht auch so aus, wie ich sie immer wieder sehe, wenn alles klappt.
Funktioniert 'Name: Hamburg 1 (30 fps)' mit den Ausgabedevices? 30fps? Ich kann auf dem Desktop kein Problem sehen, aber ich erinnere mich mit Schrecken an 60fps und Video-stottern.
Den Hinweis mit der URL 'https ://www.youtube.com' statt 'https ://youtu.be/' muss ich noch genauer untersuchen.
X86
Thanks. I first thought it could be a problem with the architecture, but it wasn't the problem.
Funktioniert 'Name: Hamburg 1 (30 fps)' mit den Ausgabedevices? 30fps?
Getestet mit softhdodroid auf der amlogic-Box N2+. Es läuft lippensynchron, aber man sieht schon, dass die Bewegungen nicht flüssig sind. Dazu müsste man wahrscheinlich die Bildausgabe der Box auf 30 Hz umstellen, wobei ich mir nicht sicher bin, ob die das überhaupt kann. Standardmäßig läuft sie auf 50Hz, und das Konzept eines Digitalreceivers sieht eigentlich nicht vor, dass das je nach Sender geändert wird.
Den Hinweis mit der URL 'https ://www.youtube.com' statt 'https ://youtu.be/' muss ich noch genauer untersuchen.
Ich muss mich mal selbst zitieren. Es gab einen Bug in der URL Bestimmung. Die Query-Parameter sind verloren gegangen und jetzt sollten beide Varianten funktionieren.
Es läuft lippensynchron, aber man sieht schon, dass die Bewegungen nicht flüssig sind.
Ja so etwas hatte ich befürchtet.
For these streams I use ffmpeg with '-r 25'
For other m3u I prefer vlc in the meanwhile: faster switching and audio/video sync is better
Unfortunately the frame_rate is not always visible in m3u or http stream. I think this could be determined used ffprobe, but this takes some time. There exists a stream which contains
Therefore a fix value '-r 25' could also be a problem.
I have tried to read some vlc documentation to try to offer a ffmpeg replacement. But i haven't understand the command line options. For example doing only something similar to ffmpeg: -codec copy. Or stream selection: Best video and all audio. And how are the pids managed?
Okay. Ich sehe mehrere Möglichkeiten:
1. Doch ffprobe aufrufen um die Framerate zu bestimmen. Doch das geht auf Kosten der Schwuppdizität beim umschalten.
2. Fix ein Wert -r 25/-r 50
3. Eine weitere Konfiguration, so daß man pro Kanal individuell zusätzliche Parameter an ffmpeg übergeben kann, so daß jeder selbst entscheiden/probieren kann, was passt.
Im web-Plugin/remotetranscoder rufe ich ffprobe auf, weil ich da die Daten vom Stream brauche. Es dauert etwas länger, aber jetzt nicht so lange, daß es massiv (also mich persönlich) stören würde.
Here's an example of a vlc streaming out to host 'brix'
/usr/bin/vlc -I dummy -v --network-caching=4000 --live-caching 2000 --http-reconnect --http-user-agent=Mozilla/5.0 --adaptive-logic highest https://dpp-live-events.medialaancdn.be/events/hls/aes/webstream1.m3u8 --sout "#standard{access=udp,mux=ts{use-key-frames,pid-video=100,pid-audio=200,pid-spu=4096,tsid=2850},dst=brix:4320}"
Always select the variant with the highest bitrate
I have fixed audio and video pids and unique 'tsid'
Here's an example of a vlc streaming out to host 'brix'
Ah great. Thanks. I will try to implement a switch ffmpeg/vlc in the plugin.
Don’t have an account yet? Register yourself now and be a part of our community!