Spring 从 S3 存储桶启动视频流

Spring Boot Video Streaming from S3 Bucket

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

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

您可以根据需要设置带映射的控制器。

对于此演示代码,端点是 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。