https://github.com/openfun/marsha

Marsha是一个自托管的开源视频提供,Marsha是一个视频管理和回放服务。它旨在独立运作:就像拥有自己的YouTube一样。

教师和组织可以使用Marsha在创建课程时直接从课程上传和管理他们的视频(以及相关文件,如字幕或成绩单)。

课程发布后,学员只需在课程中看到视频播放器即可。

由于LTI互操作性标准,这种无缝集成可与任何LMS(Open edX,Moodle,…)配合使用。

这是Marsha开箱即用的产品:

从教师上传的单个视频文件中自动将视频转码为所有合适的格式;
自适应比特率流播放(HLS和DASH);
通过LTI认证进行视频访问控制;
通过播放器本身的可访问性以及对字幕,隐藏式字幕和成绩单的支持;
通过Terraform轻松部署和管理环境;

Marsha由3个组件组成:容器本地Django后端,AWS转码和文件存储环境,以及React前端应用程序。

Django后端
Django后端的任务是提供集成到LMS中的LTI页面。它还管理所有对象及其关系,用户帐户和所有身份验证问题。它公开了一个JSON API,用于与在AWS lambdas和React前端上运行的基础架构部分进行通信。

它使用docker-compose文件进行定义以进行开发,并且可以部署在任何容器环境(例如Kubernetes)上进行生产。

存储和转码环境
源文件(视频,字幕,…)由教师直接上传到S3存储桶,触发MediaConvert生成所有必要的视频文件(各种格式和自适应比特率流的片段和清单)到目标S3存储桶。然后通过CloudFront CDN提供这些文件。

Lambdas用于管理和监视进程并向Django后端报告。

这种存储和转码环境需要AWS,因为它在转码时严重依赖AWS MediaConvert来完成繁重的工作。它所依赖的所有服务都是通过Terraform配置的,可以通过make命令轻松部署。

隐私问题

请注意,我们在AWS中处理的唯一对象是实际的视频和字幕文件,从上传到通过转码和存储分发。不需要将任何数据库或应用程序后端部署到AWS或在那里发送任何用户的个人信息。

React前端
React前端负责用户在LTI Iframe中进行交互的接口。它从视图中获取具有权限的经过身份验证的令牌,并与Django后端交互以管理对象,并直接使用AWS s3上载文件。

当学习者加载显示视频播放器时,它也为同一视图提供动力(感谢Plyr)。

Iframe管理

为了给教师提供最佳的用户体验,我们需要能够根据其内容更改的大小。这可以通过iframe-resizer库完成。

iframe-resizer需要在(我们在React前端包中包含)和主页内的一些JS中运行一些JS。然后通过消息传递进行通信以调整的大小。

这意味着要为教师提供最佳界面,您需要在LMS页面中包含主机端iframe-resizer JS。对于Open edX,这已在我们的自定义LTI使用者Xblock中完成。

如果您不能或不想包含此主机端JS,您仍然可以运行Marsha。对于学习者来说,它将完全相同(前提是您调整视频的LTI 的大小),教师只需要在某些情况下在内滚动。