Iptv-plugin
Wirbel (Diskussion | Beiträge) (→Beschreibung) |
K (→Aktuelle Version) |
||
(50 dazwischenliegende Versionen von 21 Benutzern werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
'''Autor(en):''' Rolf Ahrenberg, Antti Seppälä | '''Autor(en):''' Rolf Ahrenberg, Antti Seppälä | ||
− | '''Integriert IPTV Angebote in den VDR.''' | + | '''Integriert IPTV-Angebote in den VDR.''' |
− | + | ===Status=== | |
− | + | Letztes Update 01/2014 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ===Detaillierte Beschreibung=== | |
− | + | Das '''IPTV-Plugin''' implementiert ein zusätzliches Empfangsdevice, welches ähnlich den [[DVB-Karte]]n einen MPEG TS Datenstrom an den VDR liefert. | |
− | + | ||
− | + | Das Plugin kann diese {{wikipedia|MPEG}}-[[TS|Transportstream]]s über verschiedene | |
+ | Netzwerkprotokolle wie {{wikipedia|UDP}}/RTP-{{wikipedia|Multicast}} und {{wikipedia|HTTP}} empfangen. | ||
+ | Direkte Dateieingabe wird ebenso unterstützt. Mittels Software-Transcoder (ffmpeg bzw. vlc) können beliebige Internet-Streams (also zB WMA, Real Video, ...) wiedergegeben werden - alles, was VLC wiedergeben kann. | ||
− | + | Das Plugin wurde mit [[streamdev-plugin]], {{wikipedia|VLC}} und dem {{wikipedia|IPTV}}-Stream eines Internet-Serviceproviders getestet. | |
− | + | ==Konfiguration== | |
− | == | + | Name;IPTV:1:IPTV|UDP|127.0.0.1|1234:P:0:512:650:2321:0:1:0:0:0 |
− | + | Name;IPTV:2:IPTV|HTTP|127.0.0.1/TS/2|3000:P:0:513:660:2321:0:2:0:0:0 | |
− | | | + | Name;IPTV:3:IPTV|FILE|/video/stream.ts|5:P:0:514:670:2321:0:3:0:0:0 |
− | | | + | Name;IPTV:4:IPTV|EXT|iptvstream.sh|0:P:0:0:680:0:0:4:0:0:0 |
− | | | + | ^ ^ ^ ^ ^ ^ ^ |
− | + | | | | | | | VPid, für Radiostationen muss hier eine Null stehen. | |
+ | | | | | | Source type ("P") | ||
+ | | | | | IP Port, File delay (ms), Skript parameter | ||
+ | | | | IP Adresse, Pfadangabe zu Datei und/oder Skript | ||
+ | | | Protokoll ("UDP", "HTTP", "FILE", "EXT") | ||
+ | | Plugin ID ("IPTV") | ||
+ | ID, fortlaufend | ||
− | + | ===Einstellungen=== | |
− | < | + | Um beliebige Streams mittels des Plugins wiederzugeben, sollte man das EXT-Protokoll nutzen. Benötigt werden dann VLC und w32codecs zur Wiedergabe von WindowsMedia/RealMedia Streams. |
+ | Dazu verschiebt man die Datei <code>iptvstream.sh</code> in das VDR-Konfigurationsverzeichnis und passt die URL-Einträge dementsprechend an. | ||
+ | Um nun die jeweiligen Streams aufzurufen, muss man in dem [[channels.conf]]-Eintrag den Skript-Parameter auf 1,2 oder 3 abändern - je nachdem welchen Stream man haben möchte. | ||
− | + | ===Tipps=== | |
+ | ====Protokoll EXT==== | ||
+ | Hier ein Beispiel für die Verwendung des Prototokolls EXT. Die Datei <code>vlcstream.sh</code> im Verzeichnis der iptv-Plugin-Konfiguration speichern. Und die channels.conf des VDR um den folgenden Eintrag erweitern: | ||
+ | <pre>VLC-channel;IPTV:1:IPTV|EXT|vlcstream.sh|1:P:0:1:2:0:0:1:0:0:0</pre> | ||
− | == | + | {{Box Datei |vlcstream.sh| |
− | + | <pre> | |
+ | #!/bin/sh | ||
+ | PARAMETER1="$1" | ||
+ | PORT="$2" | ||
+ | exec vlc "mms://livemedia.omroep.nl/vprohollanddoc-bb" --sout "#transcode{vcodec=mp2v,acodec=mpga,vb=2400,ab=320}:standard{access=udp,mux=ts{pid-video=1,pid-audio=2,pid-spu=3},dst=127.0.0.1:$PORT}" --intf dummy | ||
+ | </pre> | ||
+ | }} | ||
− | + | Ausführliche Beispielkonfiguration für den Zugriff auf das Angebot von [[kartina.tv mit IPTV]]. | |
− | + | ||
− | + | ||
− | + | ====Internetradio==== | |
− | + | Als Alternative zu VLC kann auch mplayer/ffmpeg genutzt werden. | |
− | + | Hier ein Beispiel, um den Stream eines Internetradios im mms://...wma - Format dem Plugin zuzuführen. | |
− | <! | + | <pre>internetradio;IPTV:2:IPTV|EXT|internetradio.sh|0:P:0:0:256:0:0:2:0:0:0</pre> |
− | + | {{Box Datei |internetradio.sh| | |
− | <! | + | <pre> |
− | + | #!/bin/sh | |
− | <!-- === | + | PARAMETER1="$1" |
+ | PORT="$2" | ||
+ | URL="mms://stream ..." | ||
+ | TITLE="internet-radio" | ||
+ | |||
+ | FIFO=/tmp/radio.wma | ||
+ | LOG=/dev/null | ||
+ | |||
+ | { | ||
+ | rm -f "$FIFO" | ||
+ | mkfifo "$FIFO" | ||
+ | mplayer -dumpstream "$URL" \ | ||
+ | -quiet -nolirc -noautosub -noconsolecontrols -novideo -nojoystick \ | ||
+ | -dumpfile "$FIFO" & | ||
+ | # Time to connect and fill pipe | ||
+ | sleep 3 | ||
+ | |||
+ | # Build audio only stream | ||
+ | # PID 0x100/256 = Audio | ||
+ | ffmpeg -v -1 \ | ||
+ | -i "$FIFO" \ | ||
+ | -title "$TITLE" \ | ||
+ | -f mpegts -acodec mp2 -ac 2 -ab 96k -ar 48000 \ | ||
+ | "udp://127.0.0.1:${PORT}?pkt_size=16356" | ||
+ | |||
+ | rm -f "$FIFO" | ||
+ | } > $LOG 2>&1 | ||
+ | </pre> | ||
+ | }} | ||
+ | |||
+ | ====Internetradio mit Bildanzeige (Webcam)==== | ||
+ | ffmpeg kann beim Encodieren des Internetradiostreams zum MPEG-Transportstream einen zusätzlichen Video-Stream aus JPEG-Bildern erzeugen. Gemäß dem folgenden Beispiel wird die Datei "bild.jpg" im Intervall von zwei Sekunden im Stream aktualisiert. | ||
+ | Damit bietet sich die Verwendung zur Anzeige von Bildern einer Webcam an, die z. B. ihre Bilder per {{wikipedia|Cron}}-Daemon aktualisiert. | ||
+ | |||
+ | <pre>webcam;IPTV:3:IPTV|EXT|webcam.sh|0:P:0:256:257:0:0:3:0:0:0</pre> | ||
+ | {{Box Datei |webcam.sh| | ||
+ | <pre> | ||
+ | #!/bin/sh | ||
+ | PARAMETER1="$1" | ||
+ | PORT="$2" | ||
+ | URL="http://stream ....mp3" | ||
+ | TITLE="webcam" | ||
+ | IMAGE="bild.jpg" | ||
+ | |||
+ | FIFO=/tmp/web.mp3 | ||
+ | LOG=/dev/null | ||
+ | |||
+ | { | ||
+ | rm -f "$FIFO" | ||
+ | mkfifo "$FIFO" | ||
+ | mplayer -dumpstream "$URL" \ | ||
+ | -quiet -nolirc -noautosub -noconsolecontrols -novideo -nojoystick \ | ||
+ | -dumpfile "$FIFO" & | ||
+ | # Time to connect and fill pipe | ||
+ | sleep 3 | ||
+ | |||
+ | # Build stream from audiodump with cycle image as video (e.g. webcam) | ||
+ | # PID 0x100/256 = Video 0x101/257 = Audio | ||
+ | ffmpeg -v -1 \ | ||
+ | -i "$FIFO" -r 0.5 -loop_input -i '$IMAGE' \ | ||
+ | -title "$TITLE" \ | ||
+ | -f mpegts -intra -r 24 -vcodec mpeg2video -b 500k -s 352x288 \ | ||
+ | -acodec mp2 -ac 2 -ab 96k -ar 48000 \ | ||
+ | "udp://127.0.0.1:${PORT}?pkt_size=16356" | ||
+ | rm -f "$FIFO" | ||
+ | } > $LOG 2>&1 | ||
+ | </pre> | ||
+ | }} | ||
+ | |||
+ | ====Line-in der Soundkarte==== | ||
+ | Ebenso kann man den Eingang "Line-in" einer Soundkarte einbinden: | ||
+ | <pre>linein;IPTV:5:IPTV|S0P0|EXT|linein.sh|0:P:27500:0:256:0:0:5:5:5:0</pre> | ||
+ | {{Box Datei |linein.sh| | ||
+ | <pre> | ||
+ | #!/bin/sh | ||
+ | PARAMETER1="$1" | ||
+ | PORT="$2" | ||
+ | TITLE="linein" | ||
+ | |||
+ | if test -z "$PORT"; then | ||
+ | PORT="4321" | ||
+ | fi | ||
+ | |||
+ | LOG=/dev/null | ||
+ | { | ||
+ | # PID 0x100/256 = Audio | ||
+ | arecord -q -D hw:0,0 -f cd | \ | ||
+ | ffmpeg -v -1 \ | ||
+ | -f wav \ | ||
+ | -probesize 50k \ | ||
+ | -i - \ | ||
+ | -metadata title="$TITLE" \ | ||
+ | -f mpegts -acodec mp2 -ac 2 -ab 128k -ar 48000 \ | ||
+ | "udp://127.0.0.1:${PORT}?pkt_size=16356" | ||
+ | } > $LOG 2>&1 | ||
+ | </pre> | ||
+ | }} | ||
+ | |||
+ | |||
+ | ==Aktuelle Version== | ||
+ | [http://www.saunalahti.fi/~rahrenbe/vdr/iptv/files/vdr-iptv-2.2.1.tgz 2.2.1] | ||
==Links== | ==Links== | ||
Zeile 52: | Zeile 165: | ||
[[Kategorie:Plugins]] | [[Kategorie:Plugins]] | ||
+ | [[Kategorie:Empfänger-Plugins]] | ||
+ | [[Kategorie:Streaming]] | ||
{{i18n|iptv-plugin}} | {{i18n|iptv-plugin}} |
Aktuelle Version vom 4. Februar 2016, 03:31 Uhr
Inhaltsverzeichnis |
[Bearbeiten] Beschreibung
Autor(en): Rolf Ahrenberg, Antti Seppälä
Integriert IPTV-Angebote in den VDR.
[Bearbeiten] Status
Letztes Update 01/2014
[Bearbeiten] Detaillierte Beschreibung
Das IPTV-Plugin implementiert ein zusätzliches Empfangsdevice, welches ähnlich den DVB-Karten einen MPEG TS Datenstrom an den VDR liefert.
Das Plugin kann diese MPEG-Transportstreams über verschiedene Netzwerkprotokolle wie UDP/RTP-Multicast und HTTP empfangen. Direkte Dateieingabe wird ebenso unterstützt. Mittels Software-Transcoder (ffmpeg bzw. vlc) können beliebige Internet-Streams (also zB WMA, Real Video, ...) wiedergegeben werden - alles, was VLC wiedergeben kann.
Das Plugin wurde mit streamdev-plugin, VLC und dem IPTV-Stream eines Internet-Serviceproviders getestet.
[Bearbeiten] Konfiguration
Name;IPTV:1:IPTV|UDP|127.0.0.1|1234:P:0:512:650:2321:0:1:0:0:0 Name;IPTV:2:IPTV|HTTP|127.0.0.1/TS/2|3000:P:0:513:660:2321:0:2:0:0:0 Name;IPTV:3:IPTV|FILE|/video/stream.ts|5:P:0:514:670:2321:0:3:0:0:0 Name;IPTV:4:IPTV|EXT|iptvstream.sh|0:P:0:0:680:0:0:4:0:0:0 ^ ^ ^ ^ ^ ^ ^ | | | | | | VPid, für Radiostationen muss hier eine Null stehen. | | | | | Source type ("P") | | | | IP Port, File delay (ms), Skript parameter | | | IP Adresse, Pfadangabe zu Datei und/oder Skript | | Protokoll ("UDP", "HTTP", "FILE", "EXT") | Plugin ID ("IPTV") ID, fortlaufend
[Bearbeiten] Einstellungen
Um beliebige Streams mittels des Plugins wiederzugeben, sollte man das EXT-Protokoll nutzen. Benötigt werden dann VLC und w32codecs zur Wiedergabe von WindowsMedia/RealMedia Streams.
Dazu verschiebt man die Datei iptvstream.sh
in das VDR-Konfigurationsverzeichnis und passt die URL-Einträge dementsprechend an.
Um nun die jeweiligen Streams aufzurufen, muss man in dem channels.conf-Eintrag den Skript-Parameter auf 1,2 oder 3 abändern - je nachdem welchen Stream man haben möchte.
[Bearbeiten] Tipps
[Bearbeiten] Protokoll EXT
Hier ein Beispiel für die Verwendung des Prototokolls EXT. Die Datei vlcstream.sh
im Verzeichnis der iptv-Plugin-Konfiguration speichern. Und die channels.conf des VDR um den folgenden Eintrag erweitern:
VLC-channel;IPTV:1:IPTV|EXT|vlcstream.sh|1:P:0:1:2:0:0:1:0:0:0
#!/bin/sh PARAMETER1="$1" PORT="$2" exec vlc "mms://livemedia.omroep.nl/vprohollanddoc-bb" --sout "#transcode{vcodec=mp2v,acodec=mpga,vb=2400,ab=320}:standard{access=udp,mux=ts{pid-video=1,pid-audio=2,pid-spu=3},dst=127.0.0.1:$PORT}" --intf dummy
Ausführliche Beispielkonfiguration für den Zugriff auf das Angebot von kartina.tv mit IPTV.
[Bearbeiten] Internetradio
Als Alternative zu VLC kann auch mplayer/ffmpeg genutzt werden. Hier ein Beispiel, um den Stream eines Internetradios im mms://...wma - Format dem Plugin zuzuführen.
internetradio;IPTV:2:IPTV|EXT|internetradio.sh|0:P:0:0:256:0:0:2:0:0:0
#!/bin/sh PARAMETER1="$1" PORT="$2" URL="mms://stream ..." TITLE="internet-radio" FIFO=/tmp/radio.wma LOG=/dev/null { rm -f "$FIFO" mkfifo "$FIFO" mplayer -dumpstream "$URL" \ -quiet -nolirc -noautosub -noconsolecontrols -novideo -nojoystick \ -dumpfile "$FIFO" & # Time to connect and fill pipe sleep 3 # Build audio only stream # PID 0x100/256 = Audio ffmpeg -v -1 \ -i "$FIFO" \ -title "$TITLE" \ -f mpegts -acodec mp2 -ac 2 -ab 96k -ar 48000 \ "udp://127.0.0.1:${PORT}?pkt_size=16356" rm -f "$FIFO" } > $LOG 2>&1
[Bearbeiten] Internetradio mit Bildanzeige (Webcam)
ffmpeg kann beim Encodieren des Internetradiostreams zum MPEG-Transportstream einen zusätzlichen Video-Stream aus JPEG-Bildern erzeugen. Gemäß dem folgenden Beispiel wird die Datei "bild.jpg" im Intervall von zwei Sekunden im Stream aktualisiert. Damit bietet sich die Verwendung zur Anzeige von Bildern einer Webcam an, die z. B. ihre Bilder per Cron-Daemon aktualisiert.
webcam;IPTV:3:IPTV|EXT|webcam.sh|0:P:0:256:257:0:0:3:0:0:0
#!/bin/sh PARAMETER1="$1" PORT="$2" URL="http://stream ....mp3" TITLE="webcam" IMAGE="bild.jpg" FIFO=/tmp/web.mp3 LOG=/dev/null { rm -f "$FIFO" mkfifo "$FIFO" mplayer -dumpstream "$URL" \ -quiet -nolirc -noautosub -noconsolecontrols -novideo -nojoystick \ -dumpfile "$FIFO" & # Time to connect and fill pipe sleep 3 # Build stream from audiodump with cycle image as video (e.g. webcam) # PID 0x100/256 = Video 0x101/257 = Audio ffmpeg -v -1 \ -i "$FIFO" -r 0.5 -loop_input -i '$IMAGE' \ -title "$TITLE" \ -f mpegts -intra -r 24 -vcodec mpeg2video -b 500k -s 352x288 \ -acodec mp2 -ac 2 -ab 96k -ar 48000 \ "udp://127.0.0.1:${PORT}?pkt_size=16356" rm -f "$FIFO" } > $LOG 2>&1
[Bearbeiten] Line-in der Soundkarte
Ebenso kann man den Eingang "Line-in" einer Soundkarte einbinden:
linein;IPTV:5:IPTV|S0P0|EXT|linein.sh|0:P:27500:0:256:0:0:5:5:5:0
#!/bin/sh PARAMETER1="$1" PORT="$2" TITLE="linein" if test -z "$PORT"; then PORT="4321" fi LOG=/dev/null { # PID 0x100/256 = Audio arecord -q -D hw:0,0 -f cd | \ ffmpeg -v -1 \ -f wav \ -probesize 50k \ -i - \ -metadata title="$TITLE" \ -f mpegts -acodec mp2 -ac 2 -ab 128k -ar 48000 \ "udp://127.0.0.1:${PORT}?pkt_size=16356" } > $LOG 2>&1