status

beyond live has recently made some changes to it's services 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. thankfully 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 that when you attempt to download the stream you will very quickly get a 403 error. this issue is far more annoying and doesn't have an easy work around. it's possible that you could write a script to request a fresh token from the api when the current one expires but I'm not savvy enough to do that myself and you can only interact with the api and test scripts in the short window of time when a stream is actually live.

the only solution I currently have is to sit there for the entire duration of the stream copying fresh tokens and restarting the download over and over. this also means you have to do manual segment merging which I've only ever gotten to work consistently on linux. I've written some scripts to help with both the downloading and merging processes but it's still a pain.

considering all this and the fact that the last time I purchased a concert ticket the stream did not load or play at all because they've broken their site so much and they even refused to refund me, I will no longer be using beyond live or updating this guide.


beyond live - streams

notes

requirements

download

  1. install the required programs and add them to your PATH
  2. ensure the prp api server is running, then open edge and enable the prp extension
  3. open the stream or reload the tab if already on the desired page
  4. open the prp extension, locate the page url in the keys section and click + to expand the entry
  5. copy the manifest url and key, and add them to the empty mpd and key variables in the bl.py script
  6. disable the prp extension and reload the tab
  7. open the dev tools with F12, switch to the network tab and locate the latest manifest.mpd entry
  8. click the entry, locate the request headers on the right hand side and copy the authorization value
  9. run the script and paste in the token when prompted
  10. python bl.py
  11. when the download errors, get a fresh token from the latest manifest.mpd entry and paste it in as prompted
  12. 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