Bei SatIP musst Du dann aber wieder über TVheadend gehen.
Das hatte ich schon probiert, aber ging nicht, weil das TVheadend kein IPTV als SatIP ausgeben kann. Zumindest habe ich es nicht hinbekommen.
Bei SatIP musst Du dann aber wieder über TVheadend gehen.
Das hatte ich schon probiert, aber ging nicht, weil das TVheadend kein IPTV als SatIP ausgeben kann. Zumindest habe ich es nicht hinbekommen.
tvheadend soll das aber können. Dazu wirst Du Leute in anderen Foren fragen müssen, die sich mit tvheadend auskennen.
Ich hab das irgendwie unter Ubuntu in einer VM virtualbox probeweise hin bekommen.
Voraussetzung telerising läuft und TVhead hat alle Muxes und services gemappt.
Unter TVheadend : configuration / general / SAT>IP-server den RTSP port auf 554 setzen.
discover satip server ausprobieren evtl. Neustart.
Es müsste dann eine UUID Nummer ausgegraut erscheinen.
( als Probe unter windows läuft SAT>IP DVBviewer lite edition von http://www.satip.info: https://www.satip.info/products/dvb-viewer-lite-for-windows/ )
Es sollte jetzt der SATIP server von TVheadend gefunden werden.
Was ganz wichtig war, ist dem mux eine Frequenz zuzuordnen.
z.B. ARTE 11494000
Unter TVheadend : configuration / DVBinputs /Muxes dann den mux für ARTE auswählen und edit.
Bei SAT>IP DVB-S frequency (kHz): 11494000 eintragen.
evtl Neustart. Dann beim DVBviewer Sendersuch astra 19.2 alle Frequenzen.
Ich habe dann ein Bild bekommen.
Bitte diesen Beitrag nur als denkanstoß betrachten. Ich bin nicht vom Fach, nur vom VDR begeistert.
Das SatIP braucht es nicht unbedingt, denn wie ich bereits im Beitrag #61 in diesem Thread beschrieben habe, kann ich auch direkt über das vdr-plugin-iptv die Streams anschauen. Dazu muss ich einfach einen entsprechenden Eintrag in der channels.conf erstellen.
Hier gab es dann allerdings ein Problem mit den Audio-PIDs, denn da wurden immer die eAC3-PIDs vom VDR gelöscht,
wenn ich im VDR bei Einstellungen -> DVB -> Kanäle aktualisieren = nur PIDs oder höher eingestellt hatte.
Habe ich das deaktiviert, dann wurde auch der eAC3-5.1-Ton neben dem AAC-Stereo-Ton wiedergegeben.
Mit dem vdr-plugin-satip hatte ich ja bereits auch gleich am Anfang im Beitrag #16 Versuche gemacht, war aber daran gescheitert, dass es keine Tuner für IPTV im SatIP-Server von TVheadend gibt.
Die Idee von holw einfach dem Stream eine Pseudo-Frequenz zuzuweisen ist nicht schlecht, denn mir war bei meinen Tests bereits aufgefallen, dass da der VDR immer versuchte irgendwelche DVB-C-Transponder zu scannen (ich hatte da im TVheadend-SatIP-Server 2x DVB-C-Tuner angegeben). Was natürlich keinen Erfolg brachte. Das werde ich jetzt auf jeden Fall nochmals testen, einfach um mal zu schauen, wie das ganze so funktioniert.
Kann aber ein paar Tage dauern, weil sonst der Haussegen schief hängt, wenn ich immer den VDR blockiere!
Hier gab es dann allerdings ein Problem mit den Audio-PIDs, denn da wurden immer die eAC3-PIDs vom VDR gelöscht
Das kannst Du im iptv-Plugin evtl. Umgehen, indem Du dort „Benutze Abschnittsfilter“ auf ja stellst. Dann deaktivierte Filter auf 1 und Filter 1 auf „PAT (0x00)“.
Quotekann ich auch direkt über das vdr-plugin-iptv die Streams anschauen.
Mir wird allmählich schwindelig. Ich denke, das geht NICHT direkt, sondern nur mit Transkodierung über ein Script in Verbindung mit vlc?
Mir wird allmählich schwindelig.
Viele Wege führen nach Rom!
Einmal braucht man immer die telerising.api , denn diese erstellt die direkten Streamadressen für die einzelenen gestreamten Sender.
Diese kann man bereits im VLC-Player anschauen, wenn man das möchte, da brauchts kein weiteres Programm, allerdings ohen EPG.
Ebenso kann man diese Streams im VDR über das iptv-Plugin mit dem Script "vlc2iptv_raw" anschauen, mit ein paar Einschränkungen, wie sehr lange Umschaltzeiten, siehe Beitrag #58
Wenn man noch etwas Komfort und EPG und auch KODI möchte dann kommt TVheadend ins Spiel, denn für TVheadend gibt es einen KODI-Client und man kann das EPG zufügen.
Die Wiedergabe im VDR erfolgt hier ebenfalls über das iptv-Plugin in dem in der VDR-channels.conf die "Streaming-Adresse aus dem TVheadend" genommen wird, siehe Beitrag #61
Aber ich wollte eben den direkten Weg ohne TVheadend gehen, also nur die telerising.api und das klappt eben nicht problemlos bzw. nur über das Script "vlc2iptv_raw" mit den langen Umschaltzeiten.
Das war der Grund, warum ich dann noch das andere Script "iptvstream.sh" ausprobiert habe, was aber gar nicht funktioniert.
Ich hoffe das etwas verständlich erklärt zu haben!
Bei SatIP musst Du dann aber wieder über TVheadend gehen.
Das hatte ich schon probiert, aber ging nicht, weil das TVheadend kein IPTV als SatIP ausgeben kann. Zumindest habe ich es nicht hinbekommen.
Ich hatte bei mir tvheadend mit Eingangssignal eines Streams von einem HDMI Encoder über Netzwerk (quasi IPTV) als SatIP Server ausgegeben und per SatIP Plugin im VDR empfangen. DVB-x kann man beliebig wählen. War zum Schluss relativ stabil, Konfiguration von tvheadend war gewöhnungsbedürftig.
Ich denke, das geht NICHT direkt, sondern nur mit Transkodierung
Für mich sieht es danach aus, als ob maximal ein "umpacken" in einen anderen Container nötig ist.
Das ist ein deutlicher Unterschied, was den Aufwand angeht. Ein "umpacken" sollte locker machbar sein.
Momentan ist die Sache aber ziemlich unübersichtlich, man müsste erstmal wissen, was wirklich an Stream ankommt. Und dann, ob die telerising.api da noch was verändert.
Wenn man das weiß, kann man sich überlegen, wie man das Skript darauf optimiert.
In VLC kann man den Stream auch unbearbeitet speichern:
Netzwerkstream öffnen -> Konvertieren -> Raw-Input speichern.
Mediainfo oder FFProbe sollte da dann den Container raus finden können.
Ich denke SHF hat da recht, dass im Eigentlichen nur ein "umpacken" in einen anderen Container nötig ist
Ich habe mal das Tool MediaInfo-Portable auf meinem Windows-PC installiert um die gesendeten Streams zu analysieren.
Dann noch eine Probeaufnahme von einem Stream http://192.168.1.3:5000/api/zde/live/ndr-niedersachsen.m3u8 genommen, so wie der von der telerising.api bereitgestellt wird.
Wenn ich das richtig interpretiere, dann wird der Stream in avc1 gesendet.
Hier mal die komplette Ausgabe vom MediaInfo:
Allgemein
Vollständiger Name : C:\Users\Paul\Videos\vlc-record-2024-03-20-09h27m15s-raw-vlc-zattoo-ndr.mp4
Format : MPEG-4
Format-Profil : Base Media
Codec-ID : isom (mp41/avc1)
Dateigröße : 35,1 MiB
Dauer : 39s 160 ms
Modus der Gesamtbitrate : variabel
Gesamte Bitrate : 7 511 kb/s
Bildwiederholungsrate : 50,000 FPS
Kodierungs-Datum : 2024-03-20 08:27:55 UTC
Tagging-Datum : 2024-03-20 08:27:55 UTC
Kodierendes Programm : vlc 3.0.20 stream output
Kommentar : QuickTime 6.0 or greater
Video
ID : 2
Format : AVC
Format/Info : Advanced Video Codec
Format-Profil : Main@L4.2
Format-Einstellungen : CABAC / 2 Ref Frames
Format-Einstellungen für CABAC : Ja
Format-Einstellungen für RefFrames : 2 frames
Codec-ID : avc1
Codec-ID/Info : Advanced Video Coding
Dauer : 39s 160 ms
Bitrate : 7 370 kb/s
Breite : 1 920 Pixel
Höhe : 1 080 Pixel
Bildseitenverhältnis : 16:9
Modus der Bildwiederholungsrate : konstant
Bildwiederholungsrate : 50,000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scantyp : progressiv
Bits/(Pixel*Frame) : 0.071
Stream-Größe : 34,4 MiB (98%)
Sprache : Englisch
Kodierungs-Datum : 2024-03-20 08:27:55 UTC
Tagging-Datum : 2024-03-20 08:27:55 UTC
Codec configuration box : avcC
Audio
ID : 1
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Codec-ID : mp4a-40-2
Dauer : 39s 147 ms
Bitraten-Modus : variabel
Bitrate : 128 kb/s
maximale Bitrate : 168 kb/s
Kanäle : 2 Kanäle
Channel layout : L R
Samplingrate : 48,0 kHz
Bildwiederholungsrate : 46,875 FPS (1024 SPF)
Compression mode : Lossy
Stream-Größe : 613 KiB (2%)
Sprache : Englisch
Kodierungs-Datum : 2024-03-20 08:27:55 UTC
Tagging-Datum : 2024-03-20 08:27:55 UTC
Display More
Ich hoffe es hilft Euch weiter.
Aber nochmals der Tipp an die Leute, die echt ein Interesse daran haben, um das IPTV auf den VDR zu bekommen:
Es ist wirklich sehr leicht den Zattoo-Free-Tarif zu abonnieren. Man braucht nur eine Email-Adresse, mehr nicht. Keine persönlichen Angaben usw.
Dann kann man schon per Zattoo-App die Sender aus den Free-Tarif am Handy/Tablet anschauen.
Wenn man dann wie ich etwas mehr will, dann sollte man sich das Script der telerising.api installieren.
Einen allerdings Kodi-lastigen Thread dazu gibt es hier: Telerising API - Zattoo, blue TV & Sky CH für tvHeadend und VLC
Da ist dann auch im 1. Beitrag der Downloadlink. gestartet wird das Script dann am Besten per systemd-service.
QuoteIch habe dem vdr-plugin-iptv noch eine Chance gegeben und die letzten Tage etwas mit dem Script iptvstream.sh getestet.
Allerdings muss ich aber gleich sagen, es gab da keinerlei Erfolge, d.h. kein Bild und kein Ton.
In order to be able to record and watch, VDR wants SID, NID and TID values that match with the values in the UDP Transport stream.
I decided to generate these based on a 'checksum' taken from the tvg-id, like "ARD.de"
CHKSUM=$(echo "$tvg_name" | cksum | cut -c 1-9 | sed 's/ //g')
E.g.:
echo "ARD.de" | cksum | cut -c 1-9 | sed 's/ //g'
219542664
Next I generate the channels.conf values as follows:
SID_FILTER="1"
PID_FILTER="1"
NID="65281"
PIDS="100:200:0" # vpid, apid, tpid
# determine unique sid and tid based on CHKSUM
FLOAT=$(perl -E "say $CHKSUM/65536*10000000")
TID=$(echo $FLOAT | cut -f 1 -d "." | cut -c 1-4)
SID=$(echo $FLOAT | cut -f 2 -d ".")
# Create channels.conf line
echo "${tvg_name};IPTV:${CHKSUM}:S=${SID_FILTER}|P=${PID_FILTER}|F=EXT|U=iptvstream.sh|A=${CHKSUM}:I:0:${PIDS}:0:${SID}:&{NID}:${TID}:0" >> channels_iptv.conf
Display More
I also keep (a list of) urls based on the 'CHKSUM' separated by '€' (with some supporting fields that describe the stream)
iptvstream.sh script reads the "CHKSUM" as it got passed from the iptv plugin from the channels.conf
The original SID, and TID are generated on-the fly at the time you switch to channel
It also reads the URL from urls.conf
iptvstream snippet: (not meant to start working out of the box, more to give an idea)
#!/bin/bash
if [ $# -ne 2 ]; then
logger -s -t "iptvstream.sh" "Pass two arguments: chksum and iptv udp listening port"
exit 1
fi
# Where to find vlc or ffmpeg
FFMPEG="ffmpeg"
# Set streaming network buffers
BUFFER="?buffer_size=16777216"
FLUSH_PACKETS="-flush_packets -1" # 1: flush immediately, reduce latency, 0: increases throughput, -1: automatic
# CORRECT_TS_OVERFLOW="-correct_ts_overflow 1" # Correct single timestamp overflows if set to 1. Default is 1
CORRECT_TS_OVERFLOW=""
# DISCARD_CORRUPT_PACKAGES="-fflags +discardcorrupt"
DISCARD_CORRUPT_PACKAGES=""
PROBESIZE="2000000" # bytes, 5MB default
ANALYZEDURATION="2000000" # ms, 5 sec. default
NID="65281"
STREAM_FORMAT="-f hls -http_persistent 0 -re"
# define urls file
URL_FILE="/etc/vdr/plugins/iptv/urls.conf"
LOG_DIR="/var/log/vdr"
## start functions:
start_ffmpeg () {
$FFMPEG -y -hide_banner -user_agent "Mozilla/5.0" -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 1 $CORRECT_TS_OVERFLOW \
$DISCARD_CORRUPT_PACKAGES -probesize $PROBESIZE -analyzeduration $ANALYZEDURATION $STREAM_FORMAT -i "${URL}${BUFFER}" \
-codec:v $VCODEC $VCODEC_OPTIONS -codec:a $ACODEC $ACODEC_OPTIONS -streamid 0:$VPID -streamid 1:$APID $FLUSH_PACKETS \
-f mpegts -mpegts_transport_stream_id $TID -mpegts_pmt_start_pid 4096 -mpegts_service_id $SID \
-mpegts_original_network_id $NID udp://$HOST:$PORT?pkt_size=1316\&buffer_size=65536\&overrun_nonfatal=1 &> "$1" &
}
start_ffmpeg_hwaccel () {
$FFMPEG -y -hide_banner -user_agent "Mozilla/5.0" -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 1 $CORRECT_TS_OVERFLOW \
-hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi \
$DISCARD_CORRUPT_PACKAGES -probesize $PROBESIZE -analyzeduration $ANALYZEDURATION $STREAM_FORMAT -i "${URL}${BUFFER}" \
-c:v $VCODEC -b:v 1M -maxrate 2M -c:a $ACODEC -ac 2 -streamid 0:$VPID -streamid 1:$APID $FLUSH_PACKETS \
-f mpegts -mpegts_transport_stream_id $TID -mpegts_pmt_start_pid 4096 -mpegts_service_id $SID \
-mpegts_original_network_id $NID udp://$HOST:$PORT?pkt_size=1316\&buffer_size=65536\&overrun_nonfatal=1 &> "$1" &
}
## End functions
## Main part
URL_LINE=$(cat $URL_FILE | grep €${1} | sed -n 1p) # grab the first line in case multiple url's exist pointing to the same channel
if [ "$URL_LINE" = "" ]; then
logger -s -t "iptvstream.sh" "URL with param: $1 could not be found, please check"
exit 1
fi
CHKSUM=${1}
URL=$(echo "$URL_LINE" | awk 'BEGIN{FS="€"} {print $3}')
CHANNEL=$(echo "$URL_LINE" | awk 'BEGIN{FS="€"} {print $2}')
CHAN_NEL=$(echo $CHANNEL | sed 's/ /_/g')
echo "$URL $CHKSUM" > /tmp/url.txt
LOG="$LOG_DIR/${CHAN_NEL}-ffmpeg.log"
# Retrieve sid and tid based on CHKSUM
FLOAT=`perl -E "say $CHKSUM/65536*10000000"`
TID=`echo $FLOAT | cut -f 1 -d "." | cut -c 1-4`
SID=`echo $FLOAT | cut -f 2 -d "."`
# Port to send stream to
let PORT=$2
# Host to send iptv stream to
HOST=`hostname`
# use fixed pids, only change the sid and tid to identify the channel
let VPID=100
let APID=200
let SPID=0
# Keep list of exceptions in grep -E to start re-coding in order to get stable video and sound
echo "$URL_LINE" | grep -qiE "dummy"
if [ $? -eq 0 ]; then # start ffmpeg recoding
VCODEC="hevc_vaapi" # h264_vaapi
VCODEC_OPTIONS="-b:v 2500k -preset veryfast -tune zerolatency"
ACODEC="libfdk_aac"
ACODEC_OPTIONS=""
start_ffmpeg_hwaccel "$LOG"
else
VCODEC="copy"
VCODEC_OPTIONS=""
ACODEC="copy"
ACODEC_OPTIONS=""
PROBESIZE="18000000" # overrule default
ANALYZEDURATION="18000000" # overrule default
start_ffmpeg "$LOG"
fi
PID=${!}
trap 'kill -SIGKILL ${PID} 2>/dev/null; exit' HUP INT TERM KILL
# Waiting for the given PID to terminate
wait ${PID}
Display More
Hi,
Bzgl. des Umpackens: ggf. geht Avisynthplus bzw. Avxsynth oder Vapoursynth dafür.
Gibts ja auch für Linux.
MfG Stefan
ffmpeg kann das natürlich auch!
Bzgl. des Umpackens: ggf. geht Avisynth dafür.
Warum sollte man denn nicht das "ffmpeg" dafür nehmen?
Wäre das nicht einfacher.
carel hat doch da wie ich das sehe bereits etwas in der Richtung gemacht.
Allerdings ist das schon wieder ziemlich komplex, weil man da noch vorher für jeden Kanal einen extra Eintrag in einer /etc/vdr/plugins/iptv/urls.conf" erstellen muss.
Ja, vergesst den Hinweis...
Avisynth kann nur Dateien lesen... Keine URL...
Avisynth ist für Nicht-Programmierer ziemlich logisch dank Graphedit und DirectShow Filtern zum zusammenclicken. Egal, hab es auch 15 Jahre nicht genutzt...
MfG Stefan
Generell sieht es ja mal ganz gut aus, was ankommt.
hls und dash liefern entweder mpeg4 oder mpeg-ts Container, da habe ich heute nachgeschlagen.
Eine Anwendung zum runterladen wird man aber wohl immer brauchen, da die Streams segmentiert sind.
Letztlich ist es also wohl egal, was genau ankommt.
Das Problem beim Umschalten wird sowieso wird eher am VLC oder Skript liegen, irgend was klappt nicht ideal.
Allerdings ist das schon wieder ziemlich komplex, weil man da noch vorher für jeden Kanal einen extra Eintrag in einer /etc/vdr/plugins/iptv/urls.conf" erstellen muss.
Dafür fallen die einzelnen Dateien pro Kanal der anderen Lösung weg.
Im Endeffent kommt es also ziemlich aufs gleiche hinaus.
Ideal wäre es, wenn man diese Konfiguration am Ende mit einem Skript automatisieren könnte...
Ich habe mir eben mal den Spass gemacht und die ffmpeg-Kommandos in das VLC-Skript kopiert.
Das ging eigentlich problemlos, lediglich bei der $SID und $TID musste ich raten.
Das entstandene Skript sollte als direkter Ersatz für das vlc2iptv_raw laufen, wenn nichts schief gegangen ist.
#!/bin/bash
#
# ffmpeg2iptv_raw is used by the VDR iptv plugin to transcode external sources
#
# (C) 2007 Rolf Ahrenberg, Antti Seppälä
# (C) 2007 Tobias Grimm
#
# ffmpeg2iptv_raw is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this package; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
#
# <Global Settings>
#
CHANNELS_CONF=/var/lib/vdr/channels.conf
CHANNEL_SETTINGS_DIR=/etc/vdr/plugins/iptv/vlcinput/
#
# </Global Settings>
#
exit_with_error()
{
logger "ffmpeg2iptv_raw: error: $*"
exit 1
}
read_arguments()
{
[ $# -ne 2 ] && exit_with_error "Invalid parameter count '$#' $*"
PARAMETER=$1
PORT=$2
}
lookup_channel_and_pids()
{
[ ! -e "$CHANNELS_CONF" ] && \
exit_with_error "channels.conf not found ($CHANNELS_CONF)"
local CHANNEL_RECORD=`grep "[:]S=[10][|]P=[10][|]F=EXT[|]U=vlc2iptv_raw[|]A=$PARAMETER[:]I" $CHANNELS_CONF`
[ -z "$CHANNEL_RECORD" ] && \
exit_with_error "no iptv channel with parameter $PARAMETER found"
CHANNEL_NAME=`echo $CHANNEL_RECORD | awk "-F[;,:]" '{print $1}'`
VPID=`echo $CHANNEL_RECORD | awk -F: '{print $6}'`
APID=`echo $CHANNEL_RECORD | awk -F: '{print $7}'`
SPID=0
}
load_channel_configuration()
{
local CHANNEL_SETTINGS_FILE="$CHANNEL_SETTINGS_DIR/$CHANNEL_NAME.conf"
[ ! -e "$CHANNEL_SETTINGS_FILE" ] && \
exit_with_error "No vlc input configuration for channel '$CHANNEL_NAME'"
. "$CHANNEL_SETTINGS_FILE"
[ -z "$URL" ] && \
exit_with_error "No URL specified for channel '$CHANNEL_NAME'"
}
read_arguments $*
lookup_channel_and_pids
load_channel_configuration
#
# Start ffmpeg
#
HOST=`127.0.0.1`
let PORT=$2
# Set streaming network buffers
BUFFER="?buffer_size=16777216"
FLUSH_PACKETS="-flush_packets -1" # 1: flush immediately, reduce latency, 0: increases throughput, -1: automatic
# CORRECT_TS_OVERFLOW="-correct_ts_overflow 1" # Correct single timestamp overflows if set to 1. Default is 1
CORRECT_TS_OVERFLOW=""
# DISCARD_CORRUPT_PACKAGES="-fflags +discardcorrupt"
DISCARD_CORRUPT_PACKAGES=""
PROBESIZE="2000000" # bytes, 5MB default
ANALYZEDURATION="2000000" # ms, 5 sec. default
NID="65281"
STREAM_FORMAT="-f hls -http_persistent 0 -re"
SID="0x0001" # ffmpeg default
TID="0x0001" # ffmpeg default
VCODEC="copy"
VCODEC_OPTIONS=""
ACODEC="copy"
ACODEC_OPTIONS=""
LC_NUMERIC=C ffmpeg \
-y -hide_banner -user_agent "Mozilla/5.0" -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 1 $CORRECT_TS_OVERFLOW \
$DISCARD_CORRUPT_PACKAGES -probesize $PROBESIZE -analyzeduration $ANALYZEDURATION $STREAM_FORMAT -i "${URL}${BUFFER}" \
-codec:v $VCODEC $VCODEC_OPTIONS -codec:a $ACODEC $ACODEC_OPTIONS -streamid 0:$VPID -streamid 1:$APID $FLUSH_PACKETS \
-f mpegts -mpegts_transport_stream_id $TID -mpegts_pmt_start_pid 4096 -mpegts_service_id $SID \
-mpegts_original_network_id $NID udp://$HOST:$PORT?pkt_size=1316\&buffer_size=65536\&overrun_nonfatal=1 &> "$1" &
PID=${!}
trap 'kill -SIGKILL ${PID} 2> /dev/null' INT EXIT QUIT TERM
# Waiting for the given PID to terminate
wait ${PID}
Display More
Das ging eigentlich problemlos, lediglich bei der $SID und $TID musste ich raten.
These values must be unique and match between what is used in the script and the channels.conf. The value themselves can be randomly chosen (< 0xFFFF)
I used the 'cksum' command to generate them (see above)
I used an urls.conf and didn't add the URL as parameter in channels.conf. That allows me to change it without having to restart VDR
ich habe das mal getestet, funktioniert noch nicht.
Das ist mein Eintrag in der VDR-channels.conf:
:@101 IPTV-Sender iptvstream-test
Das Erste HD tel;IPTV:1010:S=1|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=1:I:0:258=27:256=@15;257=@106:0:0:1:0:0:0
Im syslog gibt es folgende Fehlermeldung, wenn ich zum Kanal 101 umschalte:
Mar 21 10:56:24 yavdr vdr: [3957] switching to channel 101 I-0-1010-1 (Das Erste HD tel)
Mar 21 10:56:24 yavdr vdr: ffmpeg2iptv_raw: error: no iptv channel with parameter 1 found
Jetzt kommt die Frage, wo weise ich denn dem Script die URLs von der telerisin.api zu, also den iptv channel?
Wenn ich dein Script richtig lese, dann sollte das in /etc/vdr/plugins/iptv/vlcinput/ sein.
Besser wäre dann wahrscheinlich einen anderen Ort zu wählen, wie z.B. /etc/vdr/plugins/iptv/ffmpeginput/ oder so ähnlich!
Aber vor allem wie soll denn dann diese Datei aussehen Dateiname + Inhalt?
Little update of the script
#
# <Global Settings>
#
CHANNELS_CONF=/var/lib/vdr/channels.conf
CHANNEL_SETTINGS_DIR=/etc/vdr/plugins/iptv/vlcinput/
NID="65281"
#
# </Global Settings>
#
exit_with_error()
{
logger "ffmpeg2iptv_raw: error: $*"
exit 1
}
read_arguments()
{
[ $# -ne 2 ] && exit_with_error "Invalid parameter count '$#' $*"
PARAMETER=$1
PORT=$2
}
lookup_channel_and_pids()
{
[ ! -e "$CHANNELS_CONF" ] && \
exit_with_error "channels.conf not found ($CHANNELS_CONF)"
local CHANNEL_RECORD=`grep "[:]S=[10][|]P=[10][|]F=EXT[|]U=ffmpeg2iptv_raw.sh[|]A=$PARAMETER[:]I" $CHANNELS_CONF`
[ -z "$CHANNEL_RECORD" ] && \
exit_with_error "no iptv channel with parameter $PARAMETER found"
CHANNEL_NAME=`echo $CHANNEL_RECORD | awk "-F[;,:]" '{print $1}'`
VPID=`echo $CHANNEL_RECORD | awk -F: '{print $6}'`
APID=`echo $CHANNEL_RECORD | awk -F: '{print $7}'`
SPID=`echo $CHANNEL_RECORD | awk -F: '{print $10}'`
TPID=`echo $CHANNEL_RECORD | awk -F: '{print $12}'`
}
load_channel_configuration()
{
local CHANNEL_SETTINGS_FILE="$CHANNEL_SETTINGS_DIR/$CHANNEL_NAME.conf"
[ ! -e "$CHANNEL_SETTINGS_FILE" ] && \
exit_with_error "No vlc input configuration for channel '$CHANNEL_NAME'"
. "$CHANNEL_SETTINGS_FILE"
[ -z "$URL" ] && \
exit_with_error "No URL specified for channel '$CHANNEL_NAME'"
}
read_arguments $*
lookup_channel_and_pids
#
# Start ffmpeg
#
HOST=`127.0.0.1`
let PORT=$2
# Set streaming network buffers
BUFFER="?buffer_size=16777216"
FLUSH_PACKETS="-flush_packets -1" # 1: flush immediately, reduce latency, 0: increases throughput, -1: automatic
# CORRECT_TS_OVERFLOW="-correct_ts_overflow 1" # Correct single timestamp overflows if set to 1. Default is 1
CORRECT_TS_OVERFLOW=""
# DISCARD_CORRUPT_PACKAGES="-fflags +discardcorrupt"
DISCARD_CORRUPT_PACKAGES=""
PROBESIZE="2000000" # bytes, 5MB default
ANALYZEDURATION="2000000" # ms, 5 sec. default
STREAM_FORMAT="-f hls -http_persistent 0 -re"
VCODEC="copy"
VCODEC_OPTIONS=""
ACODEC="copy"
ACODEC_OPTIONS=""
LC_NUMERIC=C ffmpeg \
-y -hide_banner -user_agent "Mozilla/5.0" -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 1 $CORRECT_TS_OVERFLOW \
$DISCARD_CORRUPT_PACKAGES -probesize $PROBESIZE -analyzeduration $ANALYZEDURATION $STREAM_FORMAT -i "${URL}${BUFFER}" \
-codec:v $VCODEC $VCODEC_OPTIONS -codec:a $ACODEC $ACODEC_OPTIONS -streamid 0:$VPID -streamid 1:$APID $FLUSH_PACKETS \
-f mpegts -mpegts_transport_stream_id $TID -mpegts_pmt_start_pid 4096 -mpegts_service_id $SID \
-mpegts_original_network_id $NID udp://$HOST:$PORT?pkt_size=1316\&buffer_size=65536\&overrun_nonfatal=1 &> "$1" &
PID=${!}
trap 'kill -SIGKILL ${PID} 2> /dev/null' INT EXIT QUIT TERM
# Waiting for the given PID to terminate
wait ${PID}
Display More
channels.conf line, with video pid=100, audio pid=200, service ID=300, transponder id= 400 and network id = 65281
All random values, parsed to ffmpeg.
Let's hope IPTV plugin will not choke on the "A=url" .. If it does you will need to use a separate "urls.conf" or "CHANNELS.CONF"
ich habe mal Deine neue ffmpeg2iptv.sh getestet.
#
# <Global Settings>
#
CHANNELS_CONF=/var/lib/vdr/channels.conf
CHANNEL_SETTINGS_DIR=/etc/vdr/plugins/iptv/vlcinput/
NID="65281"
#
# </Global Settings>
#
exit_with_error()
{
logger "ffmpeg2iptv_raw: error: $*"
exit 1
}
read_arguments()
{
[ $# -ne 2 ] && exit_with_error "Invalid parameter count '$#' $*"
PARAMETER=$1
PORT=$2
}
lookup_channel_and_pids()
{
[ ! -e "$CHANNELS_CONF" ] && \
exit_with_error "channels.conf not found ($CHANNELS_CONF)"
local CHANNEL_RECORD=`grep "[:]S=[10][|]P=[10][|]F=EXT[|]U=ffmpeg2iptv_raw.sh[|]A=$PARAMETER[:]I" $CHANNELS_CONF`
[ -z "$CHANNEL_RECORD" ] && \
exit_with_error "no iptv channel with parameter $PARAMETER found"
CHANNEL_NAME=`echo $CHANNEL_RECORD | awk "-F[;,:]" '{print $1}'`
VPID=`echo $CHANNEL_RECORD | awk -F: '{print $6}'`
APID=`echo $CHANNEL_RECORD | awk -F: '{print $7}'`
SPID=`echo $CHANNEL_RECORD | awk -F: '{print $10}'`
TPID=`echo $CHANNEL_RECORD | awk -F: '{print $12}'`
}
load_channel_configuration()
{
local CHANNEL_SETTINGS_FILE="$CHANNEL_SETTINGS_DIR/$CHANNEL_NAME.conf"
[ ! -e "$CHANNEL_SETTINGS_FILE" ] && \
exit_with_error "No vlc input configuration for channel '$CHANNEL_NAME'"
. "$CHANNEL_SETTINGS_FILE"
[ -z "$URL" ] && \
exit_with_error "No URL specified for channel '$CHANNEL_NAME'"
}
read_arguments $*
lookup_channel_and_pids
#
# Start ffmpeg
#
HOST=`127.0.0.1`
let PORT=$2
# Set streaming network buffers
BUFFER="?buffer_size=16777216"
FLUSH_PACKETS="-flush_packets -1" # 1: flush immediately, reduce latency, 0: increases throughput, -1: automatic
# CORRECT_TS_OVERFLOW="-correct_ts_overflow 1" # Correct single timestamp overflows if set to 1. Default is 1
CORRECT_TS_OVERFLOW=""
# DISCARD_CORRUPT_PACKAGES="-fflags +discardcorrupt"
DISCARD_CORRUPT_PACKAGES=""
PROBESIZE="2000000" # bytes, 5MB default
ANALYZEDURATION="2000000" # ms, 5 sec. default
STREAM_FORMAT="-f hls -http_persistent 0 -re"
VCODEC="copy"
VCODEC_OPTIONS=""
ACODEC="copy"
ACODEC_OPTIONS=""
LC_NUMERIC=C ffmpeg \
-y -hide_banner -user_agent "Mozilla/5.0" -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 1 $CORRECT_TS_OVERFLOW \
$DISCARD_CORRUPT_PACKAGES -probesize $PROBESIZE -analyzeduration $ANALYZEDURATION $STREAM_FORMAT -i "${URL}${BUFFER}" \
-codec:v $VCODEC $VCODEC_OPTIONS -codec:a $ACODEC $ACODEC_OPTIONS -streamid 0:$VPID -streamid 1:$APID $FLUSH_PACKETS \
-f mpegts -mpegts_transport_stream_id $TID -mpegts_pmt_start_pid 4096 -mpegts_service_id $SID \
-mpegts_original_network_id $NID udp://$HOST:$PORT?pkt_size=1316\&buffer_size=65536\&overrun_nonfatal=1 &> "$1" &
PID=${!}
trap 'kill -SIGKILL ${PID} 2> /dev/null' INT EXIT QUIT TERM
# Waiting for the given PID to terminate
wait ${PID}
Display More
Mit der von Dir vorgeschlagenen Version eines Kanals in der channels.conf :
NDR;IPTV:10:S=1|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=http://192.168.1.3:5000/api/zde/live/ndr-niedersachsen.m3u8:I:0:100:200:0:0:300:65281:400:0
gab es überhaupt kein Bild mehr im VDR und der Kanal wurde sofort gelöscht.
So geht es also nicht, sondern man muss den Parameter A=1...x verwenden und das als Parameter für die Auswahl der URLs verwenden.
Ich habe deshalb folgende neue Einträge zum Testen in der channels.conf erstellt:
:@101 IPTV-Sender Tel ffmpeg2iptv_raw-test
Das Erste HD tel;IPTV:1010:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=1:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
ZDF HD tel;IPTV:1020:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=2:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
RBB Brandenburg HD tel;IPTV:1030:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=3:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
MDR Sachsen HD tel;IPTV:1040:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=4:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
NDR Fernsehen HD tel;IPTV:1050:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=5:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
RTL HD tel;IPTV:1060:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=6:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
ProSieben HD tel;IPTV:1070:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=7:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
Sat.1 HD tel;IPTV:1080:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=8:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
ARTE HD tel;IPTV:1090:S=0|P=1|F=EXT|U=ffmpeg2iptv_raw.sh|A=9:I:0:258=27:256=@15;257=@122:0:0:1:0:0:0
Und dazu zusätzlich eine /etc/vdr/plugins/iptv/vlcinput/urls.conf erstellt:
#!/bin/sh
#
# There is a way to specify multiple URLs in the same script. The selection is
# then controlled by the extra parameter passed by IPTV plugin to the script
case ${PARAMETER} in
1)
URL="http://192.168.1.3:5000/api/zde/live/ard.m3u8"
;;
2)
URL="http://192.168.1.3:5000/api/zde/live/zdf.m3u8"
;;
3)
URL="http://192.168.1.3:5000/api/zde/live/rbb-brandenburg.m3u8"
;;
4)
URL="http://192.168.1.3:5000/api/zde/live/mdr-sachsen.m3u8"
;;
5)
URL="http://192.168.1.3:5000/api/zde/live/ndr-niedersachsen.m3u8"
;;
6)
URL="http://192.168.1.3:5000/api/zde/live/rtl_deutschland.m3u8"
;;
7)
URL="http://192.168.1.3:5000/api/zde/live/pro7_deutschland.m3u8"
;;
8)
URL="http://192.168.1.3:5000/api/zde/live/sat1_deutschland.m3u8"
;;
9)
URL="http://192.168.1.3:5000/api/zde/live/DE_arte.m3u8"
;;
*)
URL="http://192.168.1.3:5000/api/zde/live/ndr-niedersachsen.m3u8" # Default URL
;;
esac
Display More
Wenn ich auf den Kanal 101 "Das Erste HD" schalte und anschließend auf Kanal 102 "ZDF HD", dann gibt es kein Bild+Ton.
In der syslog gibt es folgende Einträge:
Mar 22 17:56:05 yavdr vdr: [26747] switching to channel 101 I-0-1010-1 (Das Erste HD tel)
Mar 22 17:56:05 yavdr vdr[27066]: /usr/share/vdr/plugins/iptv/ffmpeg2iptv_raw.sh: Zeile 66: 127.0.0.1: Befehl nicht gefunden
Mar 22 17:56:05 yavdr vdr[27067]: /usr/share/vdr/plugins/iptv/ffmpeg2iptv_raw.sh: Zeile 87: 1: Keine Berechtigung
Mar 22 17:56:22 yavdr vdr: [26747] switching to channel 102 I-0-1020-1 (ZDF HD tel)
Mar 22 17:56:22 yavdr vdr[27126]: /usr/share/vdr/plugins/iptv/ffmpeg2iptv_raw.sh: Zeile 66: 127.0.0.1: Befehl nicht gefunden
Mar 22 17:56:22 yavdr vdr[27127]: /usr/share/vdr/plugins/iptv/ffmpeg2iptv_raw.sh: Zeile 87: 2: Keine Berechtigung
Vielleicht kannst Du Dir das nochmal anschauen.
Unsicher bin ich mit der Datei für die URLs: /etc/vdr/plugins/iptv/vlcinput/urls.conf.
Ich weiß nicht ob das so überhaupt funktioniert, wie ich mir das ausgedacht habe.
Don’t have an account yet? Register yourself now and be a part of our community!