前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >A lightweight open-source video cloud based on Nodejs, SRS, FFmpeg, WebRTC, etc.

A lightweight open-source video cloud based on Nodejs, SRS, FFmpeg, WebRTC, etc.

作者头像
CiiLii西里网
发布2023-04-18 15:47:20
4500
发布2023-04-18 15:47:20
举报
文章被收录于专栏:ECS服务器

A lightweight open-source video cloud based on Nodejs, SRS, FFmpeg, WebRTC, etc.

Other more use scenarios is on the way, please read this post.

Architecture

The architecture of srs-cloud by mermaid

Note: It's a single node, also light-weighted, video cloud for tiny company, personal user and starter.

Note: This is an optional workflow for user to use aaPanel to deploy srs-cloud.

Ports

The ports allocated:

SRS

1935, 1985, 8080,8088, 1990, 554,8936

8000, 8935, 10080,1989

See SRS ports

platform

2024

-

Mount at /terraform/v1/mgmt/, /terraform/v1/hooks/, /terraform/v1/ffmpeg/ and /terraform/v1/tencent/

releases

2023

-

Mount at /terraform/v1/releases

mgmt

2022

-

Mount at /mgmt/ and /terraform/v1/mgmt/

node-exporter

9100

-

-

redis

56379

-

-

Note: Hooks(2021) has been migrated to platform(2024).

Note: FFmpeg(2019) has been migrated to platform(2024).

Note: TencentCloud(2020) has been migrated to platform(2024).

Features

The features that we're developing:

  •  A mgmt support authentication and automatic updates.
  •  Run SRS in docker, query status by docker and SRS API.
  •  Support publish by RTMP/WebRTC, play by RTMP/HTTP-FLV/HLS/WebRTC.
  •  SRS container use docker logs json-file and rotate for logging.
  •  Support high-resolution and realtime(200~500ms) live streaming by SRT.
  •  Run SRS hooks in docker, to callback by SRS server.
  •  Support publish by SRT, play by RTMP/HTTP-FLV/HLS/WebRTC/SRT.
  •  Support DVR to tencent cloud storage, see #1193.
  •  Change redis port and use randomly password.
  •  Support integrity with tencent cloud VoD.
  •  Forward stream to multiple platforms, see #2676.
  • Support WordPress Plugin or here.
  • Support Typecho Plugin.
  • Support aaPanel to install on any linux.
  • Support DVR to local disk.
  •  Support upgrade to latest version manually.
  •  Support HTTPS by let's encrypt with certbot.
  •  Support GB28181 by SRS 5.0 container.
  •  Support live streaming transcoding by FFmpeg, see #2869.
  •  Support virtual live streaming, covert file or other resource to live.
  •  Support WebRTC face to face chat, see #2857.
  •  Support WebRTC video chat room, see #2924.
  •  Support a set of tools for developer, see #2891.
  •  Collect logs of mgmt and containers together.
  •  Stop, restart and upgrade containers.
  •  Support logrotate to manage the logs.
  •  Enhance prometheus API with authentication.
  •  Integrate with prometheus and node-exporter.

APIs

Mgmt:

  • /terraform/v1/host/versions Public version api.
  • /terraform/v1/host/exec Exec command sync, response the stdout and stderr.
  • /terraform/v1/releases Version management for all components.

Platform:

  • /terraform/v1/mgmt/versions Public version api.
  • /terraform/v1/mgmt/init Whether mgmt initialized.
  • /terraform/v1/mgmt/check Check whether system is ok.
  • /terraform/v1/mgmt/token System auth with token.
  • /terraform/v1/mgmt/login System auth with password.
  • /terraform/v1/mgmt/status Query the version of mgmt.
  • /terraform/v1/mgmt/envs Query the envs of mgmt.
  • /terraform/v1/mgmt/containers Query and upgrade SRS container.
  • /terraform/v1/mgmt/bilibili Query the video information.
  • /terraform/v1/mgmt/beian/query Query the beian information.
  • /terraform/v1/mgmt/beian/update Update the beian information.
  • /terraform/v1/mgmt/secret/query Query the api secret for OpenAPI.
  • /terraform/v1/mgmt/secret/token Create token for OpenAPI.
  • /terraform/v1/mgmt/nginx/hls Update NGINX config, to enable HLS delivery.
  • /terraform/v1/mgmt/upgrade Upgrade the mgmt to latest version.

