Das heißt, ich brauche es gar nicht weiter zu probieren, weil alle Wege derzeit verbaut sind, außer etwas selbst zu programmieren? Wäre vielleicht noch GStreamer eine Option?
prototype hls download:
Spoiler anzeigen
Code
_url=http://10.21.160.55:5000/api/wpu/live/zdf.m3u8
_dir=/syncthing/other/tmp/hls
############# do not change anything below ###############
_dir_r=/hls/
_sleep=0 #EXT-X-TARGETDURATION
_seg_num=0 # #EXT-X-MEDIA-SEQUENCE: # first on video is enough
_video_uri=""
_video_head=""
_audio_uri=""
_audio_head=""
_sub_uri=""
_base=""
#rm -r "$_dir" 2>/dev/null
mkdir -p "$_dir"
_master=$(curl -s -H 'User-Agent: VLC' "$_url")
_audio_url=$(echo "$_master"|grep 'GROUP-ID="audio"'|head -n1|sed -n 's#.*URI="\(.*\)"$#\1#p')
_video_url=$(echo "$_master"|tail -n1)
_sub_url=$(echo "$_master"|grep 'GROUP-ID="subs"'|head -n1|sed -n 's#.*URI="\(.*\)"$#\1#p')
cat << EOF > "$_dir"/_main.m3u8
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-INDEPENDENT-SEGMENTS
$(echo "$_master"|grep "EXT-X-MEDIA:TYPE=AUDIO"|head -n1|sed 's#"https://.*"#"audio.m3u8"#g')
$(echo "$_master"|grep "#EXT-X-MEDIA:TYPE=SUBTITLES"|head -n1|sed 's#"https://.*"#"sub.m3u8"#g')
$(echo "$_master"|grep "#EXT-X-STREAM-INF:BANDWIDTH"|head -n1)
video.m3u8
EOF
_base=${_audio_url%/*}
echo base: $_base
echo remote: $_dir_r
_audio_uri=${_audio_url##*/};_audio_uri=${_audio_uri:0:-5}
_video_uri=${_video_url##*/};_video_uri=${_video_uri:0:-5}
_sub_uri=${_sub_url##*/};_sub_uri=${_sub_uri:0:-5}
echo audio uri: $_audio_uri
echo video uri: $_video_uri
echo sub uri: $_sub_uri
_audio_m3u8=$(curl -s -H 'User-Agent: VLC' "$_audio_url")
_video_m3u8=$(curl -s -H 'User-Agent: VLC' "$_video_url")
_sub_m3u8=$(curl -s -H 'User-Agent: VLC' "$_sub_url")
_audio_head=$(echo "$_audio_m3u8"|grep '#EXT-\|#USP-')
_video_head=$(echo "$_video_m3u8"|grep '#EXT-\|#USP-')
_sub_head=$(echo "$_sub_m3u8"|grep '#EXT-\|#USP-')
echo "$_audio_head"|sed 's#hls/##g' > "$_dir/audio.m3u8"
echo "$_video_head"|sed 's#hls/##g' > "$_dir/video.m3u8"
echo "$_sub_head"|sed 's#hls/##g' > "$_dir/sub.m3u8"
_seg_num=$(echo "$_audio_head"|sed -n 's/^#EXT-X-MEDIA-SEQUENCE:\([0-9]\+\)$/\1/p')
_sleep=$(echo "$_audio_head"|sed -n 's/^#EXT-X-TARGETDURATION:\([0-9]\+\)$/\1/p')
echo start at: $_seg_num
echo sleep: $_sleep
_audio_head=$(echo "$_audio_m3u8"|grep '#EXT-X-MAP:URI="'|sed -n 's#.*URI="\(.*\)"$#\1#p')
_video_head=$(echo "$_video_m3u8"|grep '#EXT-X-MAP:URI="'|sed -n 's#.*URI="\(.*\)"$#\1#p')
_audio_head=${_audio_head:$((${#_dir_r}-1))}
_video_head=${_video_head:$((${#_dir_r}-1))}
echo download video header $_video_head
curl -s -H 'User-Agent: VLC' "$_base$_dir_r$_video_head" -o "$_dir/$_video_head"
echo download audio header $_audio_head
curl -s -H 'User-Agent: VLC' "$_base$_dir_r$_audio_head" -o "$_dir/$_audio_head"
while :
do
echo download seq: $_seg_num
curl -s -H 'User-Agent: VLC' "$_base$_dir_r$_sub_uri-$_seg_num.webvtt" -o "$_dir/$_sub_uri-$_seg_num.webvtt"
curl -s -H 'User-Agent: VLC' "$_base$_dir_r$_video_uri-$_seg_num.m4s" -o "$_dir/$_video_uri-$_seg_num.m4s"
curl -s -H 'User-Agent: VLC' "$_base$_dir_r$_audio_uri-$_seg_num.m4s" -o "$_dir/$_audio_uri-$_seg_num.m4s"
echo "#EXTINF:2.88, no desc" >> "$_dir/video.m3u8"
echo "$_video_uri-$_seg_num.m4s" >> "$_dir/video.m3u8"
echo "#EXTINF:2.88, no desc" >> "$_dir/audio.m3u8"
echo "$_audio_uri-$_seg_num.m4s" >> "$_dir/audio.m3u8"
echo "#EXTINF:2.88, no desc" >> "$_dir/sub.m3u8"
echo "$_sub_uri-$_seg_num.webvtt" >> "$_dir/sub.m3u8"
_seg_num=$((_seg_num+1))
sleep $_sleep
done
Alles anzeigen
_url | sender url |
_dir | wo gespeichert werden soll |
paar info:
- user-agent ist auf vlc gestellt. telerising sendet alle streams auch ohne pipe einstellung
- nur HLS7 provider -> settings -> manifest -> manifest type -> HLS7
- proxy muss aus sein fuer diesen provider in telerising provider -> settings -> advanced -> PROXY -> disabled -> update
- nach der aufnahme die _main.m3u8 zbs in vlc oeffnen
- alle chunks erstmal einzeln. muss dann noch gemuxt werden nachdem die subtitles angepasst sind
- nur die erste audiospur wird genommen