I came across a Flash video that I was not able to save with any Video Downloader app, including the ones that actually sniff traffic on your network adapter, such as Replay Media Catcher and many others.
Turns out that this particular page was using the new Adobe HTTP Dynamic Streaming (HDS) technology. With HDS, the original MP4 or FLV file is split up into many F4F segments, which are then served to the media player on the page one after the other, so there is no single video file to download like with most other video streaming technologies.
You can easily check if HDS is being used by using Firefox to watch the video.
- Clear Firefox cache (Tools -> Options -> Network, Clear Cached Web Content, Clear User Data)
- Load the page with the video
- Open a new tab and browse to about:cache?storage=disk
- Search for a bunch of files that have the word ‘Frag’ in them. They’ll look something like this:
http://ams-vp11.9c9media.com/hds-vod/ae/2015-01-29/3FA6DB15557BA5F0/CTVNews-546418-29-WPG-WEBPARKOUR08-SOT-Adaptive_08.mp4Seg1-Frag39 http://ams-vp11.9c9media.com/hds-vod/ae/2015-01-29/3FA6DB15557BA5F0/CTVNews-546418-29-WPG-WEBPARKOUR08-SOT-Adaptive_08.mp4Seg1-Frag38 http://ams-vp11.9c9media.com/hds-vod/ae/2015-01-29/3FA6DB15557BA5F0/CTVNews-546418-29-WPG-WEBPARKOUR08-SOT-Adaptive_08.mp4Seg1-Frag37 http://ams-vp11.9c9media.com/hds-vod/ae/2015-01-29/3FA6DB15557BA5F0/CTVNews-546418-29-WPG-WEBPARKOUR08-SOT-Adaptive_08.mp4Seg1-Frag36
These are all the F4F fragments of the video. You could download them all and combine them together, but that’s not the best way to do this.
There is a script called AdobeHDS.php
This manifest file is easy to obtain, b/c it is delivered via a plain GET request that is issued before the video starts playing. To find the URL:
- Open Firefox Console (Ctrl+Shift+K) or Tools -> Web Developer -> Web Console
- Make sure that “Net” filter is selected
- Clear the Console
- Open the video page and let the video load
- In the Filter text box type “f4m” and you should now see a few F4M requests. You want the first one, which will probably be called “manifest.f4m“. Mine looked like this:
Now just run the script with the manifest URL and you should get the re-combined flv file:
$ php AdobeHDS.php --delete --manifest "http://capi.9c9media.com/destinations/ctvnews_web/platforms/desktop/contents/540901/contentpackages/546418/stacks/1130329/manifest.f4m" KSV Adobe HDS Downloader Processing manifest info.... Quality Selection: Available: 2048 1856 1536 1280 896 640 480 299 Selected : 2048 Fragments Total: 55, First: 1, Start: 1, Parallel: 8 Downloading 55/55 fragments Found 55 fragments Finished
You should now have an FLV file waiting for you in the script directory.
For Mac Users
Posting some info from a comment by Eric L. Pheterson below:
To add a few more baby steps (for Mac users) :
- When you view the AdobeHDS.php file at Sourceforge, copy/paste it into a file, and name it AdobeHDS.php
- PHP should be installed alreadyon your mac
- A dependency of AdobeHDS is not installed, so in Terminal run :
brew install homebrew/php/php55-mcrypt
- After installing mcrypt, you must open a new terminal window or tab to use it
- If you don’t have brew installed, in Terminal run :
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
- After installing brew, run
- This Firefox extension will perfectly present you with the php command you need : https://addons.mozilla.org/en-US/firefox/addon/hds-link-detector/