我已经在构建带有Spring消息的WebSocket聊天室。
现在,我想建立像Twitch这样的流媒体网站。 我在搜索时搜索了很多方法。它们始终提供Andriod的框架。
首先,我想使用二进制文件传输流。
但是我担心如果连接过多,流将崩溃。
所以我转到youtube和twitch.tv,我看到twitch使用了m3u8的碎片,并使用WebSocket获取信息,并使用get或option获取m3u8文件来制作视频。
springMVC可以像DFS一样构建吗?
还是我也需要阅读一些API手册?
有人可以直接指点我,让我想出如何构建流媒体网站吗?
答案 0 :(得分:1)
有一个名为Spring Content的Spring社区项目。它支持字节范围请求,因此支持html5视频控件。我不确定这是否足够好?
无论如何,当将其与Spring Data(和Spring Boot)配对时,该项目都可以非常轻松地构建内容丰富的应用程序和服务。它具有与Spring Data相同的编程模型,并且本质上是在内容(或非结构化数据)的内容上体现Spring数据对结构化数据的含义。即使它不足以进行流传输(我们很乐意与您合作以增强此功能),它肯定也会帮助您总体上加快“内容管理”平台的构建,因为大概需要用户/管理页面允许人们上传和管理您的视频流。
这可能类似于以下内容:-
pom.xml
<!-- Spring Boot/ Spring Data dependencies -->
...
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-fs-boot-starter</artifactId>
<version>0.7.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest-boot-starter</artifactId>
<version>0.7.0</version>
</dependency>
Video.java
@Entity
public class Video {
@Id
@GeneratedValue
private long id;
...other existing fields...
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
@MimeType
private String mimeType = "text/plain";
...
}
VideoContentStore.java
@StoreRestResource(path="videoStreams")
public interface VideoContentStore extends ContentStore<Video, String> {
}
这是获取REST端点所需要做的一切,这些端点将使您可以存储和检索与每个Video实体关联的内容。如前所述,这实际上是如何工作的非常类似于Spring Data。当您的应用程序启动时,Spring Content将看到spring-content-fs-boot-starter
依赖性,知道您想将内容存储在文件系统上并注入VideoContentStore
接口的文件系统(或JPA / GridFS / S3)实现。它还将看到spring-content-rest-boot-starter
并将注入与该内容存储库接口通信的REST端点。意味着您不必自己执行任何此操作。
例如,
curl -X POST /videoStreams/{videoId} -F "file=@/path/to/video.mp4"
会将视频存储在文件系统上,并将其与ID为videoId
的视频实体相关联。
curl /videoStreams/{videoId}
将再次获取它,依此类推...支持完整的CRUD,这是端点还支持视频流(或字节范围请求)。
有一个示例here。
您还可以通过将spring-content-fs-boot-starter
依赖项交换为适当的Spring Content Storage模块,来决定将内容存储在实体中的其他位置,如数据库中的实体中,或在S3中。每种存储类型的示例均为here。
HTH 附言不要对提出问题/功能要求和/或我们正在积极寻求参与的PR感到害羞。
答案 1 :(得分:0)
1,您需要具有流服务器。
您可以使用Nginx RTMP https://github.com/arut/nginx-rtmp-module或SRS https://github.com/ossrs/srs。
2,您可以使用OBS将流推送到流服务器。
3,您可以使用videojs rtmp播放器https://github.com/videojs/videojs-flash播放RTMP流。
据我所知,抽搐正在使用低延迟hls而不是RTMP输出,因为adobe将在2020年停止支持Flash Player。对于LHLS,您需要对转码器进行优化(可能基于ffmpeg或x264进行自定义),并且Web播放器将延迟减少到5秒cos现有的Web播放器缓冲区通常很高。
希望这可以为您提供帮助。