Automating BBC iPlayer and BBC Sounds

Code for automating these websites, for convenience and for accessibility: BBC iPlayer - Home BBC Sounds - Music. Radio. Podcasts Code tested 2026-03-05.

Get/set playback rate


Code: Select all


//get playback rate (default: 1.0):
document.querySelector('smp-toucan-player').playbackRate;

//set playback rate:
document.querySelector('smp-toucan-player').playbackRate = 1.5;


Get/set elapsed time, get duration


Code: Select all


//get elapsed time (seconds and fractions of seconds):
document.querySelector('smp-toucan-player').currentTime;

//get duration (seconds and fractions of seconds, read-only):
document.querySelector('smp-toucan-player').duration;

//rewind by 5 seconds:
document.querySelector('smp-toucan-player').currentTime -= 5;

//fast-forward by 5 seconds:
document.querySelector('smp-toucan-player').currentTime += 5;

//set elapsed time:
document.querySelector('smp-toucan-player').currentTime = 0;


Get/set volume, get/set mute state


Code: Select all


//get volume (minimum: 0.0, maximum: 1.0):
document.querySelector('smp-toucan-player').volume;

//set volume:
document.querySelector('smp-toucan-player').volume = 1.0;

//get mute state (boolean value, true/false):
document.querySelector('smp-toucan-player').muted;

//set mute to on:
document.querySelector('smp-toucan-player').muted = true;

//set mute to off:
document.querySelector('smp-toucan-player').muted = false;

//toggle mute on/off:
document.querySelector('smp-toucan-player').muted = !document.querySelector('smp-toucan-player').muted;

//toggle mute on/off (uses XOR assignment operator):
document.querySelector('smp-toucan-player').muted ^= 1;


Get/set play/pause state


Code: Select all


//get play/pause state (boolean value, true/false, read-only):
document.querySelector('smp-toucan-player').paused;

//pause the video:
document.querySelector('smp-toucan-player').pause();

//play/resume the video:
document.querySelector('smp-toucan-player').play();

//toggle play/pause:
if (document.querySelector('smp-toucan-player').paused)
	document.querySelector('smp-toucan-player').play();
else
	document.querySelector('smp-toucan-player').pause();


Get/set subtitles on/off state


Code: Select all


//get the subtitles on/off state (boolean value, true/false):
document.querySelector('smp-toucan-player').subtitles.isOn;

//set the subtitles to on:
document.querySelector('smp-toucan-player').subtitles.on();

//set the subtitles to off:
document.querySelector('smp-toucan-player').subtitles.off();

//toggle subtitles on/off:
if (document.querySelector('smp-toucan-player').subtitles.isOn)
	document.querySelector('smp-toucan-player').subtitles.off();
else
	document.querySelector('smp-toucan-player').subtitles.on();


Get/set skip interval (e.g. 5/10/20 seconds)

There are many terms for skip interval: E.g. seek amount, seek interval. E.g. skip duration, skip interval. Note: in BBC iPlayer, toggling the subtitles on/off will revert the intervals, back to the default values. Note: in BBC Sounds, the intervals will almost immediately revert.


Code: Select all



//one-liner to set both skip intervals to 5 seconds:
document.querySelector('smp-toucan-player').shadowRoot.querySelector('smp-video-layout').shadowRoot.querySelector('smp-core-controls').shadowRoot.querySelectorAll('smp-interval-button').forEach(o => o.interval = 5);

//get the skip intervals:
oBtns = document.querySelector('smp-toucan-player').shadowRoot.querySelector('smp-video-layout').shadowRoot.querySelector('smp-core-controls').shadowRoot.querySelectorAll('smp-interval-button');
vIvl1 = oBtns[0].interval;
vIvl2 = oBtns[1].interval;

//set the skip intervals:
oBtns = document.querySelector('smp-toucan-player').shadowRoot.querySelector('smp-video-layout').shadowRoot.querySelector('smp-core-controls').shadowRoot.querySelectorAll('smp-interval-button');
oBtns[0].interval = 5;
oBtns[1].interval = 5;

//note: for BBC Sounds, use 'smp-audio-layout' instead of 'smp-video-layout'


Get autoplay state


Code: Select all


//for a video (e.g. BBC iPlayer):
//get the autoplay on/off state (string value, 'true'/'false', setting the value doesn't update the autoplay state):
document.querySelector('smp-toucan-player').shadowRoot.querySelector('smp-video-layout').shadowRoot.querySelector('smp-secondary-controls').shadowRoot.querySelector('smp-playback-settings-panel').shadowRoot.querySelector('smp-autoplay-setting').shadowRoot.querySelector('smp-toggle').shadowRoot.querySelector('div').ariaChecked;

//for audio (e.g. BBC Sounds):
//get the autoplay on/off state:
document.querySelector('smp-toucan-player').shadowRoot.querySelector('smp-audio-layout').shadowRoot.querySelector('smp-secondary-controls').shadowRoot.querySelector('smp-playback-settings-panel').shadowRoot.querySelector('smp-autoplay-setting').shadowRoot.querySelector('smp-toggle').shadowRoot.querySelector('div').ariaChecked;


Notes

The smp-toucan-player object has available many of the standard media/video/audio element methods/properties. Links: HTMLMediaElement - Web APIs | MDN HTMLVideoElement - Web APIs | MDN HTMLAudioElement - Web APIs | MDN Use 'console.dir' in the console, to investigate the methods/properties for an object. E.g. console.dir(document.querySelector('smp-toucan-player').subtitles);