]> code.delx.au - webdl/blobdiff - brightcove.py
Switch to streamlink
[webdl] / brightcove.py
index b34234a997bfbff5c5f2f20846de3966f2a11489..efb961b0022f12391cf1968bbbe38eeffd866e1c 100644 (file)
@@ -2,10 +2,10 @@ import logging
 import re
 import sys
 
-from common import grab_json, download_hls, download_http, Node, append_to_qs
+from common import grab_json, download_hls, download_hds, Node, append_to_qs
 
 CH9_TOKEN = "ogxhPgSphIVa2hhxbi9oqtYwtg032io4B4-ImwddYliFWHqS0UfMEw.."
-CH10_TOKEN = "lWCaZyhokufjqe7H4TLpXwHSTnNXtqHxyMvoNOsmYA_GRaZ4zcwysw.."
+CH10_TOKEN = "90QPG7lQuLJAc4s82qA-T_UoDhz_VBFK6SGstWDB0jZH8eu1SZQDFA.."
 
 BRIGHTCOVE_API = "http://api.brightcove.com/services/library?"
 
@@ -19,13 +19,13 @@ class BrightcoveVideoNode(Node):
 
     def download(self):
         f = None
-        try_streams = [self.try_widevine, self.try_hls]
+        try_streams = [self.try_hds, self.try_hls]
 
         while f is None and try_streams:
             f = try_streams.pop()()
 
         if f is None:
-            logging.error("No HLS or Widevine stream available for: %s", self.title)
+            logging.error("No HLS or HDS stream available for: %s", self.title)
             return False
 
         return f()
@@ -38,33 +38,29 @@ class BrightcoveVideoNode(Node):
             "video_id": self.video_id,
         })
 
-        doc = grab_json(desc_url, 3600)
-        video_url = doc["HLSURL"]
+        doc = grab_json(desc_url)
+        video_url = doc and doc["HLSURL"]
         if not video_url:
             return
 
         filename = self.title + ".ts"
         return lambda: download_hls(filename, video_url)
 
-    def try_widevine(self):
+    def try_hds(self):
         desc_url = append_to_qs(BRIGHTCOVE_API, {
             "token": self.token,
             "command": "find_video_by_id",
-            "video_fields": "WVMRenditions",
+            "video_fields": "hdsManifestUrl",
             "video_id": self.video_id,
         })
 
-        doc = grab_json(desc_url, 3600)
-
-        renditions = doc["WVMRenditions"]
-        if not renditions:
+        doc = grab_json(desc_url)
+        video_url = doc and doc["hdsManifestUrl"]
+        if not video_url:
             return
 
-        best_rendition = sorted(renditions, key=lambda r: r["frameHeight"])[-1]
-        video_url = best_rendition["url"]
-        filename = self.title + ".ts"
-
-        return lambda: download_http(filename, video_url)
+        filename = self.title + ".flv"
+        return lambda: download_hds(filename, video_url)
 
 
 class BrightcoveRootNode(Node):
@@ -88,7 +84,7 @@ class BrightcoveRootNode(Node):
             url = self.get_all_videos_url(page_number)
             page_number += 1
 
-            page = grab_json(url, 3600)
+            page = grab_json(url)
             items = page["items"]
             if len(items) == 0:
                 break
@@ -178,6 +174,6 @@ class Ch10RootNode(BrightcoveRootNode):
 
 
 def fill_nodes(root_node):
-    Ch9RootNode(root_node)
+    # Ch9RootNode(root_node) -- Need a new API token
     Ch10RootNode(root_node)