-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

A year later, the package is still broken in Stable.

Here is, yet again, a new debdiff.
Compared to the previous one, I edited a regex in order to be
compatible with a change that recently happened on the Arte Website.


Can someone finally upload this?

Thanks.
Nicolas
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBAgAGBQJUNt63AAoJEF5mTbNeG1+eBLwQAImsNXN3WJgsYaydEPyyICew
GZS/2juauQ2P+aWQiWlyShTN8Qhn6EiD3mN0/K9k8x69ao+0O004m8lEhTGXrs2u
4L3VKRu3kzjtZ39Ign0oU19SkC4xB8JSMX55LBxyyzDoADSt3kgkYFoRbAa+h6v2
6/pLEXVZuTVELOLlYgx0K0O5L3DzgWw5mo5QpZNtPRDf59XSq1k6c92EObadNFMZ
ua8NidLdDLfNzA73UH7Rzc/oG+6eeUA3mz4mt5EVqlEZPFhHijpm4HZX4vTx3fgG
cI8AdtRy5GSXcwj0YSF4zJF2fYjIkT7tuKQdphKFYB7FDPZlGTfyc7p8wI90CwdW
9pRoUlDQxTSOoBa2u9CsRi4Sb3qkDXp1i9b3nhKJ7qc38nkhh7Z7HjcryidvjF5v
hko3GecxuhalhMKqtsMiuL+kpGqCDRPs8aaxCwfhS0v5SRrnXw7MJE+X63RN266K
sHMzNRNXO3ufyHbB8cwa6WXISVXujvbz+3QRwy+5GWl6CnMJWCdUy20MVawC8FMk
9WRv6+6hQEdQK/fsCvuOOf5FHF/1BWf8Y4dr0irnCqOayPBGvJFj93LZzMMUexoj
FSazFfwre5KHKdWAr2eT0daAmYzfPpaJzHvg+WP+S7syFP7YPx8+/BvmEpwupn51
ZVbvZDdsGKhKJ7mmgsJy
=oQ6g
-----END PGP SIGNATURE-----
diff -Nru totem-plugin-arte-3.1.2/debian/changelog totem-plugin-arte-3.1.2/debian/changelog
--- totem-plugin-arte-3.1.2/debian/changelog	2012-09-15 14:15:20.000000000 +0200
+++ totem-plugin-arte-3.1.2/debian/changelog	2014-10-09 16:22:42.000000000 +0200
@@ -1,3 +1,10 @@
+totem-plugin-arte (3.1.2-1+deb7u1) stable; urgency=low
+
+  * Update the video URL extractor
+  * Add a JSON parsing method and update the XML parser links
+
+ -- Nicolas Delvaux <cont...@nicolas-delvaux.org>  Tue, 09 Oct 2014 14:22:42 +0000
+
 totem-plugin-arte (3.1.2-1) unstable; urgency=medium
 
   * New upstream bug-fix only release
diff -Nru totem-plugin-arte-3.1.2/debian/control totem-plugin-arte-3.1.2/debian/control
--- totem-plugin-arte-3.1.2/debian/control	2012-05-06 13:41:04.000000000 +0200
+++ totem-plugin-arte-3.1.2/debian/control	2014-10-09 16:22:42.000000000 +0200
@@ -8,6 +8,7 @@
                libgtk-3-dev,
                libsoup2.4-dev,
                libpeas-dev (>= 1.2.0),
+               libjson-glib-dev,
                gettext
 Standards-Version: 3.9.3
 Homepage: http://gitorious.org/totem-plugin-arte
