diff --git a/src/main/java/de/mediathekview/mserver/crawler/orfon/json/OrfOnEpisodeDeserializer.java b/src/main/java/de/mediathekview/mserver/crawler/orfon/json/OrfOnEpisodeDeserializer.java index 112c7977c..ef8ef473e 100644 --- a/src/main/java/de/mediathekview/mserver/crawler/orfon/json/OrfOnEpisodeDeserializer.java +++ b/src/main/java/de/mediathekview/mserver/crawler/orfon/json/OrfOnEpisodeDeserializer.java @@ -61,8 +61,8 @@ public class OrfOnEpisodeDeserializer implements JsonDeserializer toURL(String aString) { return Optional.empty(); } - private Optional> parseUrl(JsonElement jsonElement) { + private Optional> parseVideoFromSegmentPlaylist(JsonElement jsonElement) { Optional videoPath1 = JsonUtils.getElement(jsonElement, TAG_VIDEO_PATH_1); if (videoPath1.isEmpty() || !videoPath1.get().isJsonArray() || videoPath1.get().getAsJsonArray().size() == 0) { return Optional.empty(); @@ -184,10 +183,10 @@ private Optional> parseUrl(JsonElement jsonElement) { } } } - return parseFallbackVideo(jsonElement); + return parseVideoFromSources(jsonElement); } - private Optional> parseFallbackVideo(JsonElement root) { + private Optional> parseVideoFromSources(JsonElement root) { Optional videoSources = JsonUtils.getElement(root, TAG_VIDEO_FALLBACK); if (videoSources.isPresent()) { Map urls = new EnumMap<>(Resolution.class); @@ -208,7 +207,37 @@ private Optional> parseFallbackVideo(JsonElement root) } } } - return Optional.empty(); + return parseVideoFromThumbnail(root); + } + + + + private Optional> parseVideoFromThumbnail(JsonElement root) { + Map urls = new EnumMap<>(Resolution.class); + try { + Optional id = JsonUtils.getElement(root, TAG_ID); + Optional thumbnailSources = JsonUtils.getElement(root, VIDEO_THUMBNAIL); + if (id.isPresent() && thumbnailSources.isPresent() && thumbnailSources.get().isJsonArray() && thumbnailSources.get().getAsJsonArray().size() > 0 ) { + Optional thumbnailSrc = JsonUtils.getElement(thumbnailSources.get().getAsJsonArray().get(0), "src"); + if (thumbnailSrc.isPresent()) { + int indexId = thumbnailSrc.get().getAsString().indexOf(id.get().getAsString()); + String fromSecondIdOnwards = thumbnailSrc.get().getAsString().substring(indexId + id.get().getAsString().length() + 1); + String secondId = fromSecondIdOnwards.substring(0, fromSecondIdOnwards.indexOf("_")); + String url = String.format("https://apasfiis.sf.apa.at/ipad/cms-worldwide_episodes/%s_%s_QXA.mp4/playlist.m3u8", id.get().getAsString(), secondId); + try { + urls.put(Resolution.NORMAL, new FilmUrl(url, 0L)); + } catch (MalformedURLException e) { + LOG.error("Malformed video url {} {}", url, e); + } + } + } + } catch (Exception e) { + LOG.error("generateFallbackVideo {}", e); + } + if (urls.size() == 0) { + return Optional.empty(); + } + return Optional.of(urls); } private Optional> readVideoForTargetCodec(JsonElement urlArray, String targetCodec) {