-----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;
totem-plugin-arte_3.1.2-1+deb7u1.diff.sig
Description: PGP signature