Downloads of v 3.27.1:


Last Update:

16 Feb 2021

Package Maintainer(s):

Software Author(s):

  • A. S. Budden
  • Alexey Tourbin
  • Andrew Elwell
  • Andy Bircumshaw
  • Bill Boughton
  • Caius Durling
  • Chris Reed
  • BBR
  • Crispin Flowerday
  • David Llewellyn-Jones
  • David Woodhouse
  • Edward Betts
  • HenderHobbit
  • Ian Praxil
  • James
  • James Laver
  • James Ross
  • James Teh
  • John Henderson
  • Jon Davies
  • Jonathan Harris
  • Jonathan Larmour
  • Jonathan Wiltshire
  • Matthew Boyle
  • Mike Crowe
  • Mike Fleetwood
  • Murray
  • Peter Oliver
  • Phil Cole
  • Ralf Baechle
  • Sharon Kimble
  • Shevek
  • Steven Luo
  • Stuart Henderson
  • Vangelis forthnet
  • Vangelis66
  • Will Elwood
  • dinkypumpkin
  • fs ck
  • fsck
  • hintswen
  • linuxcentrenet
  • notnac
  • wiehe
  • willemw12


iplayer admin bbc tv radio media video audio podcast

getiplayer (Install)

  • 1
  • 2
  • 3

3.27.1 | Updated: 16 Feb 2021



Downloads of v 3.27.1:



Software Author(s):

  • A. S. Budden
  • Alexey Tourbin
  • Andrew Elwell
  • Andy Bircumshaw
  • Bill Boughton
  • Caius Durling
  • Chris Reed
  • BBR
  • Crispin Flowerday
  • David Llewellyn-Jones
  • David Woodhouse
  • Edward Betts
  • HenderHobbit
  • Ian Praxil
  • James
  • James Laver
  • James Ross
  • James Teh
  • John Henderson
  • Jon Davies
  • Jonathan Harris
  • Jonathan Larmour
  • Jonathan Wiltshire
  • Matthew Boyle
  • Mike Crowe
  • Mike Fleetwood
  • Murray
  • Peter Oliver
  • Phil Cole
  • Ralf Baechle
  • Sharon Kimble
  • Shevek
  • Steven Luo
  • Stuart Henderson
  • Vangelis forthnet
  • Vangelis66
  • Will Elwood
  • dinkypumpkin
  • fs ck
  • fsck
  • hintswen
  • linuxcentrenet
  • notnac
  • wiehe
  • willemw12

  • 1
  • 2
  • 3
getiplayer (Install) 3.27.1

  • 1
  • 2
  • 3

All Checks are Passing

3 Passing Tests

Validation Testing Passed

Verification Testing Passed


Scan Testing Successful:

No detections found in any package files


To install getiplayer (Install), run the following command from the command line or from PowerShell:


To upgrade getiplayer (Install), run the following command from the command line or from PowerShell:


To uninstall getiplayer (Install), run the following command from the command line or from PowerShell:


NOTE: This applies to both open source and commercial editions of Chocolatey.

1. Ensure you are set for organizational deployment

Please see the organizational deployment guide

  • Open Source or Commercial:
    • Proxy Repository - Create a proxy nuget repository on Nexus, Artifactory Pro, or a proxy Chocolatey repository on ProGet. Point your upstream to Packages cache on first access automatically. Make sure your choco clients are using your proxy repository as a source and NOT the default community repository. See source command for more information.
    • You can also just download the package and push it to a repository Download

3. Enter your internal repository url