diff -Nru totem-plugin-arte-3.1.2/debian/patches/parsers_update.patch totem-plugin-arte-3.1.2/debian/patches/parsers_update.patch
--- totem-plugin-arte-3.1.2/debian/patches/parsers_update.patch	1970-01-01 01:00:00.000000000 +0100
+++ totem-plugin-arte-3.1.2/debian/patches/parsers_update.patch	2014-10-09 17:51:34.000000000 +0200
@@ -0,0 +1,207 @@
+Description: Add a JSON parsing method and update the XML parser links
+ This change is backported from the 3.2.1 upstream version.
+ This patch will hopefully harden the plugin against more Arte website updates.
+Author: Nicolas Delvaux <cont...@nicolas-delvaux.org>
+
+---
+
+Origin: vendor
+Forwarded: not-needed
+Last-Update: 2013-12-19
+
+Index: totem-plugin-arte-3.1.2/arteparser.vala
+===================================================================
+--- totem-plugin-arte-3.1.2.orig/arteparser.vala	2014-10-09 17:51:13.806886723 +0200
++++ totem-plugin-arte-3.1.2/arteparser.vala	2014-10-09 17:51:13.802886723 +0200
+@@ -28,6 +28,7 @@
+ 
+ using GLib;
+ using Soup;
++using Json;
+ 
+ public abstract class ArteParser : GLib.Object
+ {
+@@ -55,7 +56,7 @@
+         return has_data;
+     }
+ 
+-    public unowned GLib.SList<Video> parse (Language lang) throws MarkupError, IOError
++    public virtual unowned GLib.SList<Video> parse (Language lang) throws MarkupError, IOError
+     {
+         videos = new GLib.SList<Video> ();
+ 
+@@ -105,36 +106,127 @@
+     }
+ }
+ 
++public class ArteJSONParser : ArteParser
++{
++    private string json_url_fr = "http://www.arte.tv/guide/fr/plus7.json";;
++    private string json_url_de = "http://www.arte.tv/guide/de/plus7.json";;
++
++    public ArteJSONParser ()
++    {
++        reset ();
++    }
++
++    public override void reset ()
++    {
++        has_data = true;
++    }
++
++    public override uint get_error_threshold ()
++    {
++        return 1; // no errors are tolerated
++    }
++
++    public override unowned GLib.SList<Video> parse (Language lang) throws MarkupError, IOError
++    {
++        videos = new GLib.SList<Video> ();
++
++        Soup.Message msg;
++        if (lang == Language.GERMAN) {
++            msg = new Soup.Message ("GET", json_url_de);
++        } else {
++            msg = new Soup.Message ("GET", json_url_fr);
++        }
++
++        Soup.SessionAsync session = create_session ();
++
++        session.send_message (msg);
++
++        if (msg.status_code != Soup.KnownStatusCode.OK) {
++            throw new IOError.HOST_NOT_FOUND ("videos.arte.tv could not be accessed.");
++        }
++
++        var parser = new Json.Parser ();
++
++        try {
++            parser.load_from_data ((string) msg.response_body.flatten ().data, -1);
++        } catch (GLib.Error e) {
++            throw new GLib.MarkupError.PARSE ("Json parsing failed: '%s'", e.message);
++        }
++
++        var root_object = parser.get_root ().get_object ();
++        var video_array = root_object.get_array_member ("videos");
++
++        foreach (var video in video_array.get_elements ()) {
++            var v = video.get_object ();
++            var current_video = new Video();
++
++            current_video.title = v.get_string_member ("title");
++            current_video.page_url = "http://www.arte.tv"; + v.get_string_member ("url");
++            current_video.image_url = v.get_string_member ("image_url");
++            current_video.desc = v.get_string_member ("desc");
++            // TODO current_video.publication_date
++
++            string end_time_str = v.get_string_member ("video_rights_until");
++
++            try {
++                var regex = new Regex ("([0-9]+)[:h]([0-9]+)");
++                MatchInfo match;
++                regex.match(end_time_str, 0, out match);
++                string hours_str = match.fetch(1);
++                string minutes_str = match.fetch(2);
++                int hours = int.parse(hours_str);
++                int minutes = int.parse(minutes_str);
++
++                current_video.offline_date = GLib.TimeVal ();
++                current_video.offline_date.get_current_time ();
++                current_video.offline_date.tv_sec += ((hours * 60 * 60 + minutes * 60));
++            } catch (GLib.RegexError e) {
++                 GLib.warning ("Offline date parsing failed.");
++            }
++
++            videos.append (current_video);
++        }
++
++        has_data = false;
++
++        return videos;
++    }
++}
++
+ public class ArteRSSParser : ArteParser
+ {
+     private Video current_video = null;
+     private string current_data = null;
+     /* official RSS feeds by topic, contains duplicats, no image urls and offline dates */
+     private const string[] feeds_fr = {
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/actualites/index--3188636,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/documentaire/index--3188646,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/decouverte/index--3188644,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/europe/index--3188648,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/geopolitique_histoire/index--3188654,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/societe/index--3188652,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/junior/index--3188656,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/cinema_fiction/index--3188642,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/arts_cultures_spectacles/index--3188640,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/culture_pop_alternative/index--3188638,view,rss.xml";,
+-        "http://videos.arte.tv/fr/do_delegate/videos/toutes_les_videos/environnement_science/index--3188650,view,rss.xml";
++        "http://videos.arte.tv/fr/do_delegate/videos/index-3188626,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/arts_cultures_spectacles/index-3188640,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/culture_pop_alternative/index-3188638,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/documentaire/index-3188646,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/europe/index-3188648,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/junior/index-3188656,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/index--3188626,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/actualites/index-3188636,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/cinema_fiction/index-3188642,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/decouverte/index-3188644,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/environnement_science/index-3188650,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/geopolitique_histoire/index-3188654,view,rss.xml";,
++        "http://videos.arte.tv/fr/do_delegate/videos/chaines/societe/index-3188652,view,rss.xml";
+     };
+     private const string[] feeds_de = {
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/aktuelles/index--3188636,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/dokus/index--3188646,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/entdeckung/index--3188644,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/europa/index--3188648,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/geopolitik_geschichte/index--3188654,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/gesellschaft/index--3188652,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/junior/index--3188656,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/kino_serien/index--3188642,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/kunst_kultur/index--3188640,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/popkultur_musik/index--3188638,view,rss.xml";,
+-        "http://videos.arte.tv/de/do_delegate/videos/alle_videos/umwelt_wissenschaft/index--3188650,view,rss.xml";
++        "http://videos.arte.tv/de/do_delegate/videos/index-3188626,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/aktuelles/index-3188636,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/entdeckung/index-3188644,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/geopolitik_geschichte/index-3188654,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/junior/index-3188656,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/kunst_kultur/index-3188640,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/umwelt_wissenschaft/index-3188650,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/index--3188626,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/dokus/index-3188646,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/europe/index-3188648,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/gesellschaft/index-3188652,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/kino_serien/index-3188642,view,rss.xml";,
++        "http://videos.arte.tv/de/do_delegate/videos/themen/popkultur_musik/index-3188638,view,rss.xml";
+     };
+     private const uint feed_count = 11;
+     private uint feed_idx = 0;
+Index: totem-plugin-arte-3.1.2/arteplus7.vala
+===================================================================
+--- totem-plugin-arte-3.1.2.orig/arteplus7.vala	2014-10-09 17:51:13.806886723 +0200
++++ totem-plugin-arte-3.1.2/arteplus7.vala	2014-10-09 17:51:26.234886531 +0200
+@@ -98,7 +98,7 @@
+     private Totem.Object t;
+     private Gtk.Entry search_entry; /* search field with buttons inside */
+     private VideoListView tree_view; /* list of movie thumbnails */
+-    private ArteParser parsers[2]; /* array of parsers */
++    private ArteParser parsers[3]; /* array of parsers */
+     private GLib.Settings settings;
+     private GLib.Settings proxy_settings;
+     private Cache cache; /* image thumbnail cache */
+@@ -153,8 +153,9 @@
+         t = object as Totem.Object;
+         cache = new Cache (Environment.get_user_cache_dir ()
+              + CACHE_PATH_SUFFIX);
+-        parsers[0] = new ArteXMLParser ();
+-        parsers[1] = new ArteRSSParser ();
++        parsers[0] = new ArteJSONParser ();
++        parsers[1] = new ArteXMLParser ();
++        parsers[2] = new ArteRSSParser ();
+         tree_view = new VideoListView (cache);
+ 
+         tree_view.video_selected.connect (callback_video_selected);
diff -Nru totem-plugin-arte-3.1.2/debian/patches/series totem-plugin-arte-3.1.2/debian/patches/series
--- totem-plugin-arte-3.1.2/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ totem-plugin-arte-3.1.2/debian/patches/series	2014-10-09 16:22:42.000000000 +0200
@@ -0,0 +1,2 @@
+video_url_extractor.patch
+parsers_update.patch
diff -Nru totem-plugin-arte-3.1.2/debian/patches/video_url_extractor.patch totem-plugin-arte-3.1.2/debian/patches/video_url_extractor.patch
--- totem-plugin-arte-3.1.2/debian/patches/video_url_extractor.patch	1970-01-01 01:00:00.000000000 +0100
+++ totem-plugin-arte-3.1.2/debian/patches/video_url_extractor.patch	2014-10-09 16:22:42.000000000 +0200
@@ -0,0 +1,177 @@
+Description: Update the video URL extractor
+ This change is backported from the 3.2.1 upstream version.
+ This patch restore video playback which was broken since the Arte website
+ update in September 2013.
+Author: Nicolas Delvaux <cont...@nicolas-delvaux.org>
+
+---
+Origin: vendor
+Forwarded: not-needed
+Last-Update: 2013-12-19
+
+--- totem-plugin-arte-3.1.2.orig/Makefile
++++ totem-plugin-arte-3.1.2/Makefile
+@@ -3,7 +3,7 @@ VERSION=3.1.2
+ NAME=totem-plugin-arte
+ PACKAGE=$(NAME)-$(VERSION)
+ VALAC=valac
+-VALA_DEPS=--pkg Totem-1.0 --pkg PeasGtk-1.0 --pkg libsoup-2.4 --pkg gtk+-3.0 --pkg gio-2.0
++VALA_DEPS=--pkg Totem-1.0 --pkg PeasGtk-1.0 --pkg libsoup-2.4 --pkg gtk+-3.0 --pkg gio-2.0 --pkg json-glib-1.0
+ CC_ARGS=-X -fPIC -X -shared --Xcc="-D GETTEXT_PACKAGE=\"totem-arte\""
+ VALA_ARGS=-D DEBUG_MESSAGES $(CC_ARGS) -g
+ VALA_SOURCE=\
+--- totem-plugin-arte-3.1.2.orig/url-extractor.vala
++++ totem-plugin-arte-3.1.2/url-extractor.vala
+@@ -28,6 +28,7 @@
+ 
+ using GLib;
+ using Soup;
++using Json;
+ 
+ public errordomain ExtractionError
+ {
+@@ -82,88 +83,74 @@ public class RTMPStreamUrlExtractor : In
+     public string get_url (VideoQuality q, Language lang, string page_url)
+             throws ExtractionError
+     {
+-        string regexp, url;
++        string regexp;
+         debug ("Initial Page URL:\t\t'%s'", page_url);
+ 
+-        /* Setup the language string */
+-        string lang_str = "fr";
+-        if (lang == Language.GERMAN)
+-            lang_str = "de";
+-
+-        /* Setup quality string */
+-        string quali_str = "hd";
+-        if (q == VideoQuality.MEDIUM)
+-            quali_str = "sd";
+-
+-        /* Get the Arte Flash player URI */
+-        // Example:
+-        // var url_player = "http://videos.arte.tv/blob/web/i18n/view/player_9-3188338-data-4807088.swf";;
+-        regexp = "var url_player = \"(http://.*.swf)\";";
+-        var flash_player_uri = extract_string_from_page (page_url, regexp);
+-        debug ("Extract Flash player URI:\t'%s'", flash_player_uri);
+-        if (flash_player_uri == null)
++        /* JSON uri */
++        regexp = "arte_vp_url=['\"](https?://.*.json)['\"].*>";
++        var json_uri = extract_string_from_page (page_url, regexp);
++        debug ("Extract JSON URI:\t'%s'", json_uri);
++        if (json_uri == null)
+             throw new ExtractionError.EXTRACTION_FAILED ("Video URL Extraction Error");
+ 
+-        /* Get the Flash XML data */
+-        // Example:
+-        // vars_player.videorefFileUrl = "http://videos.arte.tv/de/do_delegate/videos/geheimnisvolle_pflanzen-3219416,view,asPlayerXml.xml";;
+-        regexp = "videorefFileUrl = \"(http://.*.xml)\";";
+-        url = extract_string_from_page (page_url, regexp);
+-        debug ("Extract Flash Videoref:\t'%s'", url);
+ 
+-        if (url == null)
+-            throw new ExtractionError.EXTRACTION_FAILED ("Video URL Extraction Error");
++        /* download and parse the main JSON file */
++        var message = new Soup.Message ("GET", json_uri);
++        this.session.send_message (message);
+ 
+-        /* Get the language specific flash XML data */
+-        // Example:
+-        // <video lang="de" ref="http://videos.arte.tv/de/do_delegate/videos/geheimnisvolle_pflanzen-3219418,view,asPlayerXml.xml"/>
+-        // <video lang="fr" ref="http://videos.arte.tv/fr/do_delegate/videos/secrets_de_plantes-3219420,view,asPlayerXml.xml"/>
+-        regexp = "video lang=\"" + lang_str + "\" ref=\"(http://.*.xml)\"";
+-        url = extract_string_from_page (url, regexp);
+-        debug ("Extract Flash Lang Videoref:\t'%s'", url);
++        string rtmp_uri = null;
+ 
+-        if (url == null)
+-            throw new ExtractionError.EXTRACTION_FAILED ("Video URL Extraction Error");
++        // TODO detect if a video is only availabe after 23:00
++
++        try {
++            var parser = new Json.Parser ();
++            parser.load_from_data ((string) message.response_body.flatten ().data, -1);
+ 
+-        /* Get the RTMP uri. */
+-        // Example:
+-        // <url quality="hd">rtmp://artestras.fcod.llnwd.net/a3903/o35/MP4:geo/videothek/EUR_DE_FR/arteprod/A7_SGT_ENC_08_037778-021-B_PG_HQ_FR?h=7258f52f54eb0d320f6650e647432f03</url>
+-        // <url quality="sd">rtmp://artestras.fcod.llnwd.net/a3903/o35/MP4:geo/videothek/EUR_DE_FR/arteprod/A7_SGT_ENC_06_037778-021-B_PG_MQ_FR?h=76c529bce0f034e74dc92a14549d6a4e</url>
+-        regexp = "quality=\"" + quali_str + "\">(rtmp://.*)</url>";
+-        var rtmp_uri = extract_string_from_page (url, regexp);
+-        debug ("Extract RTMP URI:\t\t'%s'", rtmp_uri);
+-
+-        /* sometimes only one quality level is available */
+-        if (rtmp_uri == null) {
+-            if (q == VideoQuality.HIGH) {
+-                q = VideoQuality.MEDIUM;
+-                quali_str = "sd";
+-                GLib.warning ("No high quality stream available. Fallback to medium quality.");
+-            } else if (q == VideoQuality.MEDIUM) {
+-                q = VideoQuality.HIGH;
+-                quali_str = "hd";
+-                GLib.warning ("No medium quality stream available. Fallback to high quality.");
++            var root_object = parser.get_root ().get_object ();
++            var player_object = root_object.get_object_member ("videoJsonPlayer");
++            var streams_object = player_object.get_object_member ("VSR");
++            Json.Object video_object;
++
++            switch (q) {
++                case VideoQuality.HIGH:
++                    video_object = streams_object.get_object_member ("RTMP_SQ_1");
++                    break;
++                default: // MEDIUM is the default
++                    video_object = streams_object.get_object_member ("RTMP_MQ_1"); // or "RTMP_EQ_1" ?
++                    break;
+             }
+-            regexp = "quality=\"" + quali_str + "\">(rtmp://.*)</url>";
+-            rtmp_uri = extract_string_from_page (url, regexp);
+-            debug ("Extract RTMP URI:\t\t'%s'", rtmp_uri);
+ 
+-            if (rtmp_uri == null)
+-                throw new ExtractionError.STREAM_NOT_READY ("This video is not available yet");
++            string streamer = video_object.get_string_member ("streamer");
++            string url = video_object.get_string_member ("url");
++            debug ("Streamer base:\t'%s'", streamer);
++            debug ("Streamer path:\t'%s'", url);
++
++            rtmp_uri = streamer + "mp4:" + url;
++
++        } catch (Error e) {
++            throw new ExtractionError.EXTRACTION_FAILED ("Video URL Extraction Error");
+         }
+ 
+-        /* detect videos with temporal restrictions */
+-        if (rtmp_uri.has_suffix ("/carton_23h_fr.mp4") || rtmp_uri.has_suffix ("/carton_23h_de.mp4"))
+-            throw new ExtractionError.ACCESS_RESTRICTED ("This video is not available currently");
+-
+-        /* Build the stream URI
+-         * To prevent regular disconnections (and so to keep the plugin usable),
+-         * we need to pass the Flash player uri to GStreamer.
+-         * We do that by appending it to the stream uri.
+-         * (see the librtmp manual for more information) */
+-        // Example:
+-        // rtmp://artestras.fcod.llnwd.net/a3903/o35/MP4:geo/videothek/EUR_DE_FR/arteprod/A7_SGT_ENC_08_042143-002-A_PG_HQ_FR?h=d7878fae5c9726844d22da78e05f764e swfVfy=1 swfUrl=http://videos.arte.tv/blob/web/i18n/view/player_9-3188338-data-4807088.swf
+-        string stream_uri = rtmp_uri + " swfVfy=1 swfUrl=" + flash_player_uri;
++
++        // Try to figure out the player URI
++        string player_uri;
++        try {
++            regexp = "content=\"(http.*.swf)\\?";
++            var embeded_uri = "http://player.arte.tv/v2/index.php?json_url="; + json_uri + "&config=arte_tvguide";
++            player_uri = extract_string_from_page (embeded_uri, regexp);
++            debug ("Extract player URI:\t'%s'", player_uri);
++            if (player_uri == null) {
++                throw new ExtractionError.EXTRACTION_FAILED ("Player URL Extraction Error");
++            }
++        } catch (Error e) {
++            // Do not abort and try to play the video with a known old player URI.
++            // The server does not seems to always check the player validity, so it may work anyway.
++            debug ("Failed to extract the flash player URI! Trying to fallback...");
++            player_uri = "http://www.arte.tv/playerv2/jwplayer5/mediaplayer.5.7.1894.swf";;
++        }
++
++
++        string stream_uri = rtmp_uri + " swfVfy=1 swfUrl=" + player_uri;
+         debug ("Build stream URI:\t\t'%s'", stream_uri);
+ 
+         return stream_uri;

Attachment: totem-plugin-arte_3.1.2-1+deb7u1.diff.sig
Description: PGP signature

Reply via email to