我正在使用spring消息构建WebSocket聊天室。
现在我想建立像Twitch这样的流媒体网站。我在网上搜索了很多。他们总是提供Andriod的框架。
首先,我想使用二进制来传输我的流。
但是如果连接太多,我担心我的流会崩溃。
所以我去youtube和twitch.tv我看到twitch使用m3u8的碎片并使用WebSocket获取信息并使用get或option获取m3u8文件来制作视频。
springMVC可以像DFS一样构建吗?
或者我也需要阅读一些API手册?
有人能指点我直接让我弄清楚如何建立一个流媒体网站?
有一个名为Spring Content的Spring社区项目。它支持字节范围请求,因此支持开箱即用的html5视频控件。我不确定这是否足够好?
无论如何,当与Spring Data(和Spring Boot)配对时,这个项目使构建内容丰富的应用程序和服务变得非常容易。它具有与Spring Data相同的编程模型,实质上是内容(或非结构化数据)Spring数据与结构化数据的相关性。即使它不足以进行流式传输(我们很乐意与您合作进行增强),它肯定会帮助您加速整个“内容管理”平台的构建,因为您可能需要用户/管理页面允许人们上传和管理您的视频流。
这可能类似于以下内容: -
pom.hml
<!-- 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";
...
}
video content store.Java
@StoreRestResource(path="videoStreams")
public interface VideoContentStore extends ContentStore<Video, String> {
}
您只需获取REST端点即可存储和检索与每个视频实体关联的内容。如上所述,这实际上是如何工作的,就像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 P.S.不要害怕提出问题/功能请求和/或PR,我们正积极寻求参与。
1,你需要有流媒体服务器。
您可以使用Nginx RTMP https://github.com/arut/nginx-rtmp-module或SRS https://github.com/ossrs/srs。
2,您可以使用OBS将流推送到您的流媒体服务器。
3,您可以使用videojs rtmp player https://github.com/videojs/videojs-flash播放您的RTMP流。
据我所知,twitch正在使用低延迟hls而不是RTMP输出,因为adobe将在2020年停止支持flash播放器。对于LHLS,你需要对代码转换器进行优化(可能基于ffmpeg或x264进行自定义),以及web player到将延迟减少到5秒cos现有的网络播放器缓冲区通常非常高。
希望这可以帮到你。