微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

S3存储桶中的Spring Boot视频流

如何解决S3存储桶中的Spring Boot视频流

我想创建一个类似YouTube的视频流应用程序,但是规模很小。我将Spring Boot用于后端其余端点,并将Amazon S3存储桶用于存储视频文件。我可以将视频文件上传和下载到S3存储桶。但是我对流媒体方面感到困惑。我想在jsp页面显示要播放的视频文件。我听说了点播AWS视频,aws运动等问题。有人可以建议我还是分享一些链接,这将是在春季启动视频流时遵循的最佳方法。或者,除了aws服务之外,还有没有其他服务可以在这种情况下使用。我很困惑。请帮帮我。谢谢。

解决方法

我创建了一个示例项目,用于使用 Spring Boot 流式传输 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,data.length)) != -1) {
                outputStream.write(data,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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。