[FFmpeg-user] Getting m3u8 URL from SVTPlay channels?

Reino Wijnsma rwijnsma at xs4all.nl
Sat Dec 25 13:19:35 EET 2021

On 2021-12-25T10:13:14+0100, Bo Berglund <bo.berglund at gmail.com> wrote:
> CMD="curl -s \"${STREAMURL}\" | grep -o -e \"https://.\+m3u8\" | head -n 1"
> M3U8=$(eval $CMD)
> if [ -z $M3U8 ]; then
>   RESULT=1
>   echo "Error, no response!"
> else
>   RESULT=0
>   eval "echo ${STREAMURL} ${M3U8} > ${URLFILE}"
>   echo "Done, result in  ${URLFILE}:  ${STREAMURL} ${M3U8}"
> fi
> exit ${RESULT}
> [...]
> But on the following pages it does not work at all:
> https://www.svtplay.se/kanaler/svt1?start=auto
It's really bad practise to parse HTML with RegEx! It's as if you're using a sledgehammer when you should've been using a pair of tweezers for instance.

- Why it's not possible to use regex to parse HTML/XML: a formal explanation in layman's terms <https://stackoverflow.com/q/6751105>
- RegEx match open tags except XHTML self-contained tags <https://stackoverflow.com/q/1732348>
- How do I extract data from an HTML or XML file? <https://mywiki.wooledge.org/BashFAQ/113>

Use the right tool for the job, use an HTML/XML parser, like Xidel <http://videlibri.sourceforge.net/xidel.html>! And besides, you're extremely lucky if this has worked for you this far, because nowadays it's pretty rare to find m3u8-urls that easily in the HTML-source.

It appears the video will only play if you're a Swedish citizen, so you have to do this yourself.

$ xidel -s "https://www.svtplay.se/kanaler/svt1?start=auto" -e '//div[@data-testid="videoplayer"]' --output-node-format=xml --output-node-indent
<div data-rt="video-player-channels" data-testid="videoplayer" class="sc-608300a9-0 dwSuQH">
  <div class="_video-player_qoxkq_1 _video-player--16-9_qoxkq_1">

This div is where the magic happens. Take a good look at the browser's network-traffic. You're probably going to need the value of the "class"-attribute.


More information about the ffmpeg-user mailing list