Exemple #1
0
    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
Exemple #2
0
 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
Exemple #4
0
 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__()
     )
Exemple #5
0
    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)}
Exemple #6
0
    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()
Exemple #7
0
    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)
Exemple #8
0
    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']})