Show Posts

You can view here all posts made by this member. Note that you can only see posts made in areas to which you currently have access.

Messages - Ed

Pages: 1 [2] 3 4 ... 9
Today I listened to The Lives of Harry Lime starring Orson Welles: an episode entitled Blackmail is a Nasty Word.

Or perhaps I should say, 'Today I listened to The Half-life of Harry Lime'.

Thanks are due to the BBC cretin who arranged to broadcast this 28 minute episode in a 19 minute timeslot.

I used to see this quite a lot in the old days.

Whenever the automatics find a gap in the station's schedules, the website's software thinks the station is off-air, and displays a message accordingly, until someone fills in the gap with programme details.

You'll notice that this filling-in has now happened for July 28th, but if you look at some of the dates for the following week you'll see that where no broadcast information has yet been posted the software defaults to announcing the station is off-air: naturally, because its machine-logic doesn't include artificial intelligence.

We, being real(?), "know" that the Beeb won't broadcast silence, because licence payers would object. But the machine, not being real, doesn't understand that concept: no schedule means no broadcast during that period, in terms of its machine logic.

This is actually rather an interesting exercise in the sport of what was formerly termed 'Kremlin-watching'. A practice indulged in by bored journalists during the days of the Cold War.

We observe some external indications, which we use to deduce things about (in this case) the Beeb's internal activities.

For example, I've noticed over the years - and today you noticed it too - that the station's schedules are only posted about a week in advance, even though Jon Pertwee explained in various interviews over the years that the BBC schedules are nowadays finalised about 18 months ahead of time. He used to complain bitterly about it.

Now, we "know" (i.e. we presume) that because 4 Extra is not a normal station - since it is not a production department - that its schedules are actually much easier to fix than, say, those of Radio 4 - as the latter actually has to make the programmes it airs. So we can deduce that being the Scheduler for 4 Extra is easy - all you do is nominate a list of already existing shows held in the Archives.

Thus we can suppose that the station's schedules are already finalised for the next 18 months at least.

However, nothing is posted on the website schedule until 7 days prior to its air-date. I could actually do nearly as well by consulting the Radio Times, which traditionally goes to print about a week ahead of its on-sale date. The RT's staff are given the schedules for printing (or used to be) about ten days before I pick up the magazine off the newsstand in WH Smith.

Presumably, someone releases the schedules to RT for compositing about 7 days before the on-sale day, which is about ten days before the first air-date for that week's issue; so, presumably, that same someone also delivers those schedules to the BBC's website staff for posting at that same time.

Presumably, the schedules are not posted anywhere until RT is sent to the printers, so that late breaking changes can be incorporated: big schedule changes might be made at the last minute, e.g. the Queen Mother dies suddenly, or smaller changes can be made when a celeb or BBC presenter dies, e.g. when Terry Wogan died they were able to insert a tribute programme very quickly.

It's only speculation, but that seems to be what is behind the oddly phrased announcement you saw on the schedules for next week: otherwise they could post these schedules months, maybe years, in advance.

Geek Speak / Convert TS files (320kbps) to MP2 (320kbps)
« on: July 11, 2017, 05:46:50 PM »
This suggestion supplements the method I originally described in this thread, which downloaded a bunch of .TS files from the iPlayer's LIVE stream (containing audio at 320 kbps), and then concatenated them into a single .TS file.

