@@ -61,8 +61,8 @@ public class OrfOnEpisodeDeserializer implements JsonDeserializer<OrfOnVideoInfo
61
61
//
62
62
private AbstractCrawler crawler = null ;
63
63
private static final String [] PREFERED_CODEC = {"hls" , "hds" , "progressive" };
64
+ private static final String [] VIDEO_THUMBNAIL = {"thumbnail_sources" ,"hls" };
64
65
//
65
-
66
66
public OrfOnEpisodeDeserializer (AbstractCrawler crawler ) {
67
67
this .crawler = crawler ;
68
68
}
@@ -84,9 +84,8 @@ public OrfOnVideoInfoDTO deserialize(
84
84
parseWebsite (JsonUtils .getElementValueAsString (jsonElement , TAG_SHARE_BODY )),
85
85
parseGeoLocations (JsonUtils .getElementValueAsString (jsonElement , TAG_RIGHT )),
86
86
parseSubtitleSource (JsonUtils .getElementValueAsString (jsonElement , TAG_SUBTITLE )),
87
- optimizeUrls (parseUrl (jsonElement )),
87
+ optimizeUrls (parseVideoFromSegmentPlaylist (jsonElement )),
88
88
buildOrResolveSubs (jsonElement )
89
-
90
89
);
91
90
return aFilm ;
92
91
}
@@ -166,7 +165,7 @@ private Optional<URL> toURL(String aString) {
166
165
return Optional .empty ();
167
166
}
168
167
169
- private Optional <Map <Resolution , FilmUrl >> parseUrl (JsonElement jsonElement ) {
168
+ private Optional <Map <Resolution , FilmUrl >> parseVideoFromSegmentPlaylist (JsonElement jsonElement ) {
170
169
Optional <JsonElement > videoPath1 = JsonUtils .getElement (jsonElement , TAG_VIDEO_PATH_1 );
171
170
if (videoPath1 .isEmpty () || !videoPath1 .get ().isJsonArray () || videoPath1 .get ().getAsJsonArray ().size () == 0 ) {
172
171
return Optional .empty ();
@@ -184,10 +183,10 @@ private Optional<Map<Resolution, FilmUrl>> parseUrl(JsonElement jsonElement) {
184
183
}
185
184
}
186
185
}
187
- return parseFallbackVideo (jsonElement );
186
+ return parseVideoFromSources (jsonElement );
188
187
}
189
188
190
- private Optional <Map <Resolution , FilmUrl >> parseFallbackVideo (JsonElement root ) {
189
+ private Optional <Map <Resolution , FilmUrl >> parseVideoFromSources (JsonElement root ) {
191
190
Optional <JsonElement > videoSources = JsonUtils .getElement (root , TAG_VIDEO_FALLBACK );
192
191
if (videoSources .isPresent ()) {
193
192
Map <Resolution , FilmUrl > urls = new EnumMap <>(Resolution .class );
@@ -208,7 +207,37 @@ private Optional<Map<Resolution, FilmUrl>> parseFallbackVideo(JsonElement root)
208
207
}
209
208
}
210
209
}
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 );
212
241
}
213
242
214
243
private Optional <Map <Resolution , FilmUrl >> readVideoForTargetCodec (JsonElement urlArray , String targetCodec ) {
0 commit comments