Das satip-Plugin hat eine Option für einen Portrange.
Evtl. wäre auch ein eigenes SATIP-VLAN eine Lösung.
Das satip-Plugin hat eine Option für einen Portrange.
Evtl. wäre auch ein eigenes SATIP-VLAN eine Lösung.
Gegenfrage, haben wir jemals ein Changelog gesehen?
Hätte ja sein können, dass diesmal jemand mehr weiß ....
lt Download Ordner hat sie das Datum vom 12.2.2024, vermutlich haben sie die nochmal intensiv getestet und dann erst freigegeben. Gibt's irgendwelche Infos, was die Änderungen/Fixes sind ?
Und wenn das "writing 1 byte into a region of size 0 overflows the destination" ein Compilerfehler ist?
Mit g++ 7.5.0 gibts lt. Post #8 den Fehler ja nicht.
Aus Post #2:
In file included from /usr/include/c++/13.2.1/bits/shared_ptr_atomic.h:33,
from /usr/include/c++/13.2.1/memory:81,
from videoinput.h:27,
from videoinput.c:27:
In member function ‘std::__atomic_base<_IntTp>::__int_type std::__atomic_base<_IntTp>::load(std::memory_order) const [with _ITp = bool]’,
Er macht dort ja noch nichts außer #include <memory> (OK, config.h hat er schon eingelesen)
Kannst Du den kompletten VDR und Plugins mal mit g++ 7.5.0 und dessen Headerfiles compilieren und laufen lassen?
Netztteil evtl. zu schwach? Hatte ich kürzlich bei einem Odroid C2. Da hat auch nur die rote LED geleuchtet ohne dass er gebootet hat (dann würde auch Debuggen nichts bringen weil er erst gar nicht startet). Mit einem stärkeren Netzteil gings dann einwandfrei.
Hier mal mein erster Wurf:
#!/usr/bin/env bash
#
# Add Video frame informations to vdr recordings made with vdr <= 2.6.4
#
# VERSION=240125-B
# Variables
VIDEO=${1:-/video} # Home of vdr's videos
if [ ! -r $VIDEO ]; then
echo "Video directory '${VIDEO}' not found or not readable - exiting"
exit 1
fi
f_find_frameinfo() {
f_line=($(grep '^F ' "$INFO" 2>/dev/null))
#echo " > Found in 'info': ${f_line[*]}"
[[ ${#f_line[*]} -lt 2 ]] && return 1 # No Framerate. Propably an old PES recording
[[ ${#f_line[*]} -eq 2 ]] && fps=${f_line[1]} && return 0 # TS recording, but only framerate set
[[ ${#f_line[*]} -eq 6 ]] && return 2 # Frameinfos already set (VDR >= 2.6.5)
}
f_check_video() {
width=
height=
aspect_ratio=
scantype=
frame_rate=
local ts_file="${dir}/00001.ts"
# Read only 42 packets after seeking to position 01:23: 01:23%+#42
result=($(ffprobe -v fatal -select_streams v:0 -read_intervals 9:23%+#100 \
-show_entries stream=width,height,display_aspect_ratio,field_order,r_frame_rate \
-of default=nw=1:nk=0 "$ts_file"))
#echo " > ffprobe result: ${result[*]}"
for line in ${result[@]}; do
key=${line%=*}
value=${line#*=}
case "$key" in
"width") width=$value ;;
"height") height=$value ;;
"display_aspect_ratio") aspect_ratio=$value ;;
"field_order") scantype=$(echo ${value} | sed -r 's/[bt][bt]/i/g; s/progressive/p/; /^[ip]$/!s/.*/-/') ;;
"r_frame_rate") frame_rate=$value ;;
esac
done
[[ -n "${width}" && -n "${height}" && -n "${aspect_ratio}" && -n "${scantype}" && -n "${frame_rate}" ]] &&
return 0 # Everything found…
return 1 # Error detecting values
}
f_insert_framedata() {
echo " > Inserting: F ${fps} ${width} ${height} ${scantype} ${aspect_ratio}"
# Order of parameters: Framerate, Width, Height, Scantype, Aspectratio
sed -i -e "s|^F .*|F ${fps} ${width} ${height} ${scantype} ${aspect_ratio}|" "$INFO"
}
f_check_backup() {
if [[ -e "${dir}/info.bak" ]] ; then
if [[ "${FORCE:=false}" == 'true' ]] ; then
cp -pf "${dir}/info.bak" "$INFO"
else
echo " > Backup of 'info' found! Use '-f' to rescan. Skipping"
return 1
fi
else
cp -p "$INFO" "${dir}/info.bak"
fi
}
f_restore() { # Restore original 'info' and delete backup
if [[ -e "${dir}/info.bak" ]] ; then
echo " > Restoring original 'info'"
if cp -pf "${dir}/info.bak" "$INFO" ; then
rm "${dir}/info.bak"
fi
else
echo " !> No backup found! Skipping"
fi
}
### Start
[[ "$1" == '-f' ]] && FORCE='true'
[[ "$1" == '-r' ]] && RESTORE='true'
cnt=0
while IFS= read -r dir; do
INFO="${dir}/info"
((cnt+=1))
echo "=> (${cnt}) Checking ${dir}"
if [[ "${RESTORE:=false}" == 'true' ]] ; then
f_restore
else
if [[ -r "${INFO}.vdr" ]] ; then
echo " !> Skipping PES recording"
continue
fi
if [[ ! -w "$INFO" ]] ; then
echo " !> 'info' file not found or is not writable! Skipping"
continue
fi
f_check_backup || continue
f_find_frameinfo || continue
if f_check_video ; then
echo " > ffprobe got ${width}x${height} @ ${fps} scantype: $scantype ar: ${aspect_ratio}"
f_insert_framedata
else
echo " !> ffprobe error!"
fi
fi # if RESTORE
done < <(find "${VIDEO}/" -type d -name '*.rec')
# End
Alles anzeigen
Die wichtigsten Änderungen:
Das -read_intervalls habe ich übernommen, das stimmt aber nicht mit dem Kommentar darüber überein, oder?
Ja, ich meinte nk=0
Die Bildwiederholfrequenz übernehme ich aus der info Datei und wird daher nicht geändert.
Ah, aber erst in der neuen Version
Aber die Berechnung von $fps kann man sich doch dann eigentlich sparen, denn wenn es nicht gesetzt ist, wird f_insert_framedata doch nie aufgerufen, oder?
Wenn ich nachher Zeit habe, mache ich daran weiter
Hab das '-' gesehen, aber man kann den scantype genauso parsen wie die Breite oder Aspect Ratio. Allerdings kommen die Parameter dann in einer anderen Reihenfolge. Bin am überlegen ob man zur Sicherheit nicht doch mit nk=1 arbeiten sollte?!?
Und die Framerate kann übrigens auch eine Dezimalzahl sein....
FireFly , wie macht das denn VDR?
Der VDR parsed bei MPEG2 den Sequence Header und die Sequence Extension, bei H.264 und H.265 das Sequence Parameter Set.
Das i/p schenke ich mir, da es ja nur im Infotext der Aufnahmen erscheint.
Das habe ich implementiert, muss das Skript aber jetzt an Deine Änderungen anpassen Wobei da noch die Frage ist, wie man mit Fällen wie Kabel eins umgeht - 576p gibts IMHO nicht im Standard
Patch funktioniert! Aufnahme auf n-tv HD zeigt nun 1920x1080 an.
kls Dann kannst Du den Patch oben so übernehmen. Es hat zwar was von Quick'n'Dirty, aber wenn die Sender das nicht korrekt implementieren .....
Dazu meint ETSI:
ZitatNOTE:
An encoded resolution of 704 × 576 pixels is often used to encode just the active 702 pixel portion of the video line, excluding the analogue blanking that may be present at the start and end of the full 720 pixel digital video line.
Ist also korrekt.
Neben 720 x 576 sind übrigens auch 544 x 576 und 480 x 576 bei MPEG2 (=H.262) offiziell erlaubt.
MegaV0lt Mit diesem Patch sollte es funktionieren. Kannst Du ihn bitte testen?
--- remux.c.orig 2024-01-05 12:03:20.724972851 +0100
+++ remux.c 2024-01-23 15:52:28.866655243 +0100
@@ -1623,6 +1623,8 @@
}
frame_Width -= CropUnitX * (frame_crop_left_offset + frame_crop_right_offset);
frame_Height -= CropUnitY * (frame_crop_top_offset + frame_crop_bottom_offset);
+ if (frame_Height > 1080 && frame_Height <= 1090) // fix wrong crop parameters of some channels
+ frame_Height = 1080;
}
frameWidth = frame_Width;
frameHeight = frame_Height;
Alles anzeigen
Vielleicht lässt sich so was wie der Fix vom SoftHDDevice auch im VDR einbauen?
Der Fix nicht, aber man könnte die Zeilenanzahl auf 1080 setzen, wenn sie zwischen 1081 und 1090 liegt. Und sich dann die komplette Berechnung des Cropping sparen? Lt. ETSI TS101154 V2.6.1 ist auch nur 1080 erlaubt und keine 1088 in der darzustellenden Auflösung.
kls: Was meinst Du dazu?
chroma_format_idc = 0 und separate_colour_plane_flag = 0 ??
Lt. Rec. ITU-T H.264 heißt das, die senden monochrom !!!
Bleibt noch die Frage, was Femon anzeigt ....
Bisher sehe ich keinen Fehler in der Berechnung. Kannst Du nochmal ein paar Parameter mehr ausgeben lassen?
Außerdem wäre interessant, was das Femon-Plugin als Größe anzeigt.
--- remux.c.orig 2024-01-05 12:03:20.724972851 +0100
+++ remux.c 2024-01-22 17:12:09.752022618 +0100
@@ -1621,6 +1621,7 @@
else if (chroma_format_idc == 2)
CropUnitX = 2;
}
+ dsyslog("H.264 Parm: w=%d h=%d l=%d r=%d t=%d b=%d uX=%d uY=%d %d %d %c", frame_Width, frame_Height, frame_crop_left_offset, frame_crop_right_offset, frame_crop_top_offset, frame_crop_bottom_offset, CropUnitX, CropUnitY, frame_mbs_only_flag, chroma_format_idc, separate_colour_plane_flag?'t':'f');
frame_Width -= CropUnitX * (frame_crop_left_offset + frame_crop_right_offset);
frame_Height -= CropUnitY * (frame_crop_top_offset + frame_crop_bottom_offset);
}
Hier bei n-tv HD
Natürlich ein verschlüsselter Sender, den ich nicht testen kann
Baue mal diesen Patch in remux.c ein:
--- remux.c.orig 2024-01-05 12:03:20.724972851 +0100
+++ remux.c 2024-01-22 14:09:22.483053076 +0100
@@ -1621,6 +1621,7 @@
else if (chroma_format_idc == 2)
CropUnitX = 2;
}
+ dsyslog("H.264 Parm: w=%d h=%d l=%d r=%d t=%d b=%d uX=%d uY=%d", frame_Width, frame_Height, frame_crop_left_offset, frame_crop_right_offset, frame_crop_top_offset, frame_crop_bottom_offset, CropUnitX, CropUnitY);
frame_Width -= CropUnitX * (frame_crop_left_offset + frame_crop_right_offset);
frame_Height -= CropUnitY * (frame_crop_top_offset + frame_crop_bottom_offset);
}
Dann mache eine kurze Aufnahme (Routine wird nur beim Start einmal aufgerufen) und schicke den Output
Tatsächlich hat das satip-Plugin cSatipDevice::OpenDvr(void) und cSatipDevice::CloseDvr(void) implementiert.
vtuner-ng legt die /dev/dvb/adapterX/dvr0 Device-Files auch an, aber vermutlich indirekt über den Kernel via dvb_register_adapter().
Na da bin ich aber gespannt: Wie erkenne ich das?
Das würde mich auch interessieren. Lässt der VDR die ganze Zeit das Device geöffnet? Und auf dem zuletzt getuneten Kanal? Dann hätte man keine Chance das zu erkennen. Bisher war das ja kein Problem wenn andauernd Daten durch das Koaxkabel in die Tunerkarte und von dort an das Device-File gelangen, aber bei Ethernet ist das schon irgendwie suboptimal.
Macht das satip-Plugin das genauso?