private void decryptRelinker( final String relinker_url, String title, String extension, final FilePackage fp, final String description) throws Exception { String dllink = relinker_url; if (extension != null && extension.equalsIgnoreCase("wmv")) { /* E.g. http://www.tg1.rai.it/dl/tg1/2010/rubriche/ContentItem-9b79c397-b248-4c03-a297-68b4b666e0a5.html */ logger.info("Download http .wmv video"); } else { final String cont = jd.plugins.hoster.RaiTv.getContFromRelinkerUrl(relinker_url); if (cont == null) { throw new DecrypterException(DecrypterException.PLUGIN_DEFECT); } /* Drop previous Headers & Cookies */ this.br = jd.plugins.hoster.RaiTv.prepVideoBrowser(new Browser()); jd.plugins.hoster.RaiTv.accessCont(this.br, cont); if (this.br.containsHTML("video_no_available\\.mp4")) { /* Offline/Geo-Blocked */ /* XML response with e.g. this (and some more): <url>http://download.rai.it/video_no_available.mp4</url> */ final DownloadLink offline = this.createOfflinelink(relinker_url); if (title == null) { title = cont; } offline.setName("GEOBLOCKED_" + title); this.decryptedLinks.add(offline); return; } dllink = jd.plugins.hoster.RaiTv.getDllink(this.br); if (dllink == null) { throw new DecrypterException(DecrypterException.PLUGIN_DEFECT); } if (extension == null && dllink.contains(".mp4")) { extension = "mp4"; } else if (extension == null && dllink.contains(".wmv")) { extension = "wmv"; } else if (extension == null) { /* Final fallback */ extension = "mp4"; } if (!jd.plugins.hoster.RaiTv.dllinkIsDownloadable(dllink)) { logger.info("Unsupported streaming protocol"); throw new DecrypterException(DecrypterException.PLUGIN_DEFECT); } } final Regex hdsconvert = new Regex(dllink, "(https?://[^/]+/z/podcastcdn/.+\\.csmil)/manifest\\.f4m"); if (hdsconvert.matches()) { /* Convert hds --> hls */ dllink = hdsconvert.getMatch(0).replace("/z/", "/i/") + "/index_1_av.m3u8"; } if (dllink.contains(".m3u8")) { this.br.getPage(dllink); final List<HlsContainer> allqualities = HlsContainer.getHlsQualities(this.br); for (final HlsContainer singleHlsQuality : allqualities) { final DownloadLink dl = this.createDownloadlink(singleHlsQuality.downloadurl); final String filename = title + "_" + singleHlsQuality.getStandardFilename(); dl.setFinalFileName(filename); dl._setFilePackage(fp); if (description != null) { dl.setComment(description); } decryptedLinks.add(dl); } } else { /* Single http url --> We can sometimes grab multiple qualities */ if (dllink.contains("_1800.mp4")) { /* Multiple qualities availab.e */ final String[][] bitrates = {{"1800", "_1800.mp4"}, {"800", "_800.mp4"}}; for (final String[] qualityInfo : bitrates) { final String bitrate = qualityInfo[0]; final String url_bitrate_string = qualityInfo[1]; final String directlink = dllink.replace("_1800.mp4", url_bitrate_string); final DownloadLink dl = this.createDownloadlink("directhttp://" + directlink); dl.setFinalFileName(title + "_" + bitrate + "." + extension); dl._setFilePackage(fp); if (description != null) { dl.setComment(description); } this.decryptedLinks.add(dl); } } else { /* Only one quality available. */ final DownloadLink dl = this.createDownloadlink("directhttp://" + dllink); dl.setFinalFileName(title + "." + extension); dl._setFilePackage(fp); if (description != null) { dl.setComment(description); } this.decryptedLinks.add(dl); } } }