(this should look similar to

4. Choose your deployment method:

choco upgrade getiplayer -y --source="'STEP 3 URL'" [other options]

See options you can pass to upgrade.

See best practices for scripting.

Add this to a PowerShell script or use a Batch script with tools and in places where you are calling directly to Chocolatey. If you are integrating, keep in mind enhanced exit codes.

If you do use a PowerShell script, use the following to ensure bad exit codes are shown as failures:

choco upgrade getiplayer -y --source="'STEP 3 URL'"

Write-Verbose "Exit code was $exitCode"
$validExitCodes = @(0, 1605, 1614, 1641, 3010)
if ($validExitCodes -contains $exitCode) {
  Exit 0

Exit $exitCode

- name: Ensure getiplayer installed
    name: getiplayer
    state: present
    version: 3.27.1
    source: STEP 3 URL

See docs at

chocolatey_package 'getiplayer' do
  action    :install
  version  '3.27.1'
  source   'STEP 3 URL'

See docs at

    Name: getiplayer,
    Version: 3.27.1,
    Source: STEP 3 URL

Requires Otter Chocolatey Extension. See docs at

cChocoPackageInstaller getiplayer
   Name     = 'getiplayer'
   Ensure   = 'Present'
   Version  = '3.27.1'
   Source   = 'STEP 3 URL'

Requires cChoco DSC Resource. See docs at

package { 'getiplayer':
  provider => 'chocolatey',
  ensure   => '3.27.1',
  source   => 'STEP 3 URL',

Requires Puppet Chocolatey Provider module. See docs at

salt '*' chocolatey.install getiplayer version="3.27.1" source="STEP 3 URL"

See docs at

5. If applicable - Chocolatey configuration/installation

See infrastructure management matrix for Chocolatey configuration elements and examples.

Private CDN cached downloads available for licensed customers. Never experience 404 breakages again! Learn more...

This package was approved as a trusted package on 16 Feb 2021.


get_iplayer: BBC iPlayer/BBC Sounds Indexing Tool and PVR


  • Downloads TV and radio programmes from BBC iPlayer/BBC Sounds
  • Allows multiple programmes to be downloaded using a single command
  • Indexing of most available iPlayer/Sounds catch-up programmes from previous 30 days (not BBC Three, Red Button, iPlayer Exclusive, or Podcast-only)
  • Caching of programme index with automatic updating
  • Regex search on programme name
  • Regex search on programme description and episode title
  • Filter search results by channel
  • Direct download via programme ID or URL
  • PVR capability (may be used with cron or Task Scheduler)
  • HTTP proxy support
  • Perl 5.16+ required, plus LWP, LWPProtocolhttps, XML::LibXML, Mojolicious, and CGI modules
  • Requires ffmpeg for conversion to MP4 and AtomicParsley for metadata tagging
  • Runs on Linux/BSD (Ubuntu, Fedora, OpenBSD and others), macOS (10.10+), Windows (7/8/10)


  • get_iplayer can only search for programmes that were scheduled for broadcast on BBC linear services within the previous 30 days, even if some are available for more than 30 days on the iPlayer/Sounds sites. BBC Three programmes, red button programmes, iPlayer box sets, web-only content, and BBC podcasts are not searchable. Old programmes that are still available after 30 days must be located on the iPlayer/Sounds sites and downloaded directly via PID or URL.
  • get_iplayer does not support downloading news/sport videos, other embedded media, archive sites, special collections, educational material, programme clips or any content other than whole episodes of programmes broadcast on BBC linear services within the previous 30 days, plus episodes of BBC Three programmes posted within the same period. It is often possible to download other content such as red button programmes or iPlayer box sets directly via PID or URL. get_iplayer DOES NOT support live recording from BBC channels.

# Update get_iplayer to new version

import subprocess
import os
from shutil import copyfile
import requests

def replaceInTag(text, tag_name, new_inner):
    start_tag, end_tag = '<' + tag_name + '>', '</' + tag_name + '>'
    start_pos, end_pos = text.find(start_tag), nuspec.find(end_tag)

    text = text[:start_pos] + start_tag + new_inner + text[end_pos:]
    return text

# folders
user_dir = os.environ['USERPROFILE']
app_name = 'get_iplayer'
choco_name = 'getiplayer'
get_iplayer_folder = os.path.join(user_dir, 'GitHub', app_name)
wiki_folder = get_iplayer_folder + '_wiki'
choco_folder = os.path.join(user_dir, 'Documents', 'Scripts', choco_name)

# update GitHub + wiki folders (I think 'fetch' is correct)
assert'git fetch', cwd=get_iplayer_folder) == 0
assert'git fetch', cwd=wiki_folder) == 0

nuspec_filename = os.path.join(choco_folder, choco_name + '.nuspec')
nuspec = open(nuspec_filename, encoding='utf-8').read()

authors = open(os.path.join(get_iplayer_folder, 'CONTRIBUTORS')).read().replace('\n', ', ')[:-2]
nuspec = replaceInTag(nuspec, 'authors', authors)

release_notes = open(os.path.join(wiki_folder, '')).read().splitlines()

# find first link - should point to the newest version
for line in release_notes:
    start_pos, mid_pos, end_pos = line.find('['), line.find(']('), line.find(')')
    if -1 in (start_pos, mid_pos, end_pos):
    link_name = line[start_pos+1:mid_pos]
    link_dest = line[mid_pos+2:end_pos]
    if link_name.startswith(app_name):
        version = link_name.split(' ')[1]

print(app_name + ' version ' + version)
nuspec = replaceInTag(nuspec, 'version', version)

# get info from readme
readme = open(os.path.join(get_iplayer_folder, '')).read().splitlines()

# get first two sections (title and 'Features')
description = ''
sections = 0
for line in readme:
    if line.startswith('## '):
        sections += 1
        if sections > 2:
    description += line.replace('<', '`').replace('>', '`') + '\n'

nuspec = replaceInTag(nuspec, 'description', description)

release_notes_file, link_name = link_dest.split('#')
release_notes = open(os.path.join(wiki_folder, release_notes_file + '.md'), encoding='utf-8').read().splitlines()

new_release_notes = ''
in_section = False
for line in release_notes:
    if line.startswith('<a name="' + link_name + '"/>'):
        in_section = True
    if in_section:
        if line.startswith('<a name="'):  # next section
        new_release_notes += line.replace('<', '`').replace('>', '`') + '\n'  # < and > need to be escaped

nuspec = replaceInTag(nuspec, 'releaseNotes', new_release_notes)
copyfile(nuspec_filename, nuspec_filename + '.bak')
open(nuspec_filename, 'w', encoding='utf-8').write(nuspec)

# get binary info
json = requests.get("").content
release = eval(json.replace(b'false', b'False').replace(b'null', b'None').replace(b'true', b'True'))

for asset in release['assets']:
    name = asset['name']
    url = asset['browser_download_url']
    if name.endswith('.exe'):
        exe_url = url
    elif name.endswith('.sha1'):
        sha1 = requests.get(url).content.decode('utf-8').split(' ')[0]
    elif name.endswith('.sha256'):
        sha256 = requests.get(url).content.decode('utf-8').split(' ')[0]

# update the exe URL and checksums in the install file
install_file = os.path.join(choco_folder, 'tools', 'chocolateyinstall.ps1')
install = open(install_file, encoding='utf-8').read().splitlines()
new_install = ''
for line in install:
    pos = line.find("'")
    if line.startswith('$url'):
        line = line[:pos] + "'" + exe_url + "'"
    elif 'checksum ' in line:
        line = line[:pos] + "'" + sha1 + "'"
    elif 'checksum64' in line:
        line = line[:pos] + "'" + sha256 + "'"
    new_install += line + '\n'

open(install_file, 'w', encoding='utf-8').write(new_install)

# package and push to server
assert'choco pack', cwd=choco_folder) == 0
assert'choco push', cwd=choco_folder) == 0
# Updating get_iplayer on Chocolatey

