Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Usage: hls-get.sh http://...
- OUT_TS="dump.ts"
- OLD_M3U8=""
- LINK="$1"
- M3U8=$(curl -s "$LINK")
- forward_link() {
- B="$1"
- L="$2"
- if echo "$L" | grep "^http[s]\{0,1\}://" ; then
- echo "$L"
- elif echo "$L" | grep "^/" ; then
- U=$(echo "$B" | sed -e 's/^\(http[s]\{0,1\}:\/\/[^/]*\).*$/\1/')
- echo "$U$L"
- else
- U=$(echo "$B" | sed -e 's/^\([^?]*\).*$/\1/' | sed -e 's/^\(.*\/\).*$/\1/')
- echo "$U$L"
- fi
- }
- SUBLINK=$(echo "$M3U8" | grep '^#EXT-X-STREAM-INF' -A1 | tail -n 1)
- if [ -n "$SUBLINK" ] ; then
- LINK=$(forward_link "$LINK" "$SUBLINK")
- M3U8=$(curl -s "$LINK")
- fi
- wait_seq() {
- SEQ=$(echo "$M3U8" | grep "^#EXT-X-MEDIA-SEQUENCE")
- while [ 1 ] ; do
- NEXT_M3U8=$(curl -s "$LINK")
- if echo "$NEXT_M3U8" | grep -q "$SEQ" ; then
- sleep 1
- else
- M3U8="$NEXT_M3U8"
- break
- fi
- sleep 1
- done
- }
- download_seq() {
- SEQ=$(echo "$M3U8" | grep "^#EXT-X-MEDIA-SEQUENCE" | cut -d ":" -f 2)
- echo "$(date '+%F %H') Downloading sequence: $SEQ" >&2
- echo "$M3U8" | grep '^#EXTINF' -A1 | grep -v '^#' | while read TSLINK ; do
- TSLINK=$(forward_link "$LINK" "$TSLINK")
- FNAME=$(echo "$TSLINK" | sed -e 's/^.*\\\([^?]*\).*$/\1/')
- if echo "$OLD_M3U8" | grep -q "$FNAME" ; then
- : skip
- else
- echo "$(date '+%F %H') Downloading ts: $FNAME" >&2
- curl -sS "$U$TSLINK" >>$OUT_TS
- fi
- done
- OLD_M3U8="$M3U8"
- wait_seq
- }
- : >$OUT_TS
- while [ 1 ] ; do
- download_seq || break
- done
Add Comment
Please, Sign In to add comment