Use high res stream URL and fallback to low res on error

This commit is contained in:
0xb00bface 2021-08-08 13:51:29 +02:00
parent 1784b20719
commit 114acad34c
2 changed files with 26 additions and 12 deletions

View File

@ -9,6 +9,8 @@
* Fixed ConcurrentModificationException, which caused the recorded models tab * Fixed ConcurrentModificationException, which caused the recorded models tab
to turn blank to turn blank
* Fixed recordings not stopping, if playlist requests returned 403 or 404 * Fixed recordings not stopping, if playlist requests returned 403 or 404
* LiveJasmin recordings no first check the high res stream and fall back to
the low res stream, if it is not available
4.4.3 4.4.3
======================== ========================

View File

@ -165,11 +165,30 @@ public class LiveJasminModel extends AbstractModel {
new Random().nextBytes(sessionIdRandom); new Random().nextBytes(sessionIdRandom);
String sessionId = 'g' + StringUtil.toHexString(sessionIdRandom, 32); String sessionId = 'g' + StringUtil.toHexString(sessionIdRandom, 32);
String url = "https://api-gateway.dditsadn.com/v1/stream/performers/" + getName() String highResUrl = "https://api-gateway.dditsadn.com/v1/stream/performers/" + getName() + "/streams/free/formats/hls?brandId=jasmin&session=" + sessionId + "&streamName=stream_1280_720_3000";
+ "/streams/free/formats/hls?brandId=jasmin&session=" + sessionId + "&streamName=stream_1280_720_1953"; String lowResUrl = "https://api-gateway.dditsadn.com/v1/stream/performers/" + getName() + "/streams/free/formats/hls?brandId=jasmin&session=" + sessionId + "&streamName=stream_1280_720_1953";
LOG.debug("Getting master playlist URL from {}", url);
String body;
try {
body = getMasterPlaylistUrl(highResUrl);
} catch (Exception e) {
LOG.debug("High resolution URL not available for {}. Falling back to low res.", getName());
body= getMasterPlaylistUrl(lowResUrl);
}
JSONObject json = new JSONObject(body);
if (json.has("data")) {
JSONObject data = json.getJSONObject("data");
return data.getString("url");
} else {
throw new IOException("Response was not successful: " + lowResUrl + "\n" + body);
}
}
private String getMasterPlaylistUrl(String fromUrl) throws IOException {
LOG.debug("Getting master playlist URL from {}", fromUrl);
Request request = new Request.Builder() Request request = new Request.Builder()
.url(url) .url(fromUrl)
.addHeader(USER_AGENT, Config.getInstance().getSettings().httpUserAgentMobile) .addHeader(USER_AGENT, Config.getInstance().getSettings().httpUserAgentMobile)
.addHeader(ACCEPT, MIMETYPE_APPLICATION_JSON) .addHeader(ACCEPT, MIMETYPE_APPLICATION_JSON)
.addHeader(ACCEPT_LANGUAGE, Locale.ENGLISH.getLanguage()) .addHeader(ACCEPT_LANGUAGE, Locale.ENGLISH.getLanguage())
@ -178,14 +197,7 @@ public class LiveJasminModel extends AbstractModel {
.build(); .build();
try (Response response = site.getHttpClient().execute(request)) { try (Response response = site.getHttpClient().execute(request)) {
if (response.isSuccessful()) { if (response.isSuccessful()) {
String body = response.body().string(); return response.body().string();
JSONObject json = new JSONObject(body);
if (json.has("data")) {
JSONObject data = json.getJSONObject("data");
return data.getString("url");
} else {
throw new IOException("Response was not successful: " + url + "\n" + body);
}
} else { } else {
throw new HttpException(response.code(), response.message()); throw new HttpException(response.code(), response.message());
} }