1. Open getiplayer.nuspec in Notepad++

2. Update

   - version
   - authors: replace **\n** with **,** in [contributors](
   - description 
   - just the first (Features) section of [README]( replace **<** and **>** with **[** and **]**
   - [releaseNotes]( put links in for previous release notes
   - replace angle brackets with &lt; and &gt; (doesn't work within `code tags`, so replace and remove the ` characters)

3. Go to [release page]( to get URLs and checksums (inc 64 bit)

4. Open tools/chocolateyinstall.ps1 in Notepad++; update:

   - `$url`
   - `$url64`
   - `checksum`
   - `checksum64`

5. Admin command prompt

   cd \Users\bjs54\Documents\Scripts\getiplayer
   choco pack
   del getiplayer.3.XX.nupkg  <-- previous version
   choco push

*The `push` command renders the below unnecessary:*

1. *[Login to Chocolatey](* 
2. *Upload C:\Documents\Scripts\getiplayer\getiplayer.3.XX.nupkg*
## Summary
How do I create packages? See

If you are submitting packages to the community feed (
always try to ensure you have read, understood and adhere to the create
packages wiki link above.

## Automatic Packaging Updates?
Consider making this package an automatic package, for the best 
maintainability over time. Read up at

## Shim Generation
Any executables you include in the package or download (but don't call 
install against using the built-in functions) will be automatically shimmed.

This means those executables will automatically be included on the path.
Shim generation runs whether the package is self-contained or uses automation 

By default, these are considered console applications.

If the application is a GUI, you should create an empty file next to the exe 
named 'name.exe.gui' e.g. 'bob.exe' would need a file named 'bob.exe.gui'.

If you want to ignore the executable, create an empty file next to the exe 
named 'name.exe.ignore' e.g. 'bob.exe' would need a file named 

## Self-Contained? 
If you have a self-contained package, you can remove the automation scripts 
entirely and just include the executables, they will automatically get shimmed, 
which puts them on the path. Ensure you have the legal right to distribute 
the application though. See 

You should read up on the Shim Generation section to familiarize yourself 
on what to do with GUI applications and/or ignoring shims.

## Automation Scripts
You have a powerful use of Chocolatey, as you are using PowerShell. So you
can do just about anything you need. Choco has some very handy built-in 
functions that you can use, these are sometimes called the helpers.

### Built-In Functions

A note about a couple:
* Get-BinRoot - this is a horribly named function that doesn't do what new folks think it does. It gets you the 'tools' root, which by default is set to 'c:\tools', not the chocolateyInstall bin folder - see
* Install-BinFile - used for non-exe files - executables are automatically shimmed... - see
* Uninstall-BinFile - used for non-exe files - executables are automatically shimmed - see

### Getting package specific information
Use the package parameters pattern - see

### Need to mount an ISO?

### Environment Variables
Chocolatey makes a number of environment variables available (You can access any of these with $env:TheVariableNameBelow):

 * TEMP = Overridden to the CacheLocation, but may be the same as the original TEMP folder
 * ChocolateyInstall = Top level folder where Chocolatey is installed
 * chocolateyPackageName = The name of the package, equivalent to the id in the nuspec (0.9.9+)
 * chocolateyPackageVersion = The version of the package, equivalent to the version in the nuspec (0.9.9+)
 * chocolateyPackageFolder = The top level location of the package folder

#### Advanced Environment Variables
The following are more advanced settings:

 * chocolateyPackageParameters = (
 * CHOCOLATEY_VERSION = The version of Choco you normally see. Use if you are 'lighting' things up based on choco version. (0.9.9+)
    - Otherwise take a dependency on the specific version you need. 
 * chocolateyForceX86 = If available and set to 'true', then user has requested 32bit version. (0.9.9+)
    - Automatically handled in built in Choco functions. 
 * OS_PLATFORM = Like Windows, OSX, Linux. (0.9.9+)
 * OS_VERSION = The version of OS, like 6.1 something something for Windows. (0.9.9+)
 * OS_NAME = The reported name of the OS. (0.9.9+)
 * IS_PROCESSELEVATED = Is the process elevated? (0.9.9+)
#### Experimental Environment Variables
The following are experimental or use not recommended:

 * OS_IS64BIT = This may not return correctly - it may depend on the process the app is running under (0.9.9+)
 * CHOCOLATEY_VERSION_PRODUCT = the version of Choco that may match CHOCOLATEY_VERSION but may be different (0.9.9+)
    - it's based on git describe
 * IS_ADMIN = Is the user an administrator? But doesn't tell you if the process is elevated. (0.9.9+)
 * chocolateyInstallOverride = Not for use in package automation scripts. (0.9.9+)
 * chocolateyInstallArguments = the installer arguments meant for the native installer. You should use chocolateyPackageParameters intead. (0.9.9+)


$ErrorActionPreference = 'Stop';

$packageName= 'getiplayer'
$toolsDir   = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$url        = ''
$url64      = ''

$packageArgs = @{
  packageName   = $packageName
  unzipLocation = $toolsDir
  fileType      = 'exe'
  url           = $url
  url64bit      = $url64

  softwareName  = 'getiplayer*'

  checksum      = '574115e41bb7dcc97ba36372acf40ef3df6f2ba3988304c27bef05abbce0865e'
  checksumType  = 'sha256'
  checksum64    = '6dcadf0553401fe3f5594bedc5629360266921bf295d70140861cbffa10cccef'
  checksumType64= 'sha256'


Install-ChocolateyPackage @packageArgs

$ErrorActionPreference = 'Stop';

$packageName = 'getiplayer'
$softwareName = 'get_iplayer*'
$installerType = 'EXE' 

$validExitCodes = @(0, 3010, 1605, 1614, 1641)
if ($installerType -ne 'MSI') {
  $silentArgs = '/S'
  $validExitCodes = @(0)

$uninstalled = $false
[array]$key = Get-UninstallRegistryKey -SoftwareName $softwareName

if ($key.Count -eq 1) {
  $key | % { 
    $file = "$($_.UninstallString)"

    if ($installerType -eq 'MSI') {
      $silentArgs = "$($_.PSChildName) $silentArgs"

      $file = ''

    Uninstall-ChocolateyPackage -PackageName $packageName `
                                -FileType $installerType `
                                -SilentArgs "$silentArgs" `
                                -ValidExitCodes $validExitCodes `
                                -File "$file"
} elseif ($key.Count -eq 0) {
  Write-Warning "$packageName has already been uninstalled by other means."
} elseif ($key.Count -gt 1) {
  Write-Warning "$key.Count matches found!"
  Write-Warning "To prevent accidental data loss, no programs will be uninstalled."
  Write-Warning "Please alert package maintainer the following keys were matched:"
  $key | % {Write-Warning "- $_.DisplayName"}

Log in or click on link to see number of positives.

In cases where actual malware is found, the packages are subject to removal. Software sometimes has false positives. Moderators do not necessarily validate the safety of the underlying software, only that a package retrieves software from the official distribution point and/or validate embedded software against official distribution point (where distribution rights allow redistribution).

Chocolatey Pro provides runtime protection from possible malware.

Version Downloads Last Updated Status
getiplayer (Install) 3.27 49 Monday, February 15, 2021 Approved
getiplayer (Install) 3.26 342 Tuesday, June 30, 2020 Approved
getiplayer (Install) 3.25 411 Monday, February 3, 2020 Approved
getiplayer (Install) 3.24 148 Friday, January 10, 2020 Approved
getiplayer (Install) 3.23 170 Wednesday, December 4, 2019 Approved
getiplayer (Install) 3.22 286 Tuesday, August 20, 2019 Approved
getiplayer (Install) 3.21 218 Monday, July 15, 2019 Approved
getiplayer (Install) 3.20 301 Tuesday, February 26, 2019 Approved
getiplayer (Install) 3.18 227 Thursday, January 3, 2019 Approved

get_iplayer 3.27 Release Notes

Changes in 3.27

  • Removed deprecated --tag-utf8 option
  • For a programme downloaded multiple times, history search now returns the most recent entry with an extant media file instead of the oldest entry.
  • Web PVR
    • Programme info pages and help page now open in new window/tab
    • Play* links now open in new window/tab
    • Play* links are no longer displayed for deleted files
    • Play Direct links should now work in Firefox, Chrome, Edge (but not Safari) With Remote Streaming type = Auto
    • Play Direct links are now only displayed where MP4/M4A files (or MP3 files from obsolete versions of get_iplayer) are available
    • Removed Quicktime, AVI streaming formats
    • Added MPEG-TS, Matroska, AAC, Vorbis streaming formats
  • Windows: Fixed incorrect documentation link in installer finish screen
  • macOS: get_iplayer should work on Apple Silicon systems via Rosetta 2, but this has not been verified. The developers do not have access to an Apple Silicon system.
  • get_iplayer 3.27 or higher is required with Mojolicious 9.0+. Earlier releases of Mojolicious will continue to work with get_iplayer 3.27 or higher.


See: get_iplayer wiki

More Information

See: get_iplayer wiki

This package has no dependencies.

Discussion for the getiplayer (Install) Package

Ground Rules:

  • This discussion is only about getiplayer (Install) and the getiplayer (Install) package. If you have feedback for Chocolatey, please contact the Google Group.
  • This discussion will carry over multiple versions. If you have a comment about a particular version, please note that in your comments.
  • The maintainers of this Chocolatey Package will be notified about new comments that are posted to this Disqus thread, however, it is NOT a guarantee that you will get a response. If you do not hear back from the maintainers after posting a message below, please follow up by using the link on the left side of this page or follow this link to contact maintainers. If you still hear nothing back, please follow the package triage process.
  • Tell us what you love about the package or getiplayer (Install), or tell us what needs improvement.
  • Share your experiences with the package, or extra configuration or gotchas that you've found.
  • If you use a url, the comment will be flagged for moderation until you've been whitelisted. Disqus moderated comments are approved on a weekly schedule if not sooner. It could take between 1-5 days for your comment to show up.
comments powered by Disqus