and_cesbo

HLS Downloader

Dec 18th, 2018
454
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.63 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Usage: hls-get.sh http://...
  4.  
  5. OUT_TS="dump.ts"
  6. OLD_M3U8=""
  7.  
  8. LINK="$1"
  9. M3U8=$(curl -s "$LINK")
  10.  
  11. forward_link() {
  12.     B="$1"
  13.     L="$2"
  14.  
  15.     if echo "$L" | grep "^http[s]\{0,1\}://" ; then
  16.         echo "$L"
  17.     elif echo "$L" | grep "^/" ; then
  18.         U=$(echo "$B" | sed -e 's/^\(http[s]\{0,1\}:\/\/[^/]*\).*$/\1/')
  19.         echo "$U$L"
  20.     else
  21.         U=$(echo "$B" |  sed -e 's/^\([^?]*\).*$/\1/' | sed -e 's/^\(.*\/\).*$/\1/')
  22.         echo "$U$L"
  23.     fi
  24. }
  25.  
  26. SUBLINK=$(echo "$M3U8" | grep '^#EXT-X-STREAM-INF' -A1 | tail -n 1)
  27. if [ -n "$SUBLINK" ] ; then
  28.     LINK=$(forward_link "$LINK" "$SUBLINK")
  29.     M3U8=$(curl -s "$LINK")
  30. fi
  31.  
  32. wait_seq() {
  33.     SEQ=$(echo "$M3U8" | grep "^#EXT-X-MEDIA-SEQUENCE")
  34.     while [ 1 ] ; do
  35.         NEXT_M3U8=$(curl -s "$LINK")
  36.         if echo "$NEXT_M3U8" | grep -q "$SEQ" ; then
  37.             sleep 1
  38.         else
  39.             M3U8="$NEXT_M3U8"
  40.             break
  41.         fi
  42.         sleep 1
  43.     done
  44. }
  45.  
  46. download_seq() {
  47.     SEQ=$(echo "$M3U8" | grep "^#EXT-X-MEDIA-SEQUENCE" | cut -d ":" -f 2)
  48.     echo "$(date '+%F %H') Downloading sequence: $SEQ" >&2
  49.     echo "$M3U8" | grep '^#EXTINF' -A1 | grep -v '^#' | while read TSLINK ; do
  50.         TSLINK=$(forward_link "$LINK" "$TSLINK")
  51.         FNAME=$(echo "$TSLINK" | sed -e 's/^.*\\\([^?]*\).*$/\1/')
  52.         if echo "$OLD_M3U8" | grep -q "$FNAME" ; then
  53.             : skip
  54.         else
  55.             echo "$(date '+%F %H')    Downloading ts: $FNAME" >&2
  56.             curl -sS "$U$TSLINK" >>$OUT_TS
  57.         fi
  58.     done
  59.     OLD_M3U8="$M3U8"
  60.     wait_seq
  61. }
  62.  
  63. : >$OUT_TS
  64. while [ 1 ] ; do
  65.     download_seq || break
  66. done
Add Comment
Please, Sign In to add comment