Spring Bootを使用して、RESTfulベースのビデオプレーヤーを作成したいと思います。ファイルブラウザに.mp4拡張子のビデオがあります。 RESTエンドポイントを作成して、フロントエンド側でこれらのビデオを提供するにはどうすればよいですか?
私はこの方法を試しました。 ビデオは開始または停止できます。ただし、逆方向または順方向に実行することはできません。希望の分に到達できず、起動できません。
Spring Content すぐに使用できるビデオストリーミングをサポートします。ファイルシステム(FS)にSpring Contentを使用すると、ファイルシステムに裏打ちされたビデオストアを作成し、そのストアにビデオを配置し、コンパニオンライブラリSpring Content REST HTTP経由でフロントエンドビデオプレーヤーに提供します。
Start.spring.ioまたはIDE Springプロジェクトウィザード(執筆時点ではSpring Boot 1.5.10)を使用して、新しいSpringBootプロジェクトを作成します。次のSpringContent依存関係を追加して、最終的に完成させます。これ等と一緒に:-
<dependencies>
<!-- Standard Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.3</version>
</dependency>
<!-- Spring Content -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-fs-boot-starter</artifactId>
<version>0.0.9</version>
</dependency>
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest-boot-starter</artifactId>
<version>0.0.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Spring Boot Applicationクラスで、VideoStoreを作成します。ストアとして注釈を付けるRESTリソース。これにより、Spring Contentは(ファイルシステムのこのインターフェイスの)実装を挿入し、RESTこのインターフェースも、自分で作成する必要がなくなります。-
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@StoreRestResource(path="videos")
public interface VideoStore extends Store<String> {}
}
デフォルトでは、SpringContentはJava.io.tmpdirの下にストアを作成します。したがって、「ストア」のルートを指すようにSPRING_CONTENT_FS_FILESYSTEM_ROOT環境変数も設定する必要があります。
ビデオをこの「ルート」の場所にコピーします。アプリケーションを起動すると、ビデオは以下からストリーミング可能になります:-
/videos/MyVideo.mp4
val video = UrlResource("file:$videoLocation/$name")
return ResponseEntity.status(HttpStatus.PARTIAL_CONTENT)
.contentType(MediaTypeFactory
.getMediaType(video)
.orElse(MediaType.APPLICATION_OCTET_STREAM))
.body(video)