コード例 #1
0
  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);
      }
    }
  }