The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for StreamFinder

1.00    Date/time
        First version, released on an unsuspecting world.
1.01    2018/08/10
        - Fixed issue with some Facebook videos on Youtube.
        - Removed Tunein as a valid site (can no longer extract streams).
1.02    2019/01/31
        - Make StreamFinder::Youtube the default and handle pretty much 
        anything youtube-dl handles, ie. brighteon, vimeo, etc.
1.03    2019/08/15
        - Fix StreamFinder::Reciva now failing to connect to server 
        (added wget as fallthrough as LWP::UserAgent and curl fail with 
        unsupported SSL protocol errors).
        - Fix StreamFinder.IHeartRadio now failing to grab images / icons.
        - Strip off "?autoplay=true" from StreamFinder::Youtube urls.
        - Minor doc fixes.
1.04    NOT RELEASED
        - Make debug option work for all stream types, and allow specifying 
        as either "debug", "-debug", "debug => 1", or "-debug => 1" in 
        parameter list for new()
        (ie. my $station = new StreamFinder($url, -debug => 1);
        - Better handle ".m3u8" streams returned by brighteon.com (Youtube).
1.05    2019/09/03
        - Add StreamFinder::BannedVideo (https://banned.video/) to handle 
        their video streams (which youtube-dl doesn't currently handle).
1.10    2019/09/07
        - Add user-configuration files (~/.config/StreamFinder/config, 
        ~/.config/StreamFinder/<submodule>/config (see docs).
        User can now specify / override most LWP::UserAgent options, ie. 
        "agent", "timeout", etc. in the new configuration files.
        User must create these files, if needed with a text editor.
        - Greatly reduce falling back to wget by adding default user-agent 
        and checking for wget availability.  Specify an "agent" => "your agent" 
        line in the user-configuration file to change.
        - Add "-random" and "-noplaylists" options to $station->getURL() 
        (see docs)
        - StreamFinder::BannedVideo:  Add "-keep" option to better control 
        type and order of streams returned (see docs).
        - StreamFinder::Facebook: Depreciated ~/.config/.fbdata for new 
        user-configuration files.
        - StreamFinder::IHeartRadio: Add podcast-playing capability.
        - StreamFinder::IHeartRadio: Depreciated old stream order options, 
        replacing them with new -keep and -skip arguments and configuration 
        file entries.
        - StreamFinder::RadioNet: (https://www.radion.net/) ADDED
        - StreamFinder::Tunein: RESTORED (now uses StreamFinder::Youtube for 
        stream fetching), but adds metadata loading (which youtube-dl does 
        not currently fetch for these streams.
        - StreamFinder::Youtube: Better handle "chunky" brighteon.com 
        .m3u8 video streams.  Also add "-notitle" option, streamlining 
        use by StreamFinder::Tunein (see docs).
1.11    2019/09/07
        - StreamFinder::Youtube: bugfix for brighteon.com m3u8 video URLs.
        - Docs: fix a cpl. typos, actually include the updated README file.
1.12    2019/09/10
        - StreamFinder::Tunein: Add podcast-playing capability.  
        (Will look for "playUrl" before falling back to youtube-dl for stream).
        - StreamFinder::Reciva: Fix to make LWP::Useragent fetch reciva URLs 
        using the ANCIENT TLSv1 to allow to work without falling back to wget.
        See the StreamFinder::Reciva docs for creating a one-line custom 
        config file to do this - I didn't make it the default since they could 
        FIX this at ANY time, which would break things!
        - Add URI::Escape and HTML::Entities as DEPENDENCIES - in order to 
        ensure that the returned stream titles are un-escaped.
        - Fix $station->getID('fcc') to work properly (return the station's 
        FCC call-letters for sights and stations that support it.
        - Set $station->{artist} and $station->{year} where applicable.
        - Minor doc updates.
        - Fix some sight-specific submodules to properly accept just a station 
        / video ID rather than a full URL (see docs).
        - Add "desc" option go getTitle() to fetch station's (long) description 
        (for sites that provide that field), otherwise, the title is returned.
1.13    2019/09/11
        - Fix missing (recently-added) file (RadioNet.pm) in MANIFEST file.
        - More doc. fixes, mostly to the individual submodules.
1.20    2019/09/16
        - Removed usage and all references to WWW::Youtube::Download - 
        This module no longer fetches the "author" (Youtube user) nor does 
        anything else we can't more easily do manually.
        - StreamFinder::Apple: (podcasts.apple.com) ADDED!
        - StreamFinder::Brighteon: (brighteon.com) ADDED (split off from 
        StreamFinder::Youtube).
        - StreamFinder::Vimeo: (vimeo.com) ADDED (split off from 
        StreamFinder::Youtube.
        We separated these for better support - ie. ability to get the "author" 
        fields and access some additional streams.  We also can often avoid 
        having to call youtube-dl.
        - StreamFinder::Youtube: Removed "notitle" option, added "fast" option, 
        and add "description" field fetch to youtube-dl.  Fixed url-fetching 
        order to call youtube-dl FIRST to prevent infinite stall if called 
        with an already-valid stream-url (Fauxdacious mediaplayer).
        StreamFinder::IHeartRadio - Fix sometimes-corrupted ID field.
        StreamFinder::Reciva - Fix failure to always capture ID field if 
        given wrongly-formatted full url.
        - Add $station->{'genre'} field to IHeartRadio, RadioNet, Reciva, and 
        Tunein (the sites that support it).
        - Various small code and doc. tweaks / cleanups.
        - DEBUG was accidently left set to ON, now turned OFF by default!
1.21    2019/09/18
        - Significant documentation improvements & polishing.
        - StreamFinder::BannedVideo: Fix incorrect IDs returned.
        - StreamFinder::Tunein: (new()) - Fix mishandled URL if only 
        station-ID specified (non-full URL).
        - StreamFinder::Apple: (new()) - Handle if only podcast-ID specified.