def _get_rtmp_streams(self, swfurl): if not RTMPStream.is_usable(self.session): raise NoStreamsError(self.url) self.logger.debug("Fetching RTMP stream info") res = http.get(swfurl) swf = swfdecompress(res.content) match = re.search("customURL[^h]+(https://.*?)\\\\", swf) if not match: raise NoStreamsError(self.url) res = http.get(match.group(1)) rtmp, playpath = rtmpparse(res.text) params = { "rtmp": rtmp, "pageUrl": self.url, "playpath": playpath, "live": True } match = re.search("file[^h]+(https?://.*?.swf)", swf) if match: params["swfUrl"] = match.group(1) return RTMPStream(self.session, params)
def _create_rtmp_stream(self, video): name, stream_url = video params = { "rtmp": stream_url, "pageUrl": self.url, "swfVfy": self._get_swf_url(), } if stream_url.endswith(".mp4"): tcurl, playpath = rtmpparse(stream_url) params["rtmp"] = tcurl params["playpath"] = playpath else: params["live"] = True return name, RTMPStream(self.session, params)
def _get_rtmp_stream(self, swfurl): res = http.get(swfurl) swf = swfdecompress(res.content) match = _rtmp_re.search(swf) if not match: return res = http.get(match.group(1)) rtmp, playpath = rtmpparse(res.text) params = { "rtmp": rtmp, "pageUrl": self.url, "playpath": playpath, "swfUrl": swfurl, "live": True } return RTMPStream(self.session, params)
def _get_streams(self): match = _url_re.match(self.url) stream_id = match.group("stream_id") or self._find_stream_id() if not stream_id: return res = http.get(STREAM_API_URL.format(stream_id)) stream_info = http.json(res, schema=_stream_schema) streams = {} swf_url = None for name, stream_url in stream_info.items(): if stream_url.endswith(".m3u8"): try: streams.update( HLSStream.parse_variant_playlist(self.session, stream_url) ) except IOError as err: self.logger.error("Failed to fetch HLS streams: {0}", err) elif stream_url.endswith(".f4m"): try: streams.update( HDSStream.parse_manifest(self.session, stream_url) ) except IOError as err: self.logger.error("Failed to fetch HDS streams: {0}", err) elif stream_url.startswith("rtmp://"): swf_url = swf_url or self._get_swf_url() params = { "rtmp": stream_url, "pageUrl": self.url, "swfVfy": swf_url, } if stream_url.endswith(".mp4"): tcurl, playpath = rtmpparse(stream_url) params["rtmp"] = tcurl params["playpath"] = playpath else: params["live"] = True streams[name] = RTMPStream(self.session, params) return streams
def _get_streams(self): match = re.match(URL_REGEX, self.url) if not match: return stream_id = match.group("stream_id") res = http.get(STREAM_API.format(stream_id)) json = http.json(res) stream_info = verifyjson(json, "streams") streams = {} swf_url = None for name, stream_url in stream_info.items(): stream_url = str(stream_url) if stream_url.endswith(".m3u8"): try: hls_streams = HLSStream.parse_variant_playlist(self.session, stream_url) streams.update(hls_streams) except IOError as err: self.logger.error("Failed to fetch HLS streams: {0}", err) elif stream_url.startswith("rtmp://"): swf_url = swf_url or self._get_swf_url() params = { "rtmp": stream_url, "pageUrl": self.url, "swfVfy": swf_url, } if stream_url.endswith(".mp4"): tcurl, playpath = rtmpparse(stream_url) params["rtmp"] = tcurl params["playpath"] = playpath else: params["live"] = True streams[name] = RTMPStream(self.session, params) return streams