如何建立像春天抽搐的流网站[关闭]

问题描述 投票:0回答:2

我正在使用spring消息构建WebSocket聊天室。

现在我想建立像Twitch这样的流媒体网站。我在网上搜索了很多。他们总是提供Andriod的框架。

首先,我想使用二进制来传输我的流。

但是如果连接太多,我担心我的流会崩溃。

所以我去youtube和twitch.tv我看到twitch使用m3u8的碎片并使用WebSocket获取信息并使用get或option获取m3u8文件来制作视频。

springMVC可以像DFS一样构建吗?

或者我也需要阅读一些API手册?

有人能指点我直接让我弄清楚如何建立一个流媒体网站?

spring-mvc youtube video-streaming spring-websocket twitch
2个回答
1
投票

有一个名为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,我们正积极寻求参与。


0
投票

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流。

  1. 您可以使用spring cloud来管理流,主机,用户等。

据我所知,twitch正在使用低延迟hls而不是RTMP输出,因为adobe将在2020年停止支持flash播放器。对于LHLS,你需要对代码转换器进行优化(可能基于ffmpeg或x264进行自定义),以及web player到将延迟减少到5秒cos现有的网络播放器缓冲区通常非常高。

希望这可以帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.