Also by platform module:

  • /terraform/v1/hooks/srs/verify Hooks: Verify the stream request URL of SRS.
  • /terraform/v1/hooks/srs/secret/query Hooks: Query the secret to generate stream URL.
  • /terraform/v1/hooks/srs/secret/update Hooks: Update the secret to generate stream URL.
  • /terraform/v1/hooks/srs/secret/disable Hooks: Disable the secret for authentication.
  • /terraform/v1/hooks/srs/hls Hooks: Handle the on_hls event.
  • /terraform/v1/hooks/record/query Hooks: Query the Record pattern.
  • /terraform/v1/hooks/record/apply Hooks: Apply the Record pattern.
  • /terraform/v1/hooks/record/remove Hooks: Remove the Record files.
  • /terraform/v1/hooks/record/files Hooks: List the Record files.
  • /terraform/v1/hooks/record/hls/:uuid.m3u8 Hooks: Generate HLS/m3u8 url to preview or download.
  • /terraform/v1/hooks/record/hls/:uuid/index.m3u8 Hooks: Serve HLS m3u8 files.
  • /terraform/v1/hooks/record/hls/:dir/:m3u8/:uuid.ts Hooks: Serve HLS ts files.
  • /terraform/v1/hooks/dvr/apply Hooks: Apply the DVR pattern.
  • /terraform/v1/hooks/dvr/query Hooks: Query the DVR pattern.
  • /terraform/v1/hooks/dvr/files Hooks: List the DVR files.
  • /terraform/v1/hooks/dvr/hls/:uuid.m3u8 Hooks: Generate HLS/m3u8 url to preview or download.
  • /terraform/v1/hooks/vod/query Hooks: Query the VoD pattern.
  • /terraform/v1/hooks/vod/apply Hooks: Apply the VoD pattern.
  • /terraform/v1/hooks/vod/files Hooks: List the VoD files.
  • /terraform/v1/hooks/vod/hls/:uuid.m3u8 Hooks: Generate HLS/m3u8 url to preview or download.
  • /terraform/v1/tencent/cam/secret Tencent: Setup the CAM SecretId and SecretKey.
  • /terraform/v1/ffmpeg/forward/secret FFmpeg: Setup the forward secret to live streaming platforms.
  • /terraform/v1/ffmpeg/forward/streams FFmpeg: Query the forwarding streams.

