Iptv-plugin

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Typographie)
K (Aktuelle Version)
 
(36 dazwischenliegende Versionen von 15 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
 
'''Integriert IPTV-Angebote in den VDR.'''
 
'''Integriert IPTV-Angebote in den VDR.'''
  
Das '''IPTV-Plugin''' implementiert ein zusätzliches [[VDR-Device]], welches die Funktionalität von [[DVB-Karte]]n wie z.B. Live-Wiedergabe, Aufzeichnung, [[EPG]] etc. nachbildet.
+
===Status===
Das Plugin kann [[MPEG]]-[[TS|Transportstream]]s über verschiedene
+
Letztes Update 01/2014
Netzwerkprotokolle wie [[UDP]]/[[RTP]]-[[Multicast]] und [[HTTP]] empfangen.
+
Direkte Dateieingabe wird ebenso unterstützt.
+
Das Plugin wurde mit [[streamdev-server]], [[VLC]] und dem IPTV-Stream eines Internet-Serviceprovider getestet.
+
  
Die minimale unterstützte VDR-Version ist 1.5.10. Es gibt jedoch seit IPTV-Version 0.0.3 einen Backport für VDR 1.4.7. Das Plugin selbst setzt zudem einen gepatchten VDR vorraus, um so plugin-spezifische Kanäle zur [[channels.conf]] hinzufügen zu können. Der Patch wurde absichtlich so allgemein wie möglich gestaltet, um anderen Projekten ebenso zu nutzen, z.B [[Analogtv-plugin|Analogtv]]- und [[Pvrinput-plugin|PVRInput]]-Plugin.
+
===Detaillierte Beschreibung===
Die Autoren hoffen, dass der Patch später in den VDR integriert wird.
+
Das '''IPTV-Plugin''' implementiert ein zusätzliches Empfangsdevice, welches ähnlich den [[DVB-Karte]]n einen MPEG TS Datenstrom an den VDR liefert.
 
+
Mehr Details und das Plugin selbst kann man auf der Projekthomepage finden: [http://www.saunalahti.fi/~rahrenbe/vdr/iptv www.saunalahti.fi/~rahrenbe/vdr/iptv]
+
 
+
===Status===
+
Beta. Seit Version 0.0.2 gibt es als zusätzliches Protokoll ''EXT'', mit diesem man beliebige Streams via [[VLC]] einbinden kann.
+
<!--
+
==Bilder==
+
{|
+
|[[Bild:<plugin>-plugin-00.jpg|thumb|none|''kurze beschreibung'']]
+
|[[Bild:<plugin>-plugin-01.jpg|thumb|none|''kurze beschreibung'']]
+
|}
+
-->
+
<!-- ==Bedienung== -->
+
<!-- ===[[SVDRP]] Befehle=== -->
+
<!-- ==Hardwareanforderungen== -->
+
  
==Softwareanforderungen==
+
Das Plugin kann diese {{wikipedia|MPEG}}-[[TS|Transportstream]]s über verschiedene
* vdr >=1.5.10 (gepatcht, ein Patch)
+
Netzwerkprotokolle wie {{wikipedia|UDP}}/RTP-{{wikipedia|Multicast}} und {{wikipedia|HTTP}} empfangen.
* vdr =1.4.7 (gepatcht, zwei Patches)
+
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.
  
<!-- ==Installation== -->
+
Das Plugin wurde mit [[streamdev-plugin]], {{wikipedia|VLC}} und dem {{wikipedia|IPTV}}-Stream eines Internet-Serviceproviders getestet.
<!-- ===Optionen=== -->
+
===Patches===
+
Für Version 0.0.3 des Plugins braucht man (zumindestens bei der [[Debian]]isierung des Plugins) einen [http://www.vdr-portal.de/board/thread.php?postid=664347#post664347 Patch].
+
  
 
==Konfiguration==
 
==Konfiguration==
Zeile 42: Zeile 21:
 
   Name;IPTV:3:IPTV|FILE|/video/stream.ts|5:P:0:514:670:2321:0:3: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
 
   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")
 
             | |    |  |            | Source type ("P")
 
             | |    |  |            IP Port, File delay (ms), Skript parameter
 
             | |    |  |            IP Port, File delay (ms), Skript parameter
             | |    |  IP Addresse, Pfadangabe zu Datei und/oder Skript  
+
             | |    |  IP Adresse, Pfadangabe zu Datei und/oder Skript  
 
             | |    Protokoll ("UDP", "HTTP", "FILE", "EXT")
 
             | |    Protokoll ("UDP", "HTTP", "FILE", "EXT")
 
             | Plugin ID ("IPTV")
 
             | Plugin ID ("IPTV")
Zeile 53: Zeile 33:
 
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.
 
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.
 
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 Skriptparameter auf 1,2 oder 3 abändern - je nachdem welchen Stream man haben möchte.
+
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.
  
<!-- ===Parameter=== -->
 
<!-- ==Sonstiges== -->
 
<!-- ===Probleme=== -->
 
 
===Tipps===
 
===Tipps===
====Fullscreen-Wiedergabe====
+
====Protokoll EXT====
Um eine Vollnbildwiedergabe eines Streams auf dem TV zu erhalten, reicht es z.B. die Größe eines 320 x 240 Streams auf 352 x 288 zu vergrößern. Der interne Hardware-Scaler der [[FF]] sorgt dann für die Fullscreen-Wiedergabe. Bei größeren Streams ist es natürlich nicht ratsam, diese zu verkleinern, sondern auf die nächsthöhere Auflösung (480 × 576 bzw. 544 × 576) zu konvertieren.
+
 
+
====Prototokoll 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:
 
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>
 
<pre>VLC-channel;IPTV:1:IPTV|EXT|vlcstream.sh|1:P:0:1:2:0:0:1:0:0:0</pre>
Zeile 69: Zeile 43:
 
<pre>
 
<pre>
 
#!/bin/sh
 
#!/bin/sh
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:4321}" --intf dummy
+
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>
 
</pre>
 
}}
 
}}
  
 +
