fix3
This commit is contained in:
parent
43c46e266d
commit
4ea3d96496
@ -245,7 +245,11 @@ public final class XtreamPlayerApplication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(target)
|
List<URI> attempts = candidateUris(target);
|
||||||
|
HttpResponse<byte[]> response = null;
|
||||||
|
URI usedTarget = target;
|
||||||
|
for (URI candidate : attempts) {
|
||||||
|
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(candidate)
|
||||||
.GET()
|
.GET()
|
||||||
.timeout(Duration.ofSeconds(60))
|
.timeout(Duration.ofSeconds(60))
|
||||||
.header("User-Agent", firstNonBlank(
|
.header("User-Agent", firstNonBlank(
|
||||||
@ -266,21 +270,31 @@ public final class XtreamPlayerApplication {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
HttpRequest request = requestBuilder.build();
|
HttpRequest request = requestBuilder.build();
|
||||||
HttpResponse<byte[]> response = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofByteArray());
|
HttpResponse<byte[]> candidateResponse = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofByteArray());
|
||||||
|
response = candidateResponse;
|
||||||
|
usedTarget = candidate;
|
||||||
|
if (candidateResponse.statusCode() < 400) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (response == null) {
|
||||||
|
writeJson(exchange, 502, errorJson("Unable to proxy stream: empty upstream response."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
String contentType = response.headers().firstValue("Content-Type").orElse("application/octet-stream");
|
String contentType = response.headers().firstValue("Content-Type").orElse("application/octet-stream");
|
||||||
byte[] body = response.body() == null ? new byte[0] : response.body();
|
byte[] body = response.body() == null ? new byte[0] : response.body();
|
||||||
if (response.statusCode() >= 400) {
|
if (response.statusCode() >= 400) {
|
||||||
LOGGER.warn(
|
LOGGER.warn(
|
||||||
"Stream proxy upstream returned status={} uri={} bytes={} contentType={}",
|
"Stream proxy upstream returned status={} uri={} bytes={} contentType={}",
|
||||||
response.statusCode(),
|
response.statusCode(),
|
||||||
maskUri(target),
|
maskUri(usedTarget),
|
||||||
body.length,
|
body.length,
|
||||||
contentType
|
contentType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isHlsPlaylist(target, contentType)) {
|
if (isHlsPlaylist(usedTarget, contentType)) {
|
||||||
String rewritten = rewritePlaylistForProxy(target, body);
|
String rewritten = rewritePlaylistForProxy(usedTarget, body);
|
||||||
exchange.getResponseHeaders().set("Content-Type", "application/vnd.apple.mpegurl; charset=utf-8");
|
exchange.getResponseHeaders().set("Content-Type", "application/vnd.apple.mpegurl; charset=utf-8");
|
||||||
writeBytes(exchange, response.statusCode(), rewritten.getBytes(StandardCharsets.UTF_8),
|
writeBytes(exchange, response.statusCode(), rewritten.getBytes(StandardCharsets.UTF_8),
|
||||||
"application/vnd.apple.mpegurl; charset=utf-8");
|
"application/vnd.apple.mpegurl; charset=utf-8");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user