2

YouTube のようなビデオ ストリーミング アプリケーションを作成したいのですが、小規模です。バックエンド レスト エンドポイントには Spring Boot を使用し、ビデオ ファイルの保存には Amazon S3 バケットを使用しています。動画ファイルを S3 バケットにアップロードおよびダウンロードできます。しかし、ストリーミング側で混乱しています。これらのビデオ ファイルを jsp ページに表示して再生したいと考えています。Aws ビデオ オン デマンド、aws キネシスなどについて聞いたことがあります。誰かが私に提案したり、リンクを共有したりできますか。これは、Spring Boot でビデオ ストリーミングを行うための最良の方法です。または、このシナリオで役立つ aws サービス以外のサービスはありますか。私は完全に混乱しています。私を助けてください。ありがとうございました。

4

1 に答える 1

1

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, 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 を使用する必要があります。

于 2021-06-24T10:57:36.383 に答える