def METHOD_NAME(self):
    url_type, show_name, episode_name = self.match.groups()
    if url_type == "streams" and not show_name:
        url_type = "live-stream"
    elif not show_name:
        raise PluginError("Missing show_name for url_type: {0}".format(
            url_type,
        ))
    log.debug("URL type={0}".format(url_type))
    if url_type == "live-stream":
        video_id = self._get_stream_data(url_type)
    elif url_type == "streams":
        video_id = self._get_stream_data(show_name)
    elif url_type == "videos":
        if show_name is None or episode_name is None:
            raise PluginError(
                "Missing show_name or episode_name for url_type: {0}".format(
                    url_type,
                ),
            )
        video_id = self._get_video_data(episode_name)
    else:
        raise PluginError("Unrecognised url_type: {0}".format(url_type))
    if video_id is None:
        raise PluginError("Could not find video_id")
    log.debug("Video ID={0}".format(video_id))
    res = self.session.http.get(self.video_data_url.format(video_id))
    url_data = self.session.http.json(res, schema=self._api_schema)
    if "unprotected" in url_data:
        url = url_data["unprotected"]["url"]
    elif "bulkaes" in url_data:
        url_parsed = urlparse(url_data["bulkaes"]["url"])
        token = self._get_token(url_parsed.path)
        url = urlunparse((
            url_parsed.scheme,
            url_parsed.netloc,
            url_parsed.path,
            url_parsed.params,
            "{0}={1}".format("hdnts", token),
            url_parsed.fragment,
        ))
    else:
        raise PluginError("Could not find a usable URL in url_data")
    log.debug("URL={0}".format(url))
    return HLSStream.parse_variant_playlist(self.session, url)