Skip to content

Commit 4d02c81

Browse files
committed
add parsevideofromthumbnail
1 parent 9630cb8 commit 4d02c81

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

src/main/java/de/mediathekview/mserver/crawler/orfon/json/OrfOnEpisodeDeserializer.java

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ public class OrfOnEpisodeDeserializer implements JsonDeserializer<OrfOnVideoInfo
6161
//
6262
private AbstractCrawler crawler = null;
6363
private static final String[] PREFERED_CODEC = {"hls", "hds", "progressive"};
64+
private static final String[] VIDEO_THUMBNAIL = {"thumbnail_sources","hls"};
6465
//
65-
6666
public OrfOnEpisodeDeserializer(AbstractCrawler crawler) {
6767
this.crawler = crawler;
6868
}
@@ -84,9 +84,8 @@ public OrfOnVideoInfoDTO deserialize(
8484
parseWebsite(JsonUtils.getElementValueAsString(jsonElement, TAG_SHARE_BODY)),
8585
parseGeoLocations(JsonUtils.getElementValueAsString(jsonElement, TAG_RIGHT)),
8686
parseSubtitleSource(JsonUtils.getElementValueAsString(jsonElement, TAG_SUBTITLE)),
87-
optimizeUrls(parseUrl(jsonElement)),
87+
optimizeUrls(parseVideoFromSegmentPlaylist(jsonElement)),
8888
buildOrResolveSubs(jsonElement)
89-
9089
);
9190
return aFilm;
9291
}
@@ -166,7 +165,7 @@ private Optional<URL> toURL(String aString) {
166165
return Optional.empty();
167166
}
168167

169-
private Optional<Map<Resolution, FilmUrl>> parseUrl(JsonElement jsonElement) {
168+
private Optional<Map<Resolution, FilmUrl>> parseVideoFromSegmentPlaylist(JsonElement jsonElement) {
170169
Optional<JsonElement> videoPath1 = JsonUtils.getElement(jsonElement, TAG_VIDEO_PATH_1);
171170
if (videoPath1.isEmpty() || !videoPath1.get().isJsonArray() || videoPath1.get().getAsJsonArray().size() == 0) {
172171
return Optional.empty();
@@ -184,10 +183,10 @@ private Optional<Map<Resolution, FilmUrl>> parseUrl(JsonElement jsonElement) {
184183
}
185184
}
186185
}
187-
return parseFallbackVideo(jsonElement);
186+
return parseVideoFromSources(jsonElement);
188187
}
189188

190-
private Optional<Map<Resolution, FilmUrl>> parseFallbackVideo(JsonElement root) {
189+
private Optional<Map<Resolution, FilmUrl>> parseVideoFromSources(JsonElement root) {
191190
Optional<JsonElement> videoSources = JsonUtils.getElement(root, TAG_VIDEO_FALLBACK);
192191
if (videoSources.isPresent()) {
193192
Map<Resolution, FilmUrl> urls = new EnumMap<>(Resolution.class);
@@ -208,7 +207,37 @@ private Optional<Map<Resolution, FilmUrl>> parseFallbackVideo(JsonElement root)
208207
}
209208
}
210209
}
211-
return Optional.empty();
210+
return parseVideoFromThumbnail(root);
211+
}
212+
213+
214+
215+
private Optional<Map<Resolution, FilmUrl>> parseVideoFromThumbnail(JsonElement root) {
216+
Map<Resolution, FilmUrl> urls = new EnumMap<>(Resolution.class);
217+
try {
218+
Optional<JsonElement> id = JsonUtils.getElement(root, TAG_ID);
219+
Optional<JsonElement> thumbnailSources = JsonUtils.getElement(root, VIDEO_THUMBNAIL);
220+
if (id.isPresent() && thumbnailSources.isPresent() && thumbnailSources.get().isJsonArray() && thumbnailSources.get().getAsJsonArray().size() > 0 ) {
221+
Optional<JsonElement> thumbnailSrc = JsonUtils.getElement(thumbnailSources.get().getAsJsonArray().get(0), "src");
222+
if (thumbnailSrc.isPresent()) {
223+
int indexId = thumbnailSrc.get().getAsString().indexOf(id.get().getAsString());
224+
String fromSecondIdOnwards = thumbnailSrc.get().getAsString().substring(indexId + id.get().getAsString().length() + 1);
225+
String secondId = fromSecondIdOnwards.substring(0, fromSecondIdOnwards.indexOf("_"));
226+
String url = String.format("https://apasfiis.sf.apa.at/ipad/cms-worldwide_episodes/%s_%s_QXA.mp4/playlist.m3u8", id.get().getAsString(), secondId);
227+
try {
228+
urls.put(Resolution.NORMAL, new FilmUrl(url, 0L));
229+
} catch (MalformedURLException e) {
230+
LOG.error("Malformed video url {} {}", url, e);
231+
}
232+
}
233+
}
234+
} catch (Exception e) {
235+
LOG.error("generateFallbackVideo {}", e);
236+
}
237+
if (urls.size() == 0) {
238+
return Optional.empty();
239+
}
240+
return Optional.of(urls);
212241
}
213242

214243
private Optional<Map<Resolution, FilmUrl>> readVideoForTargetCodec(JsonElement urlArray, String targetCodec) {

0 commit comments

Comments
 (0)