Ausführliche Beispielkonfiguration für den Zugriff auf das Angebot von [[kartina.tv mit IPTV]].
  
 
====Internetradio====
 
====Internetradio====
Als Alternative zu VLC kann auch mplayer/ffmpeg/nc genutzt werden.
+
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. Für das UDP-Stream wird das Tool netcat (nc) verwendet.
+
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>
 
<pre>internetradio;IPTV:2:IPTV|EXT|internetradio.sh|0:P:0:0:256:0:0:2:0:0:0</pre>
Zeile 82: Zeile 59:
 
<pre>
 
<pre>
 
#!/bin/sh
 
#!/bin/sh
 +
PARAMETER1="$1"
 +
PORT="$2"
 
URL="mms://stream ..."
 
URL="mms://stream ..."
 
TITLE="internet-radio"
 
TITLE="internet-radio"
Zeile 103: Zeile 82:
 
-title "$TITLE" \
 
-title "$TITLE" \
 
-f mpegts -acodec mp2 -ac 2 -ab 96k -ar 48000 \
 
-f mpegts -acodec mp2 -ac 2 -ab 96k -ar 48000 \
  - | nc -u 127.0.0.1 4321
+
  "udp://127.0.0.1:${PORT}?pkt_size=16356"
  
 
rm -f "$FIFO"
 
rm -f "$FIFO"
Zeile 112: Zeile 91:
 
====Internetradio mit Bildanzeige (Webcam)====
 
====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.
 
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.
+
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>
 
<pre>webcam;IPTV:3:IPTV|EXT|webcam.sh|0:P:0:256:257:0:0:3:0:0:0</pre>
Zeile 118: Zeile 97:
 
<pre>
 
<pre>
 
#!/bin/sh
 
#!/bin/sh
 +
PARAMETER1="$1"
 +
PORT="$2"
 
URL="http://stream ....mp3"
 
URL="http://stream ....mp3"
 
TITLE="webcam"
 
TITLE="webcam"
Zeile 141: Zeile 122:
 
  -f mpegts -intra -r 24 -vcodec mpeg2video -b 500k -s 352x288 \
 
  -f mpegts -intra -r 24 -vcodec mpeg2video -b 500k -s 352x288 \
 
  -acodec mp2 -ac 2 -ab 96k -ar 48000 \
 
  -acodec mp2 -ac 2 -ab 96k -ar 48000 \
   - | nc -u 127.0.0.1 4321
+
   "udp://127.0.0.1:${PORT}?pkt_size=16356"
 
rm -f "$FIFO"
 
rm -f "$FIFO"
 
} > $LOG 2>&1
 
} > $LOG 2>&1
 
</pre>
 
</pre>
 
}}
 
}}
 
  
 
====Line-in der Soundkarte====
 
====Line-in der Soundkarte====
Zeile 165: Zeile 145:
 
{
 
{
 
# PID 0x100/256 = Audio
 
# PID 0x100/256 = Audio
arecord -q -D hw:0,0 -f dat | \
+
arecord -q -D hw:0,0 -f cd | \
 
ffmpeg -v -1 \
 
ffmpeg -v -1 \
 
-f wav \
 
-f wav \
 +
-probesize 50k \
 
-i - \
 
-i - \
-title "$TITLE" \
+
-metadata title="$TITLE" \
 
-f mpegts -acodec mp2 -ac 2 -ab 128k -ar 48000 \
 
-f mpegts -acodec mp2 -ac 2 -ab 128k -ar 48000 \
- | nc -nu 127.0.0.1 $PORT
+
"udp://127.0.0.1:${PORT}?pkt_size=16356"
 
+
 
} > $LOG 2>&1
 
} > $LOG 2>&1
 
</pre>
 
</pre>
 
}}
 
}}
  
<!-- ===Wunschliste=== -->
+
 
<!-- ===Snapshot=== -->
+
==Aktuelle Version==
 +
[http://www.saunalahti.fi/~rahrenbe/vdr/iptv/files/vdr-iptv-2.2.1.tgz 2.2.1]
 +
 
 
==Links==
 
==Links==
 
# [http://www.saunalahti.fi/~rahrenbe/vdr/iptv/ Homepage des Plugins]
 
# [http://www.saunalahti.fi/~rahrenbe/vdr/iptv/ Homepage des Plugins]
  
 
[[Kategorie:Plugins]]
 
[[Kategorie:Plugins]]
 +
[[Kategorie:Empfänger-Plugins]]
 +
[[Kategorie:Streaming]]
 
{{i18n|iptv-plugin}}
 
{{i18n|iptv-plugin}}

Aktuelle Version vom 4. Februar 2016, 04: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
Datei
vlcstream.sh
#!/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
Datei
internetradio.sh
#!/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
Datei
webcam.sh
#!/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
Datei
linein.sh
#!/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



[Bearbeiten] Aktuelle Version

2.2.1

[Bearbeiten] Links

  1. Homepage des Plugins
In anderen Sprachen