Download music from CBC.ca via the Brightcove player

September 15th, 2014 Leave a comment Go to comments

This is our procedure for downloading music in MP3 format from CBC's Brightcove player.

To download the file and convert it to an MP3, we used ffmpeg.  Download and install it if you don't already have it.

The following directions are based on the technique from René van Oosten.


In Google Chrome browse to: chrome://plugins/ and disable Flash.
Open an Incognito window by pressing CTRL+SHIFT+N
Press CTRL+SHIFT+I to open Developer Tools.
Click the cogwheel icon at the bottom right.  Navigate to Overrides and change the User Agent to iPad – iOS 5.
Navigate to the website which contains the content you wish to download.
Return to Developer Tools and navigate to the Network tab.
Reload the page.
Pause the video, if it plays.
At the bottom of the Developer Tools window, click on the circle with a line through it to clear the list.
Play the video.
Look in the Type column for "application/vnd.apple.mpegurl".  Right-click this, and choose "Copy link address".

Open a Command Prompt window and navigate to the folder in which ffmpeg is installed.  Run the following command:
ffmpeg -i "PASTE THE LINK ADDRESS HERE"

The results will look something like this:
N:\Music>ffmpeg -i "http://c.brightcove.com/services/mobile/streaming/index/master.m3u8?videoId=0000000000000&pubId=0000000000&playerId=0000000000000&lineupId=0000000000000&affiliateId="
ffmpeg version N-61663-g19139d8 Copyright (c) 2000-2014 the FFmpeg developers
  built on Mar 20 2014 22:06:17 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 67.100 / 52. 67.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 34.101 / 55. 34.101
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, hls,applehttp, from 'http://c.brightcove.com/services/mobile/streaming/index/master.m3u8?videoId=0000000000000&pubId=0000000000&playerId=0000000000000&lineupId=0000000000000&affiliateId=':
  Duration: 00:04:08.00, start: 0.000000, bitrate: 0 kb/s
  Program 0
    Metadata:
      variant_bitrate : 446000
    Stream #0:0: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p, 396x224, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc
    Metadata:
      variant_bitrate : 446000
    Stream #0:1: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 96 kb/s
    Metadata:
      variant_bitrate : 446000
  Program 1
    Metadata:
      variant_bitrate : 1928000
    Stream #0:2: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p, 960x540, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc
    Metadata:
      variant_bitrate : 1928000
    Stream #0:3: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      variant_bitrate : 1928000
At least one output file must be specified
Let's inspect the results.  There are two programs, each with two streams.  The first stream is for video and the second is for audio.  Program 1 has an audio stream with a bitrate of 128 kb/s.  Since this stream is better quality, we will use it.  Note that in this case the audio stream of Program 1 is number 0:3.  Run the following command:
ffmpeg -i "PASTE THE LINK ADDRESS HERE" -map 0:3 output_file_name.mp3

If there is only one program, you may omit the -map 0:3 parameter if you wish.  Omitting this causes ffmpeg to use the first program.

If all goes well, ffmpeg will download the file and convert it to MP3.  If you like batch files, here's one:
@SET /p first=< BrightCove.txt
\music\ffmpeg -i "%first%"
@ECHO.
@ECHO Enter the ffmpeg map parameter in the following format: -map 0:3
@SET /p m=
 
SET c=0
setlocal ENABLEDELAYEDEXPANSION
FOR /F "tokens=*" %%T IN (BrightCove.txt) DO (
 SET /a c=c+1
 CLS
 @ECHO Track !c!
 \music\ffmpeg -i "%%T" %m% !c!.mp3
 )
 
CLS
@ECHO All done.
@ECHO.
@PAUSE

 
  1. eMPee584
    April 14th, 2015 at 12:33 | #1

    There's another method, no transcoding with ffmpeg, only sheer HTTP GET : )
    http://kscherer.github.io/linux/2012/04/20/download-unofficial-cbc-podcast/

    All the trickery to hide precious content from the searching mind, it is s0o shameful.
     

If you would like a reply to your comment, you must leave your email address! We receive dozens of questions every month from people who don't leave us with any way to contact them, so we have no choice but to ignore the question. We try to reply to as many questions as we can, if we know the email address of the person who asked the question. Thanks in advance for writing in :)

Allowed HTML: <b>, <i>, <em>, <strong>. All other < and > will be replaced with &lt; and &gt;.