Общий размер файла = 12 МБ
Размер фрагмента = 2 МБ
Для первого вызова:
Диапазон от байтов браузера=0- и вычислено значение диапазон на основе размера фрагмента и отправленного запроса с bytes=0-2097151.
Для этого вызова мне удалось получить ответ и транслировать часть видео в браузере
Для второго вызова:
Диапазон из браузера bytes=2097152-, я рассчитал диапазон и отправил запрос с помощью bytes= 2097152-4194302
в этом случае я получал ответ от AWS SDK, где при отправке ответа в браузер я получал следующую ошибку:
java.lang.IllegalArgumentException:
Код: Выделить всё
position
Полный журнал ошибок:
Код: Выделить всё
java.lang.IllegalArgumentException: 'position' exceeds the resource length 2097152
at org.springframework.util.Assert.isTrue(Assert.java:121) ~[spring-core-5.3.19.jar:5.3.19]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
*__checkpoint ⇢ Handler com.example.demo.Application#getVideoFromS3(String) [DispatcherHandler]
*__checkpoint ⇢ HTTP GET "/video/s3" [ExceptionHandlingWebHandler]
Original Stack Trace:
at org.springframework.util.Assert.isTrue(Assert.java:121) ~[spring-core-5.3.19.jar:5.3.19]
at org.springframework.http.HttpRange.toResourceRegion(HttpRange.java:68) ~[spring-web-5.3.19.jar:5.3.19]
at org.springframework.http.HttpRange.toResourceRegions(HttpRange.java:183) ~[spring-web-5.3.19.jar:5.3.19]
at org.springframework.http.codec.ResourceHttpMessageWriter.lambda$write$3(ResourceHttpMessageWriter.java:213) ~[spring-web-5.3.19.jar:5.3.19]
Использование приведенного ниже примера кода в сервисе:
Код: Выделить всё
EcsObject ecsObject = awsEcsRepository.getObjectByRange(fileName, bucketName, null, contentRange, correlationId);
ByteArrayResource videoResponse = new ByteArrayResource(ecsObject.getInputStream().readAllBytes());
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.valueOf("video/webm"));
headers.setContentLength(ecsObject.getContentLength());
headers.set(HttpHeaders.CONTENT_RANGE, "bytes " + rangeStart + "-"+rangeEnd+"/"+fileSize);
headers.set(HttpHeaders.ACCEPT_RANGES, "bytes");
return ResponseEntity.status(HttpStatus.PARTIAL_CONTENT)
.headers(headers)
.body(videoResponse);
controller:
public ResponseEntity getVideoFromS3(@RequestHeader("Range") String range)
{
return streamingService.getVideoFromS3(range);
}
Ищу решение, чтобы устранить проблему, и я смогу транслировать видео в браузере, извлекая фрагменты с помощью запрос диапазона.
Источник: https://stackoverflow.com/questions/781 ... ot-working