#!/bin/bash # REQUIREMENTS # curl - sudo apt install curl # jq - sudo apt install jq # mpv - sudo apt install mpv # xbindkeys - sudo apt install xbindkeys # ffmpeg - sudo apt install ffmpeg # INSTRUCTIONS # FILL IN refresh_token (only once) # How to get it; # https://files.catbox.moe/e3bg5m.png refresh_token="APZUo0TVNv21VWf6ogcIIu3S43wXVJl8d-kA3f6ERL0Jf9WbiVKTJPRJnUkw8U5G5wnon-7Xp6fB12Nf4Di8j6r9zx6iROUH88RjtACd__-FL1CmPKY9CxOi70ReUzP-WMCTXDzmz2o9WgZLzhFJuygIgutimc9tmliOvZZ515vqxaN6u51gFQoFvwqFj58mGLcOXgTGO9CDHrIQxFWs-UXQ-tUCTpavVg" if [ -z "$refresh_token" ] then echo "Add refresh_token" exit fi # use the new refresh_token instead of above if [ -f .refresh_token ]; then refresh_token=$(cat .refresh_token) fi # get your access and refresh tokens token_response=$(curl -s 'https://securetoken.googleapis.com/v1/token?key=AIzaSyBOOpV21k6o3cJc56-4uRNb0jDMzIxShMY' \ -X POST --data-raw 'grant_type=refresh_token&refresh_token='$refresh_token'' --compressed) access_token=$(echo "$token_response" | jq -r '.access_token') refresh_token=$(echo "$token_response" | jq -r '.refresh_token') echo "$access_token" > .access_token echo "$refresh_token" > .refresh_token # function to launch the stream in mpv launch_mpv() { feed_token=$1 mpv --really-quiet --no-terminal --mute --profile=norm "https://customer-jwh6wms36w6479b4.cloudflarestream.com/$feed_token/manifest/video.m3u8?parentOrigin=https%3A%2F%2Fwww.fishtank.live" & } # function to record the stream with ffmpeg record_stream() { feed_token=$1 stream_url="https://customer-jwh6wms36w6479b4.cloudflarestream.com/$feed_token/manifest/video.m3u8?parentOrigin=https%3A%2F%2Fwww.fishtank.live" filename="$(date +"%Y-%m-%d_%H-%M-%S")_$feed_token.mp4" ffmpeg -hide_banner -loglevel warning -i "$stream_url" -c copy "$filename" } # get the list of live streams live_streams=$(curl -s 'https://www.fishtank.live/api/live-streams' -H "AuthToken: $access_token" --compressed) # extract the stream names and tokens streams=$(echo "$live_streams" | jq -r '.liveStreams | .[] | "\(.name)|\(.url)"') # array to keep track of running mpv instances running_streams=() # launch the streams in mpv while read -r line; do feed_token=$(echo "$line" | cut -d '|' -f2) launch_mpv "$feed_token" running_streams+=("$feed_token") done <<< "$streams" # function to check if a stream is running is_running() { feed_token=$1 for stream in "${running_streams[@]}"; do if [ "$stream" == "$feed_token" ]; then return 0 fi done return 1 } # bind the hotkey CTRL+r to record the currently focused mpv instance xbindkeys -f /dev/null - <