def _get_streams(self): if "empty" in self.url: return if "UnsortableStreamNames" in self.url: def gen(): for i in range(3): yield "vod", HTTPStream(self.session, "http://test.se/stream") return gen() if "NoStreamsError" in self.url: raise NoStreamsError(self.url) streams = {} streams["test"] = TestStream(self.session) streams["rtmp"] = RTMPStream(self.session, dict(rtmp="rtmp://test.se")) streams["hls"] = HLSStream(self.session, "http://test.se/playlist.m3u8") streams["http"] = HTTPStream(self.session, "http://test.se/stream") streams["240p"] = HTTPStream(self.session, "http://test.se/stream") streams["360p"] = HTTPStream(self.session, "http://test.se/stream") streams["1080p"] = HTTPStream(self.session, "http://test.se/stream") streams["350k"] = HTTPStream(self.session, "http://test.se/stream") streams["800k"] = HTTPStream(self.session, "http://test.se/stream") streams["1500k"] = HTTPStream(self.session, "http://test.se/stream") streams["3000k"] = HTTPStream(self.session, "http://test.se/stream") streams["480p"] = [HTTPStream(self.session, "http://test.se/stream"), RTMPStream(self.session, dict(rtmp="rtmp://test.se"))] return streams
def test_rtmp_stream(self): stream = RTMPStream(self.session, {"rtmp": "rtmp://test.se/app/play_path", "swfVfy": "http://test.se/player.swf", "swfhash": "test", "swfsize": 123456, "playPath": "play_path"}) expected = "rtmp://test.se/app/play_path playPath=play_path swfUrl=http://test.se/player.swf swfVfy=1" self.assertEqual(expected, stream_to_url(stream)) self.assertEqual(expected, stream.to_url())
def test_rtmp_stream(session): stream = RTMPStream( session, { "rtmp": "rtmp://test.se/app/play_path", "swfVfy": "http://test.se/player.swf", "swfhash": "test", "swfsize": 123456, "playPath": "play_path" }) expected = "rtmp://test.se/app/play_path playPath=play_path swfUrl=http://test.se/player.swf swfVfy=1" assert stream.to_url() == expected
def test_rtmp_stream(self): stream = RTMPStream(self.session, {"rtmp": "rtmp://test.se/app/play_path", "swfVfy": "http://test.se/player.swf", "swfhash": "test", "swfsize": 123456, "playPath": "play_path"}) self.assertEqual( {"type": "rtmp", "args": [], "params": {"rtmp": "rtmp://test.se/app/play_path", "swfVfy": "http://test.se/player.swf", "swfhash": "test", "swfsize": 123456, "playPath": "play_path"}}, stream.__json__() )
def _get_streams(self): data = self.match.groupdict() params = parse_params(data.get("params")) params["rtmp"] = data.get("url") for boolkey in ("live", "realtime", "quiet", "verbose", "debug"): if boolkey in params: params[boolkey] = bool(params[boolkey]) log.debug("params={0}".format(params)) return {"live": RTMPStream(self.session, params)}
def _get_streams(self): channel = self.match.group("channel") self.session.http.headers.update({ 'User-Agent': useragents.CHROME, 'Referer': self.url }) data = '{"liveStreamID":"%s"}' % (channel) try: res = self.session.http.post(self.API_URL.format(channel), data=data) res_json = self.session.http.json(res, schema=self._api_schema) log.trace("{0!r}".format(res_json)) http_url = res_json[0]["url"] except Exception as e: log.info("Stream currently unavailable.") log.debug(str(e)) return https_url = http_url.replace("http:", "https:") yield "live", HTTPStream(self.session, https_url) if 'pull-rtmp' in http_url: rtmp_url = http_url.replace("http:", "rtmp:").replace(".flv", "") stream = RTMPStream(self.session, { "rtmp": rtmp_url, "live": True, "pageUrl": self.url, }) yield "live", stream if 'wansu-' in http_url: hls_url = http_url.replace(".flv", "/playlist.m3u8") else: hls_url = http_url.replace("live-hdl", "live-hls").replace(".flv", ".m3u8") s = HLSStream.parse_variant_playlist(self.session, hls_url) if not s: yield "live", HLSStream(self.session, hls_url) else: if len(s) == 1: for _n, _s in s.items(): yield "live", _s else: yield from s.items()
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_streams(self): self.session.http.headers.update({'Referer': self.url}) try: data = self.session.http.get(self.url, schema=self._data_schema) except PluginError: log.error('unable to validate _data_schema for {0}'.format( self.url)) return metadata = data.get('metadata') metadata_url = data.get('metadataUrl') if metadata_url and not metadata: metadata = self.session.http.post(metadata_url, schema=self._metadata_schema) if metadata: log.trace('{0!r}'.format(metadata)) for hls_url in [ metadata.get('hlsManifestUrl'), metadata.get('hlsMasterPlaylistUrl') ]: if hls_url is not None: yield from HLSStream.parse_variant_playlist( self.session, hls_url).items() if metadata.get('videos'): for http_stream in metadata['videos']: http_name = http_stream['name'] http_url = http_stream['url'] try: http_name = '{0}p'.format( self.QUALITY_WEIGHTS[http_name]) except KeyError: pass yield http_name, HTTPStream(self.session, http_url) if metadata.get('rtmpUrl'): yield 'live', RTMPStream(self.session, params={'rtmp': metadata['rtmpUrl']})