gpt4 book ai didi

amazon-web-services - 来自 S3 存储桶的 Spring Boot 视频流

转载 作者:行者123 更新时间:2023-12-05 04:57:09 34 4
gpt4 key购买 nike

我想创建一个类似 YouTube 的视频流应用程序,但规模较小。我将 Spring boot 用于后端 rest 端点,将 amazon S3 存储桶用于存储视频文件。我能够将视频文件上传和下载到 S3 存储桶。但我对流媒体方面感到困惑。我想在jsp页面中显示那些视频文件来播放。我听说过 Aws video on demand、aws kinesis 等。有人可以建议我或分享一些链接,这将是使用 spring boot 进行视频流的最佳方法。或者除了 aws 服务之外是否还有其他服务可以在这种情况下使用。我完全糊涂了。请帮帮我。谢谢。

最佳答案

我已经创建了一个示例项目,用于使用 spring boot 流式传输 AWS s3 资源。

您可以根据需要设置带映射的 Controller 。

对于此演示代码,端点是 http://localhost:port/bucket_name/object_key

    @RestController("/")
public class ApiController {

@Value("${aws.region}")
private String awsRegion;

@GetMapping(value = "/**", produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE })
public ResponseEntity<StreamingResponseBody> getObject(HttpServletRequest request) {
try {
AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion(awsRegion).build();

String uri = request.getRequestURI();
String uriParts[] = uri.split("/", 2)[1].split("/", 2);
String bucket = uriParts[0];
String key = uriParts[1];
System.out.println("Fetching " + uri);
S3Object object = s3client.getObject(bucket, key);
S3ObjectInputStream finalObject = object.getObjectContent();

final StreamingResponseBody body = outputStream -> {
int numberOfBytesToWrite = 0;
byte[] data = new byte[1024];
while ((numberOfBytesToWrite = finalObject.read(data, 0, data.length)) != -1) {
outputStream.write(data, 0, numberOfBytesToWrite);
}
finalObject.close();
};
return new ResponseEntity<StreamingResponseBody>(body, HttpStatus.OK);
} catch (Exception e) {
System.err.println("Error "+ e.getMessage());
return new ResponseEntity<StreamingResponseBody>(HttpStatus.BAD_REQUEST);
}

}
}

您需要在 ResponseEntity 中使用 StreamingResponseBody。如果您需要随时可用的微服务,请随时探索 github 项目 s3-streamer我出于同样的目的而写。

关于amazon-web-services - 来自 S3 存储桶的 Spring Boot 视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64595112/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com