TLDR: beyond live is shit. don't buy their streams. don't use their service.
beyond live has recently made some changes to it's service which makes it difficult to rip streams.
firstly, as of jan 26 2025, content viewing will only work on windows+edge and osx/ios+safari. the purpose of this is to disable widevine in favour of playready/fairplay. this isn't actually a big deal since playready was cracked in 2024 and decryption keys can still easily be acquired. secondly, the manifest url now has an authorisation token in it's request headers which updates every 2 minutes. this means you will very quickly get a 403 error when downloading the stream. this is the main issue as it doesn't have an easy workaround.
on top of this, the last time I purchased a concert ticket the stream simply did not play at all despite using the required os and browser. they also refused to refund me when I brought this up with them. in my opinion beyond live has ruined their site and reputation so I will no longer be using their service and I emplore you to follow suit.
if you still want to pursue ripping from beyond live, this would be the general process of getting it working autonomously:
playreadyproxyvineless and UserAgent-Switchern-m3u8dl-re indefinitely while retrieving fresh auth tokens from the api each time it errorsn-m3u8dl-re when downloadingfor this to work you will need to provide a HAR file (network activity capture) of a real concert stream for the LLM to analyse and identify things like headers and api end points. browser cookies will most likely be necessary too, so grab them with Get-cookies.txt-LOCALLY and tell the AI to incorporate them into the script when making requests.
alternatively, you can use the manual ripping method below.
prp extensionprp extension, locate the page url in the keys section and click + to expand the entrympd and key variables in the bl.py scriptprp extension and reload the tabmanifest.mpd entryrequest headers on the right hand side and copy the authorization valuepython bl.py
manifest.mpd entry and paste it in as promptednote: make sure you work quickly when copy/pasting the fresh tokens. wait too long and you may miss downloading some segments!
at this point you should have all the segments downloaded, split up into almost 100 directories. these segments now have to be concatenated to become a playable file.
if you transfer the files over to linux, this can be done very easily with the cat utility. I have also written a small merge script that can automate this process as well as the subtitle steps below. simply add it to your path, make it executable and run it in the directory containing all your segment directories.
as far as I'm aware the windows equivalent type does not work the same way cat does so you instead have to use ffmpeg, but despite following the concatenation guide I simply can not get this working consistently. windows users are welcome to follow along with the general process below, but I can't guarantee you any success. you're on your own now, good luck.
mkdir vid aud
mv 001/0_*/_init_dec.mp4 vid
mv 001/1_*/_init_dec.mp4 aud
find . -type d -name '0_*' | while read -r f; do mv --update=none "$f"/*.m4s vid; done
find . -type d -name '1_*' | while read -r f; do mv --update=none "$f"/*.m4s aud; done
cat vid/*.m4s >> vid/_init_dec.mp4
cat aud/*.m4s >> aud/_init_dec.mp4
ffmpeg -i vid/_init_dec.mp4 -i aud/_init_dec.mp4 -c copy merge.mp4
subtitle segments can be concatenated in a similar way to the video and audio streams, but since they are raw ttml they will also need to be converted to srt using seconv, which is provided by the subtitleedit-cli program.
unfortunately the subtitle timestamps are almost guaranteed to be completely messed up, so they are effectively useless as is and I wouldn't recommend muxing them in with your video and audio streams unless you've manually retimed them.
to handle all subtitle languages in one go, you can run a loop like so:
find 001 -mindepth 1 -type d | grep -vE '001/(0|1)_.*' | sed 's/.*_//' | while read -r lang; do
[ ! -d sub/"$lang" ] && mkdir -p sub/"$lang"
mv 001/*_"$lang"_*/_init.mp4 sub/"$lang"
find . -type d -name "*_${lang}_*" | while read -r f; do mv --update=none "$f"/*.m4s sub/"$lang"; done
cat sub/"$lang"/*.m4s >> sub/"$lang"/_init.mp4
seconv sub/"$lang"/_init.mp4 srt >/dev/null 2>&1 && mv sub/"$lang"/_init.srt "$lang".srt
done