Here is a method for converting the obscure .ts format file into the popular .m4a format, by EXTRACTING the audio stream from the .ts file (which, on iPlayer's live stream, is AAC format audio), and creating a (new) .m4a file - or, optionally, an .mp4 file - containing that audio.

Doing this has one big advantage: files in .m4a (mp4 audio) format are playable in a very wide range of media players/programs (including Winamp, Media Player Classic, GOM Player, VLC Player, etc).

Also, you can add an ID3 tag (well, the iTunes equivalent at least) to an .m4a file, as that is the popular iTunes audio format. The .ts format does not allow ID3 tags to be stored in the file.

Software required -

FFMPEG.exe (Static build recommended)

Procedure -

1.  Create a batch file (a plain-text file with the extension .bat or .cmd)
     (name it, say, convert.bat).
2.  Put FFMPEG.exe in the same directory/folder as the batch file.
3.  Copy-and-paste the command line, below, into the batch file (for this,
     open the batch file in a text editor, e.g. Notepad, not a word processor).
4.  Then save the file (be sure to save it with the extension .bat not .txt).
5.  Run the batch file (a new approach: just drag the .ts file onto the batch file).

Here is the command line for Step 3 (actually, 3 lines), which you copy-and-paste into the batch file:

Code: [Select]
SET file=%1
SET options=-hide_banner -bsf:a aac_adtstoasc -flags global_header
ffmpeg  -i %file%  -vn  -acodec copy  %options%  %file%.m4a

Put the .TS file in the same folder/directory as this batch file, then drag the .ts file onto the batch file. In the batch file, change .m4a to .mp4 if you prefer that.

The procedure performs what is known as a stream copy: i.e. it copies the audio stream in file A into file B, without modifying that stream. Because no re-encoding occurs, the copying procedure is very fast (typically 5 seconds, for a 30 MB half-hour radio show).

Geek Speak / Download a 64 kbps Podcast at 384 kbps using FFMPEG
« on: July 11, 2017, 04:47:12 PM »
Whilst listening to a "Listen Again" radio show on BBC iPlayer, I noticed that it had a button marked DOWNLOAD. This was the first time I'd seen such an option on iPlayer.

Turns out it's a fairly common feature on science programmes (I was listening to a broadcast about botany), albeit one which is completely unknown on Light Entertainment programmes. (This may tell you more about me than about the iPlayer!)

Investigating further, I discovered that it is what the BBC term a 'podcast'. They define this as being an mp3 file, recorded at 64 kbps, downloadable on demand. Probably, therefore, everything I'm about to mention will apply to all BBC podcasts.

You've opened this thread because of what you read in its title, so it won't surprise you to learn that I'm about to describe a method for violating the 64 kbps limitation, and instead downloading the podcast of interest at the standard on-demand bitrate of 384 kbps.

Software required -

FFMPEG.exe (Static build recommended)

Procedure -

1.  Create a batch file (a plain-text file with the extension .bat or .cmd)
     (name it, say, download.bat).
2.  Put FFMPEG.exe in the same directory/folder as the batch file.
3.  Copy-and-paste the command line, below, into the batch file (for this,
     open the batch file in a text editor, e.g. Notepad, not a word processor).
4.  Then save the file (be sure to save it with the extension .bat not .txt).
5.  (Optional) Modify the file extension specified on the command line:
     change it from .mp2 to whatever you want (only mp2 gives 384 kbps output).
6.  Copy-and-paste into the batch file the url address of the mp3 podcast file
     (found by right-clicking on the podcast's "Download" button).
7.  Run the batch file.

Here is the command line for Step 3 (actually, 2 lines), which you copy-and-paste into the batch file:

Code: [Select]
SET url=

ffmpeg  -v 16  -stats  -i  %url%  output.mp2

In Step 6, when you copy-and-paste the url address into the batch file, the SET command should resemble this example (I've added colours: the part in silver is the part you insert) -

SET url=

Important:  Do not modify the url address. Although it is an mp3 address, and you aim to download an mp2 file, it is essential that the target url is EXACTLY the same as the iPlayer page specifies. My command line, above, handles the necessary technical jiggery-pokery.

The above method should be capable of downloading any podcast that does not use DRM (but I've never come across a DRM podcast on the BBC site). What you get for your trouble is a download of the podcast show, at 384 kbps, as a 44.1kHz mp2 file (instead of as 64 kbps 44.1kHz mp3).

Technical Note

On the 'Listen Again' service, FFMPEG fetches whichever audio stream you specify.

If the command line specifies .mp2 the program will fetch the .mp2 stream (which, on BBC iPlayer, is a 384 kbps stream); or if the command line specifies .m4a the program will fetch the .m4a stream (which, on BBC iPlayer, is a 128 kbps stream).

There are lots of different file types (e.g. .mp3, .mp2, .m4a, .mp4, .mpeg, .ts, .flac, .wav). FFmpeg will fetch a different stream (i.e. a different bitrate and/or sample rate) for each of the different file types.

The highest bitrate is for uncompressed .wav (approx 1,500 kbps). The highest bitrate I've yet come across for a compressed format is 384 kbps for the .mp2 file type.

Geek Speak / Re: Screenscraping - A technique to find the vpid
« on: July 09, 2017, 11:56:20 PM »
I'm running Firefox 39 as my browser on one computer, and Internet Explorer 8 on a laptop. Both computers are Windows 7 64-bit.

When I open an iplayer 'Listen Again' page, and try to play the radio show, if I'm using Firefox I'm blocked by the paywall. But if I'm using IE8, I simply don't see any paywall.

So I think that everyone will have a different experience, depending on which browser - perhaps even which version of that browser - they are using. And it seems to be the older browsers which fare best, probably because the paywall uses a modern, new type of javascript which some older browsers can't recognise.

As I say, I'm using Windows 7. It will be interesting to hear from people who are on Windows 8 or Windows 10, as to whether that makes any difference.

I know this is a very old thread, but in view of the fact that in all the intervening time the BBC have been unable to get any replacement for AudioGo off the ground, perhaps we should wonder whether that may be significant. By which, of course, I mean significant for us.

It was not bad management which sank AudioGo.

That was a partnership between BBC and a private company, with all of BBC's resources behind it. Yet it failed to make a profit. Even though it had the entire BBC archive to draw on, and the very deep pockets of the Corporation.

The problem it couldn't crack is that the internet provides unlimited free access to the type of material AudioGo was selling on CD (and, to a degree, as downloads). This very website, Beebotron, is dedicated to a BBC station which provides free access to a large chunk of the archive material AudioGo was selling.

And out in the wild wild west of the www, there are inumerable websites offering free OTR, including BBC shows; plus innumerable Torrents offering file sharing of that material; plus inumerable pirate sites selling (far cheaper than AudioGo were) the same material - albeit not in as good quality, but much cheaper.

The BBC seem to have concluded from AudioGo's bankruptcy that the type of commercial operation AudioGo were involved in isn't viable.

But what are BBC doing about this problem?

All of a sudden, BBC iPlayer is vanishing behind a paywall. As yet - and I emphasise the word yet - we are not being asked for any money to access it. But that is the logical next step.

In 1971 the radio licence was abolished; and, ever since, BBC radio has been funded from the TV licence fee.  But the BBC now seem to be gearing up to seek new sources of revenue. Hiding the online access to their entire tv and radio output is a logical first step in moving to a new business model, in which online access is only available by paying a subscription - on top of the Licence Fee.

Their most recent step was to extend the law, so that watching BBC tv live on line now requires a TV Licence. Now they put up a paywall. Next, they encrypt.

It's a logical progression, triggered off by the failure of their other commercial ventures, as a means of making money out of us.

Having now had a couple of days to review all the download solutions, in my opinion the simplest is the following.

STEP 1: Get the vpid (an 8-digit text string)

  1. Open the iPlayer page for the radio show, in Firefox.
  2. Without playing that show, right-click on that page, and select 'View Page Source'.
  3. Search (on the toolbar: Edit > Find) the resulting text for the phrase: "vpid"

  NB: You might use Internet Explorer instead. Some versions ( e.g. Internet Explorer 8 )
        allow you to view a page's source (on the toolbar: View > Source).

STEP 2: Modify the following url (substitute the 8-digit vpid for the 8 zero's) -

The media player Media Player Classic - Home Cinema (a.k.a "MPC-HC") can play this url, if the vpid is substituted for the 8 zero's.

  Get MPC-HC here:  OR

  On Windows 7 64-bit I recommend this version:  MPC-HC.1.7.10.x64.exe

STEP 3: To download the radio show, create the following .bat file -

  a. Create a plain text file, and name it:  download.bat

  b. Open that file using NOTEPAD.EXE (or any simple text editor),
      then copy-and-paste the following 2 lines into it -

Code: [Select]
SET url=
ffmpeg  -v 16  -stats  -i %url%  "output.mp2"

  c. After url=, paste the MODIFIED url from STEP 2,
      containing the actual 8-digit vpid (in place of the 8 zero's)

  d. Save the file. Make certain you save it with the extension .bat
      (NOT .txt)

  e. Put ffmpeg.exe in the same folder as the .bat file

        Get it here:

  f. Double-click the .bat file to run it

When you have copied the url address into the .bat file, in step 3c, that file should look like this example -

Code: [Select]
SET url=
ffmpeg  -v 16  -stats  -i %url%  "output.mp2"

Note that a HLS stream is an mpeg stream, therefore can ONLY be used to download a stream in the .mp3 or .mp2 or .mpeg or .ts format (i.e. the output file should be named output.mp3 or output.mp2 or output.mpeg or output.ts). Obviously, call it what you like; but (to avoid problems) it must have the .mp3 or .mp2 or .mpeg or .ts extension.

Here are some recent examples of the ffmpeg command line which downloads the audio stream (in these examples, downloading an .mp2 file from a HLS stream).

These are just examples of the correct syntax to use.

Obviously, none of these examples will actually download anything now, as the https url is only valid for a couple of hours, and all of these have expired. To use these examples again (within the 30 days that a show is available on the iplayer site), that url must be replaced with a current one.

Code: [Select]

ffmpeg -v 16 -stats -i "" -ss 0.7 -aframes 148900 Episode_1_The_Lost_Stories_Point_of_Entry_Doctor_Who_BBC_Radio_4_Extra[148900].mp2

ffmpeg -v 16 -stats -i "" -ss 0.6 -aframes 71954 From_11_02_1954_Educating_Archie_BBC_Radio_4_Extra[71954].mp2

ffmpeg -v 16 -stats -i "" -ss 0.5 -aframes 67499 From_11_07_1961_Whack_O_BBC_Radio_4_Extra[67499].mp2

ffmpeg -v 16 -stats -i "" -ss 0.015 -aframes 74903 The_Finger_of_Suspicion_John_Creasey_The_Toff_and_the_Runaway_Bride_BBC_Radio_4_Extra[74903].mp2

ffmpeg -v 16 -stats -i "" -ss 0.015 -aframes 69232 War_Dance_Series_2_Dad_s_Army_BBC_Radio_4_Extra[69232].mp2

ffmpeg -v 16 -stats -i "" -ss 0.015 -aframes 74075 No_Sleep_for_the_Wicked_John_Creasey_The_Toff_and_the_Runaway_Bride_BBC_Radio_4_Extra[74075].mp2

ffmpeg -v 16 -stats -i "" -ss 0.315 -aframes 68738 Live_Now_Paye_Later_Series_6_Steptoe_and_Son_BBC_Radio_4_Extra[68738].mp2

ffmpeg -v 16 -stats -i "" -ss 0.015 -aframes 72570 Bare_Necessities_The_Men_From_the_Ministry_BBC_Radio_4_Extra[72570].mp2

ffmpeg -v 16 -stats -i "" -ss 0.1 -aframes 70073 Still_in_Trying_Times_Series_2_Revolting_People_BBC_Radio_4_Extra[70073].mp2

ffmpeg -v 16 -stats -i "" -ss 0.015 -aframes 73283 Death_Is_No_Alibi_John_Creasey_The_Toff_and_the_Runaway_Bride_BBC_Radio_4_Extra[73283].mp2

ffmpeg -v 16 -stats -i "" -ss 1 -aframes 77168 The_Missing_Jeep_Series_1_The_Navy_Lark_BBC_Radio_4_Extra[77168].mp2

ffmpeg -v 16 -stats -i "" -ss 0.8 -aframes 66304 The_Foreign_Legion_Series_5_Hancock_s_Half_Hour_BBC_Radio_4_Extra[66304].mp2

ffmpeg -v 16 -stats -i "" -ss 0 -aframes 74260 Motive_for_Murder_John_Creasey_The_Toff_and_the_Runaway_Bride_BBC_Radio_4_Extra[74260].mp2

ffmpeg -v 16 -stats -i "" -ss 0 -aframes 74890 The_Illness_Series_1_Marriage_Lines_BBC_Radio_4_Extra[74890].mp2

ffmpeg -v 16 -stats -i "" -ss 0.015 -aframes 72783 Episode_5_Play_It_Cool_BBC_Radio_4_Extra[72783].mp2

::  Dr Who: The timeless appeal of the Time Lord’s theme tune  []
ffmpeg -v 16 -stats -i "*2c97c59342137ec301425c3f95292c4c--audio--SHORT-MARK-AYERS-BOUNCE_flv_aac_med.mp4*~hmac=dcfb9fddce761bbb16a182d649e7e71be3e85d3395a403131b19f51d8619e7ef" Dr_Who_The_timeless_appeal_of_the_Time_Lord_s_theme_tune_Doctor_Who_BBC_Radio_4_Extra.mp2

ffmpeg -v 16 -stats -i "" -ss 0 -aframes 73191 Confrontation_in_Paris_John_Creasey_The_Toff_and_the_Runaway_Bride_BBC_Radio_4_Extra[73191].mp2

ffmpeg -v 16 -stats -i "" -ss 0.615 -aframes 74024 Episode_9_Series_3_I_m_Sorry_I_ll_Read_That_Again_BBC_Radio_4_Extra[74024].mp2

ffmpeg -v 16 -stats -i "" -ss 0.015 -aframes 73924 In_General_Practice_Doctor_at_Large_BBC_Radio_4_Extra[73924].mp2

ffmpeg -v 16 -stats -i "" RL_Stevenson_Treasure_Island_BBC_Radio_4_Extra.mp2

ffmpeg -v 16 -stats -i "" -ss 1.115 -aframes 149045 Episode_2_The_Lost_Stories_Point_of_Entry_Doctor_Who_BBC_Radio_4_Extra[149045].mp2

ffmpeg -v 16 -stats -i "" -ss 1.315 -aframes 72347 From_30_01_1957_Educating_Archie_BBC_Radio_4_Extra[72347].mp2

ffmpeg -v 16 -stats -i "" -ss 0.515 -aframes 68141 From_18_07_1961_Whack_O_BBC_Radio_4_Extra[68141].mp2

ffmpeg -v 16 -stats -i "" -ss 1.015 -aframes 68821 Mum_s_Army_Series_2_Dad_s_Army_BBC_Radio_4_Extra[68821].mp2

ffmpeg -v 16 -stats -i "" -ss 1.015 -aframes 71458 Episode_1_North_East_of_Eden_BBC_Radio_4_Extra[71458].mp2

ffmpeg -v 16 -stats -i "" -ss 0 -aframes 69073 Upstairs_Downstairs_Upstairs_Downstairs_Series_6_Steptoe_and_Son_BBC_Radio_4_Extra[69073].mp2

ffmpeg -v 16 -stats -i "" -ss 0.2 -aframes 67524 Storm_in_a_Tea_Urn_The_Men_From_the_Ministry_BBC_Radio_4_Extra[67524].mp2

ffmpeg -v 16 -stats -i "" -ss 0.015 -aframes 74451 Operation_Fag_End_Series_1_The_Navy_Lark_BBC_Radio_4_Extra[74451].mp2

ffmpeg -v 16 -stats -i "" -ss 1.615 -aframes 74333 Sunday_Afternoon_at_Home_Series_5_Hancock_s_Half_Hour_BBC_Radio_4_Extra[74333].mp2

The easiest source of a replacement url for these is probably -

Looking at the first part of one of these example urls - ...

the section highlighted in red is the vpid which the page requires.

For instance, this form of url (from which they call the Playlist URL) works fine as a substitute for the original https url shown in my above examples -

Code: [Select]

You can in fact simply take this url and put the substitute vpid in yourself (i.e. replacing b08w933f), and that url is then useable, without bothering to go to the site.

One thing you need to know, though. This is a "HLS MP3 (UK only)" url, so it will probably only work if the download is using the mp3 format (i.e. the filename has either the .mp3 or .mp2 or .mpeg or .ts extension). And if you are in the UK (i.e. are accessing iplayer from an ip address physically in - or registered in - the UK, or access it from an anonymous ip address).

For non-UK listeners, try the Firefox add-on anonymoX (compatible with Firefox 39). I can't test it, because I'm in the UK.

Slightly off-topic, for listeners outside the UK here (briefly) is a comparison of a UK stream with a non-UK stream, showing the differences between them. The differences which I think are significant I've highlighted in blue.

    Example of Akamai HLS url (UK stream) (a UK Stream for mobile phones) -

    http ://

    Example of Akamai DASH url (a non-UK stream) (designated a ww stream: worldwide) -

    http ://

Geek Speak / Screenscraping - A technique to find the vpid
« on: July 03, 2017, 09:29:06 PM »
When I am completely stuck, I use the following website to look up url's for the 'Listen Again' programmes on the radio iPlayer:

I can use ffmpeg.exe to download high quality streams from these url's (higher bitrates than I typically get from using programs such as get_iplayer, e.g. 320 kbps and 384 kbps streams).

It used to be trivial to use because all it needed was the 8-digit PID (Programme ID) included in the Listen Again page's url.

But recently changed over to using the vpid instead of the pid. I thought it was still trivial to get the vpid because, when you play the 'Listen Again' radio show, you can right-click on the playing window in the browser, and a pop-up window opens and displays both the PID and the VPID.

Now, however, the iPlayer has disappeared behind a pay-wall, and you can't play the show, so can't right-click on the playing window. (Yes, I know no money changes hands, but the technology being deployed against us is nonetheless what's known in the trade as a 'paywall'.)

Yes, it is still trivial to get the vpid. You can still play the show in older browsers: if you play it in Internet Explorer 8, the newer javascript on the iplayer website is ignored by the browser, which only understands older forms of javascript. So the show plays, and the player window appears, and can be right-clicked.

And in any browser, you can view the page source and do a 'find' search for "vpid" to find it.

I thought it would be better to write a short batch file routine to extract the 8-digit vpid from the page automatically, using just the ordinary PID. So here it is. The only contribution made by the user is to insert the PID (replacing the example PID shown as a row of 8 zero's).

This is a demo script, really, because it can readily be adapted to extract any desired information from a .html web page (that is, an ordinary webpage, one which does not use xml). The javascript runs in Internet Explorer, and downloads the target webpage specified, as a text string, which it then searches: using a javascript technique called Regular Expressions to specify the text to be extracted. It then displays any matching text found.

Click 'Select' to highlight the code, then copy-and-paste it into a plain text file with the file extension .bat instead of .txt (e.g. vpid.bat). Then open the .bat file (using, say, Notepad.exe), and replace the 8 zero's with the actual 8-digit PID of the target iplayer page. Then double click the .bat file to run it.

Code: [Select]
@echo off

::  *** Get the VPID : BBC Radio on-demand ***

::  ** Programme ID **
SET PID=00000000

::  -------------------------------------------------------------------------------------------------------------------------------------------  ::

::  *** User Variables ***
    SET temp_dir=C:\\Users\\dg\\AppData\\Local\\Temp

::  -------------------------------------------------------------------------------------------------------------------------------------------  ::

ECHO ^<html^>                                                                                                                    > %temp%\temp.htm
ECHO ^<head^>                                                                                                                   >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO ^<title^>Download BBC iPlayer HTML page and extract Text^</title^>                                                         >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO ^<SCRIPT language="javascript" type="text/javascript"^>                                                                    >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO // Target HTML file's URL address                                                                                          >> %temp%\temp.htm
ECHO    var url = "" ;                                                                     >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO'','_self'); // This prevents the browser window prompting before closing                                      >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO var http_request = false;                                                                                                  >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO function makeRequest(url) {  // URL = iPlayer page                                                                         >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO   http_request = false;                                                                                                    >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO   try {                                                                                                                    >> %temp%\temp.htm
ECHO     http_request = new ActiveXObject("Msxml2.XMLHTTP");                                                                    >> %temp%\temp.htm
ECHO   } catch (e) {                                                                                                            >> %temp%\temp.htm
ECHO     try {                                                                                                                  >> %temp%\temp.htm
ECHO       http_request = new ActiveXObject("Microsoft.XMLHTTP");                                                               >> %temp%\temp.htm
ECHO     } catch (e) {}                                                                                                         >> %temp%\temp.htm
ECHO   }                                                                                                                        >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO   if (!http_request) {                                                                                                     >> %temp%\temp.htm
ECHO     alert ('Giving up - Cannot create an XMLHTTP instance');                                                               >> %temp%\temp.htm
ECHO     return false;                                                                                                          >> %temp%\temp.htm
ECHO   }                                                                                                                        >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO   http_request.onreadystatechange = alertContents;                                                                         >> %temp%\temp.htm
ECHO'GET', url, true);                                                                                     >> %temp%\temp.htm
ECHO   http_request.send(null);                                                                                                 >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO }  // Close FUNCTION                                                                                                       >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO function alertContents() {                                                                                                 >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO   if ( http_request.readyState == 4 ) {                                                                                    >> %temp%\temp.htm
ECHO     if ( http_request.status == 200 ) {                                                                                    >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO        var fso  = new ActiveXObject("Scripting.FileSystemObject");                                                         >> %temp%\temp.htm
ECHO        var fh  = fso.CreateTextFile("%temp_dir%\\%PID%.html",true);         // Create Text File                            >> %temp%\temp.htm
ECHO        var fh1 = fso.CreateTextFile("%temp_dir%\\%PID%_vpid.txt",true);     // Create Text File                            >> %temp%\temp.htm
ECHO        var fh2 = fso.CreateTextFile("%temp_dir%\\%PID%_vpid_2.txt",true);   // Create Text File                            >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO        // Save contents of HTML page to text file as a String                                                   // line 50 >> %temp%\temp.htm
ECHO           fh.WriteLine( "<base href=''>" );             // Add BBC domain's href address               >> %temp%\temp.htm
ECHO           fh.WriteLine( http_request.responseText );                        // Add HTML contents of target webpage         >> %temp%\temp.htm
ECHO           // alert ( http_request.responseText );                                                                          >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO        // Use RegEx [Regular Expression] to find data in responseText (HTML)                                               >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO           // Input String (HTML from target URL)                                                                           >> %temp%\temp.htm
ECHO              var input = http_request.responseText;                          // Input                                      >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO           // Define the Pattern                                              // Pattern                                    >> %temp%\temp.htm
ECHO           // 8 literals + 8 chrs (mixed letters and digits) + 1 literal      // Example: "vpid":"b006bm2h"                 >> %temp%\temp.htm
ECHO              var pattern = /"vpid":"[A-Z0-9]{8}"/gi;                                                                       >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO           // Create OUTPUT string holding ALL matches                                                                      >> %temp%\temp.htm
ECHO              var str1 = input.match(pattern);                                // Match String with Pattern                  >> %temp%\temp.htm
ECHO              // alert ( str1 );                                                                                            >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO           // Save the data to a text file -                                                                                >> %temp%\temp.htm
ECHO              fh1.WriteLine( str1 );                                          // %PID%_vpid.txt                  // line 70 >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO           // Adjust the data -                                                                                             >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO              // Replace some text                                                                                          >> %temp%\temp.htm
ECHO                 var str2 = fso.OpenTextFile("%temp_dir%\\%PID%_vpid.txt");   // Open a text file                           >> %temp%\temp.htm
ECHO                 var str3 = str2.ReadAll();                                   // Read file's contents into a variable       >> %temp%\temp.htm
ECHO                 var str4 = str3.replace(/^"/g, "").replace(/^:/g, ": ");     // Replace all quotes and semicolons          >> %temp%\temp.htm
ECHO              // var str4 = str3.replace(/^"/g, "").replace(/^,/g, "\n");     // Replace all quotes and all commas          >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO              // Split the data into sections seperated by the specified symbol                                             >> %temp%\temp.htm
ECHO                 var str5 = str4.split(",");                                                                                >> %temp%\temp.htm
ECHO                 // alert ( str5[0] ) ;                                                                                     >> %temp%\temp.htm
ECHO                 // alert ( str5[1] ) ;                                                                                     >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO              // Save the adjusted data to a text file -                      // Save to %PID%_vpid_2.txt                   >> %temp%\temp.htm
ECHO                 fh2.WriteLine( "pid:  %PID%" );                                                                            >> %temp%\temp.htm
ECHO                 fh2.WriteLine( str5[0] );                                    // Save only the FIRST (discard str5[1])      >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO     } else { alert ('There was a problem with the request') };                                                             >> %temp%\temp.htm
ECHO   }                                                                                                                        >> %temp%\temp.htm
ECHO }     // Close FUNCTION                                                                                                    >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO ^</SCRIPT^>                                                                                                                >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO ^</head^>                                                                                                                  >> %temp%\temp.htm
ECHO.                                                                                                                           >> %temp%\temp.htm
ECHO ^<body onload="makeRequest(url);setTimeout('window.close()',4000)"^> ^</body^>                                             >> %temp%\temp.htm
ECHO ^</html^>                                                                                                                  >> %temp%\temp.htm

::  The function setTimeout gives TEMP.HTM enough time to access the Internet
::  before the scripts in it run (which need the data drawn from the Internet)

::  -------------------------------------------------------------------------------------------------------------------------------------------  ::

::  *** Run temp.htm ***
"C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE" %temp%\temp.htm

::  *** Open file : VPID ***
START ""  "C:\Windows\SYSTEM32\Notepad.exe" "%temp_dir%\\%PID%_vpid_2.txt"

Help / Re: get_iPlayer trouble....
« on: July 03, 2017, 03:25:31 PM »
I have started a new thread in the main forum, which might assist you -

I can't specifically address the point about get_iplayer, but there have been some big changes on the BBC website in the last week, which the get_iplayer developers will not yet have had enough time to solve.

Geek Speak / How to listen to iPlayer without signing-in
« on: July 01, 2017, 02:17:12 PM »
As I thought this topic would potentially have quite wide interest, I've started it in the main forum at -

As of July 1st, any attempt to listen to the BBC Radio iPlayer is met with a refusal, unless you are signed-in to a BBC account.

To listen without signing in, there are various options.

If you are running any version of the Windows operating system, edit the HOSTS file.

Add the following line (blocks the script which forces you to sign-in):

  Note: How to edit a HOSTS file - Edit HOSTS file

Listen to the live stream, using Winamp (or any media player of your choice), with one of these URLs -

Listen to the live stream, using VLC Media Player, with one of these URLs -

128 kbps stream:

320 kbps stream:

VLC media player is here:

Download one of the live streams, using the program FFMPEG.EXE, with one of these commands (at a command prompt, or in a batch file) -

Code: [Select]
  ffmpeg -v 16 -stats -i "" Out.mp2
Code: [Select]
  ffmpeg -v 16 -stats -i "" Out.mp2

Listen to an on-demand Listen Again programme (but not the live stream), using Internet Explorer 8.

Because IE8 uses an old version of javascript, it does not recognise the newer forms of javascript used in iPlayer. It in effect ignores them, and so the audio stream plays normally.

Just turning off javascript won't work. The iPlayer refuses to stream any audio if the browser has no javascript support at all.

To listen in this way in Internet Explorer, you must use a url in this format:

(because the trick won't work if you use a url in the older format:

Here's how to download an on-demand programme from the Listen Again service, to listen to it off-line -

FFMPEG command line from Greasemonkey script

These instructions are for use in Windows XP / Vista / 7 / 8 / 10. There are links below to obtain the software mentioned.

A.  To obtain the command line -

1. Open the Firefox browser (must have the Greasemonkey extension installed, and the iPlayer greasemonkey script installed).

2. Open the iPlayer page which plays the radio show, using Firefox. After a few moments, an FFMPEG command line will be displayed immediately below the area where the radio show plays.

B.  To run the command line -

3. Create a batch file (a plain-text file with the extension .bat or .cmd).
4. FFMPEG.exe must be copied into the same directory/folder as the batch file.
5. Copy-and-paste the command line into the batch file.
6. Modify the file extension specified on the command line: change it from .mp3 to whatever you want (see below).
7. Run the batch file.

Software required -

FFMPEG.exe (Static build recommended)

Firefox 39

Greasemonkey extension for Firefox 39

Greasemonkey script 'BBC iPlayer video download', for Firefox 39

Addendum :  You might need to replace the .js file installed by the current version of the installer with an older version of that file (version 3.6.3) to get the script to work in Windows. Here's a link to v3.6.3:

BBC iPlayer video download v 3.6.3 -

In Windows 7, the .js file is in this folder -

Notes -

The above procedure can download a file in various formats, including (for radio): .mp3, .mp2, .m4a, .ts

For instance, .MP2 files have a 384 kbps stream, of better audio quality than the MP3 stream.

  •    M4A   : Variable KBPS rate, up to 200 kbps; 48 kHz; Stereo; MPEG-4 AAC LC
  •    MP3   : Fixed  128 kbps rate; 48 kHz; Stereo; MPEG-1 layer 3
  •    MP2   : Fixed  384 kbps rate; 48 kHz; Stereo; MPEG-1 layer 2
  •    TS     : Fixed  384 kbps rate; 48 kHz; Stereo; 16 bit per sample
  •    WAV  : Fixed 1536 kbps rate; 48 kHz; Stereo; Signed 16 bit PCM

  •    M4A is downloaded if the command line specifies an output file with the extension .M4A
  •    MP3 is downloaded if the command line specifies an output file with the extension .MP3
  •    MP2 is downloaded if the command line specifies an output file with the extension .MP2
  •    TS is downloaded if the command line specifies an output file with the extension .TS
  •    FLAC is downloaded if the command line specifies an output file with the extension .FLAC
  •    WAV is downloaded if the command line specifies an output file with the extension .WAV

By default, the Greasemonkey script adds .mp3 to the command line; but you can replace that with any of the above alternatives (or some other). I recommend replacing it with .mp2 because of the superior bitrate.

I developed this solution on my laptop, which happens to be running the Firefox 39 browser. The solution will probably work in other versions of Firefox; but if it doesn't (some add-ons only work on particular Firefox versions), be aware that you can always force it to work - by installing Firefox version 39.

If you are running Internet Explorer, don't uninstall IE. On Windows 7, there are no problems arising if you also install Firefox. The most that might happen is all urls start opening in Firefox (which is easy to fix): both browsers co-exist happily on my laptop, and have done for years.

Read this article (by Andrea Lazzarotto) for further information -

I only understand Windows! But Andrea develops this software in the Linux operating system. So Andrea's webpage has information for anyone wishing to download from iPlayer using a computer running on Linux.

Andrea's solution is the easiest way to get the necessary url. But if it doesn't work for you (even when you replace the latest version with version 3.6.3), you can get the necessary url from the following site:

To get the vpid which that site needs (an 8-digit text string):

  1. Open the iPlayer page for the radio show, in Firefox.
  2. Without playing that show, right-click on that page, and select 'View Page Source'.
  3. Search (on the toolbar: Edit > Find) the resulting text for the phrase: "vpid"

The vpid is also available, but only for the most recent broadcasts, from the station's xml page (where it is described as the "version_pid") -

Alternatively, once you have the vpid you could simply modify the following url (a HLS stream) (by substituting the 8-digit vpid for the 8 zero's), without needing to use the site -

That url, once it includes the 8-digit vpid, will work successfully as the url to use with ffmpeg.

Alternatively, you can get a working url from the following Beebotron page (a HLS stream):

  Warning -  The Beebotron DASH links do not work with this method
                  (FFMPEG can't download the audio stream from a DASH url in this format).

Note that a HLS stream is an mpeg stream. The .bat file should only be used to download a stream in the .mp3 or .mp2 or .mpeg or .ts format. It might throw a wobbly if you use it to download in .mp4 or .m4a or .aac format.

Here is a 2-line batch file (name it, say, download.bat) which can be used with ffmpeg to download from iPlayer, using the url obtained by any of the above methods (put ffmpeg.exe in the same folder as the .bat file) -

  SET url=

  ffmpeg  -v 16  -stats  -i  %url%  output.mp2

Copy-and-paste the url address into the batch file, so that the SET command looks like this example -

SET url=

This .bat file should cope with any stream which is a HLS stream (but won't work with any type of DASH stream). HLS streams often have the term 'hls' included somewhere in the url (but not always).

Note that a HLS stream is an mpeg stream. This .bat file should only be used to download a stream in the .mp3 or .mp2 or .mpeg or .ts format. It might throw a wobbly if you use it to download in .mp4 or .m4a or .aac format.

This is the URL address of the xml page for a radio programme available on the 'Listen Again' service (replace the 8 zero's with the 8-digit vpid):

The xml page displays 6 links (all .m3u8 playlist links) (and all of them HLS links), ALL six of which will download the target "Listen Again" radio show (using ffmpeg.exe and the file download.bat, above).

Note: In each url, replace all occurances of the character & with ^& to make the url work in a .bat file.

ALL six give a 384 kbps stream when an .mp2 stream is requested, even though the page says they are only 128 kbps or 320 kbps links. ALL give an .mp2 stream when that stream is requested, even though the page says they are only mp4/aac links. Presumably both effects are a consequence of these being *playlist* links (i.e. behind the scenes - hidden from us - they give branching access to a wide range of differing streams, branches which ffmpeg can follow without additional input from you!).

(That level of sophistication is something you only get with ffmpeg.exe - a well established leader in its field, with ten years plus of substantial development effort behind it. Don't expect to duplicate these results with any other program.)

The six links differ only in that 4 of them give a faultless download, while 2 show errors (and of those 2, each throws different errors) -

  Faultless:  (http)    akamai_hls_open
                 (https)   akamai_hls_open_https
                 (https)   af_akamai_uk_hls_https
                 (https)   af_limelight_uk_hls_https
  Errors:    (http)     af_akamai_uk_hls
                (http)     af_limelight_uk_hls

So the secure connections (_https), and the open connections (_open), fare best. The faults occur on UK connections (_uk) that are NOT secure (don't use https, i.e. no _https), which is perhaps a consequence/indication of heavier traffic on those links.

Easily the worst performance is Limelight's UK connection over http (af_limelight_uk_hls) - which lost so much data, on some occasions, that the radio show was actually incomplete.

In my tests, the very best performance (perfect download) was given ONLY by the two _open links:  akamai_hls_open and akamai_hls_open_https.

I expect the two _open links to work internationally, i.e. for listeners outside the UK. (All six links work for listeners within the UK, or who connect to iPlayer through a proxy node that's within the UK.)

This is the URL address of an alternative xml page (replace the 8 zero's with the 8-digit vpid):

This xml page displays 3 links (all .m3u8 playlist links) (and all of them HLS links), ALL three of which will download the target "Listen Again" radio show (using ffmpeg.exe and the file download.bat, above).

Note: In each url, replace all occurances of the character & with ^& to make the url work in a .bat file.

Geek Speak / Download 384 kbps LIVE stream
« on: June 30, 2017, 03:41:58 PM »
It is trivial to download the LIVE stream for Radio 4 Extra, because the url never changes (and the Beeb make no attempt to obfuscate that url).

To download the 384 kbps live stream, run a .bat file (a plain text file with the extension .bat instead of .txt) containing these two lines -

Code: [Select]
  set ffmpeg=C:\Program Files\FFMPEG\ffmpeg.exe

  "%ffmpeg%" -v 16 -stats -i "" R4Extra.mp2

To get the ffmpeg.exe program, see this link:

The program does not need installing. Just put the .exe file in the directory you specified in the .bat file.

If you prefer a lower bitrate, a 128 kbps stream is available instead: in the .bat file change .mp2 to .m4a so that ffmpeg gets the m4a stream instead (it's actually a variable bitrate, centered on 135 kbps).

If you prefer the mp3 stream, change .mp2 to .mp3 so that ffmpeg gets the mp3 stream instead (which is a fixed bitrate of 128 kbps).

These are the two live stream urls for Radio 4 Extra (either of which can be used in the .bat file):

The ultimate guide to Callan is at

According to my spies at The Callan File, it was in 2012 that Radio 4Extra originally transmitted their adaptation of the first Callan novel, A Magnum for Schneider (retitled Red File for Callan) (Monday 17th September 2012).

An audiobook, not a dramatisation, it is actually Mitchell's 1969 novelisation of his own screenplay for the Callan pilot, which had aired on ABC's Armchair Theatre in 1967.

I have become increasingly annoyed by the number of times this month I've opened a listen-again page on BBC iPlayer, only to find that the programme has either its start or end missing.

As you know, programmes are added by an automatic system, based on the scheduled broadcast time. If the broadcast actually starts early on Radio 4 Extra, the start will be missing on iplayer; or if it ends late, the end will be missing on iplayer.

I'd like to urge everyone to complain whenever this happens. Only complaints will get this problem remedied.

I'd suggest you base any complaint on a request for a return to the former system, of putting up on iPlayer a 36 minute extract - including the end of the previous show, and the start of the next. Under that arrangement, the iplayer NEVER used to miss off part of the show.

I recently found a new BBC page for reporting technical errors with iplayer -

Pages: 1 [2] 3 4 ... 9