status

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.

solutions

if you still want to pursue ripping from beyond live, this would be the general process of getting it working autonomously:

  1. acquire the decryption key and manifest url
  2. ask grok/chatgpt/claude to write you a python script to download a stream from beyond live using these steps
  3. for 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.

  4. run the script! (and pray that it works)

alternatively, you can use the manual ripping method below.


beyond live - streams

notes

requirements

download

  1. open edge and enable the prp extension
  2. open the stream or reload the tab if already on the desired page
  3. open the prp extension, locate the page url in the keys section and click + to expand the entry
  4. copy the manifest url and key, and add them to the empty mpd and key variables in the bl.py script
  5. disable the prp extension and reload the tab
  6. open the dev tools with F12, switch to the network tab and locate the latest manifest.mpd entry
  7. click the entry, locate the request headers on the right hand side and copy the authorization value
  8. run the script and paste in the token when prompted
  9. python bl.py
  10. when the download errors, get a fresh token from the latest manifest.mpd entry and paste it in as prompted
  11. repeat step 10 until the stream is over

note: make sure you work quickly when copy/pasting the fresh tokens. wait too long and you may miss downloading some segments!

post process

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.

  1. make directories for the video and audio streams
  2. mkdir vid aud
  3. move the init files into their respective directories
  4. mv 001/0_*/_init_dec.mp4 vid
    mv 001/1_*/_init_dec.mp4 aud
    
  5. move the segments into their respective directories, skipping over any duplicates
  6. 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
    
  7. concatenate the segments onto the init file
  8. cat vid/*.m4s >> vid/_init_dec.mp4
    cat aud/*.m4s >> aud/_init_dec.mp4
  9. merge the streams
  10. ffmpeg -i vid/_init_dec.mp4 -i aud/_init_dec.mp4 -c copy merge.mp4

subtitles

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