Market:

  • /api/ SRS: HTTP API of SRS media server.
  • /rtc/ SRS: HTTP API for WebERTC of SRS media server.
  • /*/*.(flv|m3u8|ts|aac|mp3) SRS: Media stream for HTTP-FLV, HLS, HTTP-TS, HTTP-AAC, HTTP-MP3.

Static Files:

  • /tools/ A set of H5 tools, like simple player, xgplayer, etc, serve by mgmt.
  • /console/ The SRS console, serve by mgmt.
  • /players/ The SRS player, serve by mgmt.
  • /mgmt/ The ui for mgmt, serve by mgmt.

Removed API:

  • /terraform/v1/mgmt/strategy Toggle the upgrade strategy.
  • /prometheus Prometheus: Time-series database and monitor.
  • /terraform/v1/mgmt/nginx/proxy Setup a reverse proxy location.
  • /terraform/v1/mgmt/dns/lb HTTP-DNS for hls load balance.
  • /terraform/v1/mgmt/dns/backend/update HTTP-DNS: Update the backend servers for hls load balance.
  • /terraform/v1/mgmt/nginx/homepage Setup the homepage redirection.
  • /terraform/v1/mgmt/window/query Query the upgrade time window.
  • /terraform/v1/mgmt/window/update Update the upgrade time window.
  • /.well-known/acme-challenge/ HTTPS verify mount for letsencrypt.
  • /terraform/v1/mgmt/ssl Config the system SSL config.
  • /terraform/v1/mgmt/letsencrypt Config the let's encrypt SSL.
  • /terraform/v1/mgmt/pubkey Update the access for platform administrator pubkey.

Depends

The software we depend on:

  • Docker, apt-get install -y docker.io
    • Redis, apt-get install -y redis
    • Nginx, apt-get install -y nginx
      • SSL: mgmt/containers/ssl
  • Certbot, docker --name certbot
    • Verify webroot: mgmt/containers/www/.well-known/acme-challenge/
    • Cert files: mgmt/containers/etc/letsencrypt/live/
  • SRS, docker --name srs-server
    • Config: mgmt/containers/conf/srs.conf mount as /usr/local/srs/conf/lighthouse.conf
    • Volume: mgmt/containers/objs/nginx/html mount as /usr/local/srs/objs/nginx/html
  • srs-hooks, docker --name srs-hooks
    • Volume: mgmt/containers/objs/nginx/html mount as /usr/local/mgmt/containers/objs/nginx/html
  • tencent-cloud, docker --name tencent-cloud
    • CAM Authentication by secretId and secretKey.
  • ffmpeg, docker --name ffmpeg

Environments

The optional environments defined by mgmt/.env:

  • MGMT_PASSWORD: The mgmt administrator password.
  • CLOUD: The cloud platform name, DEV for development.
  • REGION: ap-guangzhou|ap-singapore|sgp1, The region for upgrade source.
  • SOURCE: github|gitee, The source code for upgrading.
  • REGISTRY: docker.io|registry.cn-hangzhou.aliyuncs.com, The docker registry.
  • MGMT_LISTEN: The listen port for mgmt HTTP server. Default: 2022
  • PLATFORM_LISTEN: The listen port for platform HTTP server. Default: 2024
  • SRS_DOCKERIZED: true|false Indicates the OS is in docker.

For mgmt to start platform in docker, because it can't access redis which is started by platform:

  • PLATFORM_DOCKER: Whether run platform in docker. Default: true
  • MGMT_DOCKER: Whether run mgmt in docker. Default: false

For testing the specified service:

  • NODE_ENV: development|production, if development, use local redis; otherwise, use mgmt.srs.local in docker.
  • LOCAL_RELEASE: true|false, whether use local release service.

For github actions to control the containers:

  • SRS_DOCKER: srs to enfore use ossrs/srs docker image.
  • USE_DOCKER: true|false, if false, disable all docker containers.
  • SRS_UTEST: true|false, if true, running in utest mode.

For mgmt and containers to connect to redis:

  • REDIS_PASSWORD: The redis password.
  • REDIS_PORT: The redis port.

Environments for react ui:

  • PUBLIC_URL: The mount prefix.
  • BUILD_PATH: The output build path, default to build.
  • REACT_APP_LOCALE: The i18n config for ui, en or zh, default to zh.

Note: The env for react must start with REACT_APP_, please read this post.

Removed variables in .env:

  • SRS_PLATFORM_SECRET: The mgmt api secret for token generating and verifying.

Please restart service when .env changed.

Run All in One Docker

Run srs-cloud in one docker:

代码语言:javascript
复制
docker run --rm -it -p 2022:2022 -p 1935:1935/tcp -p 1985:1985/tcp \
  -p 8080:8080/tcp -p 8000:8000/udp -p 10080:10080/udp \
  ossrs/srs-cloud:platform-1

Then open http://localhost:2022/mgmt in browser.

All data will be reset when restarting, so please mount volumes if want to save data to local disk:

代码语言:javascript
复制
docker run --rm -it -p 2022:2022 -p 1935:1935/tcp -p 1985:1985/tcp \
  -p 8080:8080/tcp -p 8000:8000/udp -p 10080:10080/udp \
  -v $HOME/db:/data ossrs/srs-cloud:platform-1

The volumes for srs-cloud:

  • /data The global data directory.
    • redis The redis data directory, the publish secret and record configuration.
    • srs-cloud The data directory for srs-cloud
      • config The mgmt password and cloud configuration.
      • record The record storage directory, save record files.
      • vlive The storage directory for virtual live, save video files.

You can change the volumes to other directories.

Develop All in macOS

Start redis by brew:

代码语言:javascript
复制
brew services start redis

Start SRS in macOS:

代码语言:javascript
复制
(cd platform && ~/git/srs/trunk/objs/srs -c containers/conf/srs.release-local.conf)

Run the mgmt backend, or run in GoLand:

代码语言:javascript
复制
(cd mgmt && bash auto/init_global && PLATFORM_DOCKER=false go run .)

Run the platform backend, or run in GoLand:

代码语言:javascript
复制
(cd platform && go run .)

Run the platform react ui, or run in WebStorm:

代码语言:javascript
复制
(cd platform/ui && npm install && npm start)

Access the browser: http://localhost:3000

Develop All in One Docker

Run srs-cloud in a docker.

First, build image:

代码语言:javascript
复制
docker build -t platform-dev -f platform/Dockerfile.dev .

Then start the development docker:

代码语言:javascript
复制
docker run --rm -it -p 2022:2022 -p 2024:2024 --name platform \
  -v $(pwd):/usr/local/srs-cloud -v $HOME/db:/data \
  --add-host redis:127.0.0.1 --env REDIS_HOST=127.0.0.1 --add-host mgmt.srs.local:127.0.0.1 \
  --env CLOUD=DOCKER --env MGMT_DOCKER=true --env SRS_DOCKERIZED=true --env NODE_ENV=development \
  -p 1935:1935/tcp -p 1985:1985/tcp -p 8080:8080/tcp -p 8000:8000/udp -p 10080:10080/udp \
  platform-dev bash

Start redis and SRS only in docker:

代码语言:javascript
复制
bash auto/init_mgmt && bash auto/start_redis && bash auto/start_srs

Build and run mgmt only in docker:

代码语言:javascript
复制
cd /usr/local/srs-cloud/mgmt && make && ./mgmt

Build and run platform only in docker:

代码语言:javascript
复制
docker exec -it platform bash -c 'make && ./platform'

Stop redis and SRS:

代码语言:javascript
复制
docker exec -it platform bash -c 'bash auto/stop_redis && bash auto/stop_srs'

It's the same as production online.

Release

Release bugfix:

  • For mgmt: ./auto/mgmt_platform_pub.sh
  • Then test the specified version of mgmt.
  • Finally, run ./auto/releases_pub.sh if test ok.

Note: The features might need to be updated.

Release version for BT and aaPanel:

  • MUST update the version manually in auto/bt_aapanel_pub.sh, scripts/setup-bt/info.json and scripts/setup-aapanel/info.json
  • Then run ./auto/bt_aapanel_pub.sh
  • Finally, download bt-srs_cloud.zip then submit to bt.cn

Note: The BT forum and FAQ might need to be updated.

To refresh current tag for mgmt:

  • Run ./scripts/refresh-current-tag.sh

Note: It does not update the tag for release.

Deprecated

Release stable version:

  • MUST update the stable version manually in releases/version.go
  • Then run ./auto/releases_pub.sh

Note: We disable the upgrade feature, so should never update the stable version.

2022.11

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Architecture
  • Ports
  • Features
  • APIs
  • Depends
  • Environments
  • Run All in One Docker
  • Develop All in macOS
  • Develop All in One Docker
  • Release
  • Deprecated
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档