SRS官方文档和学习路径
文章目录
【注意】最后更新于 June 6, 2021,文中内容可能已过时,请谨慎使用。
- 文章路径
http://localhost:1313/post/2020/01_srs/
卡片
SRS4.0官方文档和学习路径
https://mp.weixin.qq.com/s/AZhSQbCMBlaZv-0-myc1zg
Introduction
Problem
solucction
https://gitee.com/ossrs/srs/wikis/v4_CN_Home
https://hub.fastgit.org/ossrs/srs
第一天:快速预览
环境:2g+Ubuntu
- 在vpn环境完成搭建(docker安装不上)
|
|
- 本地obs/FFMEG
|
|
- VLC观看
|
|
4.0
|
|
基础知识补充:视音频数据处理入门 雷霄骅
音视频协议:RTMP,HTTP-FLV,HLS和WebRTC
视音频数据处理入门:RGB、YUV像素数据处理 视音频数据处理入门:PCM音频采样数据处理 视音频数据处理入门:H.264视频码流解析 视音频数据处理入门:AAC音频码流解析 视音频数据处理入门:FLV封装格式解析 视音频数据处理入门:UDP-RTP协议解析
-
Flash Video is a container file format used to deliver digital video content
https://blog.csdn.net/leixiaohua1020/article/details/50535082?spm=1001.2014.3001.5501
第一天 FQA
问题:协议rtmp怎么传输数据的呀?
- 这个是谁产生的呀?摄像头吗?,ffmpeg? obs 经过编解码了吗
第二天(6.1) 深入场景 主要了解功能
资料:https://gitee.com/ossrs/srs/wikis/v4_CN_Home#srs-overview
https://gitee.com/ossrs/srs/wikis/v4_CN_Home#solution-guides
资料:【免费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
- SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181
通过下面图片看到 相关知识框架
阅读:SRS支持SRT的详细步骤。 https://gitee.com/ossrs/srs/wikis/v4_CN_SampleSRT
阅读:视频播放器原理 https://www.cnblogs.com/linuxAndMcu/p/12038740.html
解协议的作用 —->解封装的作用 —解码的作用
- FLV 格式的数据,经过解封装操作后,输出 H.264 编码的视频码流和 AAC 编码的音频码流
note: 问题:推流srs单点故障怎么办?阅读
Cluster: Origin Cluster for Fault Tolarence and Load Balance, 源站热备和负载均衡集群 #464
https://github.com/ossrs/srs/issues/938
https://github.com/ossrs/srs/issues/1607#issuecomment-586543387
https://gitee.com/ossrs/srs/wikis/v4_CN_OriginCluster
Origin Cluster设计目标是<5k个流以内的集群,或者用于少量流的容灾。若需要100k流级别,请参考 #1607 (comment)
Origin Cluster设计目标是<5k个流以内的集群,或者用于少量流的容灾。若需要100k流级别,请参考 #1607 (comment)
这个方案中,每个源站互相访问,这意味着每个源站都是一个独立的服务。由于每个源站都需要对Edge提供服务,或者说源站需要被访问,每个源站都需要有个服务地址。有两种方式:
- 无状态源站集群:1~3个源站,每个源站需要单独创建Deployment和Service。好处就是它是无状态,不用互相关联,稳定性会比较高。
- 有状态源站集群:3~30个源站,只需要创建一个StatefulSets和Service。好处就是配置简单,坏处是有状态比较复杂,创建后只能更新Replicas、Template、UpdateStrategy等几个字段。
以上两种情况,这都需要源站配置
coworkers
,和边缘配置origin
时,配置上所有的源站的地址。
无状态源站集群(Deployment)
适用于极少的流,比如<100个流,1~3个源站。
SRS的源站集群本身是有状态的,也就是请求某个流必须在某个服务器上,而不是可以随便在一个服务器就能拉到流。我们也不能将多个源站挂在SLB后面,播放某个流时SLB会随机选择一台源站,所以可能会到错误的源站上去,或者说流的状态和流的数据是在某个源站上的,并非无状态。
那么我们这里说的无状态源站集群,是源站集群以Deployment(无状态应用)方式部署。由于每个源站都需要一个独立的Deployment,每个Deployment只有一个Replicas,每个Deployment对应的Service(ClusterIP)也有独立的名称,实际上就相当于SLB后面只挂了一个源站,比如:
源站 | Deployment | Service | 域名 |
---|---|---|---|
Origin Server 0 | origin-0-deploy | origin-0-service | origin-0-service |
Origin Server 1 | origin-1-deploy | origin-1-service | origin-1-service |
Origin Server 2 | origin-2-deploy | origin-2-service | origin-2-service |
Origin Server N | origin-N-deploy | origin-N-service | origin-N-service |
Note:无状态集群的部署实例,参考Wiki。
每个源站创建一个独立的Deployment,Replicas为1,创建对应的Service类型为ClusterIP。这种方案比较麻烦,不过迁移到OCM( #1607 )时会比较方便,源站使用的是service-name,而不是pod-name.service-name方式彼此寻址。
https://github.com/ossrs/srs/wiki/v4_CN_K8s#build-srs-origin-cluster-as-deployment
有状态源站集群(StatefullSet)
适用于一定数量的流,比如<5k个流,5~30个之内的源站。
在K8s中,每个源站都需要响应的Service,可选择StatefulSets,用HeadlessService给让每个源站Pod具备寻址能力。比如:
源站 | StatefulSet | Service | 域名 |
---|---|---|---|
Origin Server 0 | origin | service | origin-0.service |
Origin Server 1 | origin | service | origin-1.service |
Origin Server 2 | origin | service | origin-2.service |
Origin Server N | origin | service | origin-N.service |
Note:有状态集群的部署实例,参考Wiki。
只需要创建一个StatefulSets和一个Service,Replicas设置为源站的数目。
源站配置为coworkers: origin-0.service origin-1.service origin-2.service;
边缘配置为所有源站,或部分源站:origin origin-0.service origin-1.service origin-2.service;
可以看到确实会比较繁琐,而且新增源站时需要更新其他源站配置,以及边缘的配置,这个方案在30个以内的源站节点是适用的
【这个kafa的配置,redis集群配置类似呀】‘
源站集群支持<5k路流方案,参考:#464 (comment)
源站集群支持<100k路流方案,参考:#1607 (comment)
关于源站集群中,源站的服务地址定义问题,参考:#1501 (comment)
关于源站集群中,多节点源站轮询问题,参考:#1501 (comment)
关于源站集群的存储问题,参考:#1595 (comment)
关于源站集群的API问题,参考:#1607 (comment)
https://github.com/ossrs/srs/wiki/v4_CN_K8s#srs-origin-cluster-for-a-large-number-of-streams
https://github.com/ossrs/srs/issues/1607:
https://github.com/ossrs/srs/wiki/v3_EN_SampleOriginCluster
源站集群主要解决大量推流的情况
https://github.com/ossrs/srs/wiki/v3_CN_OriginCluster
推荐在源站集群前面挂一系列的Edge服务器,参考这里,Edge服务器可以转换协议,支持RTMP和HTTP-FLV,同时支持源站故障时自动切换,不中断客户端。
- 目前源站集群(Origin Cluster)方案中,流的状态是靠源站之间互相访问获知,源站地址是通过配置在配置文件中的,扩容时需要更新这个状态
SrsRtmpConn::playing
https://github.com/ossrs/srs/wiki/v3_EN_OriginCluster
|
|
-
HA(High Availability 高可用方案):这个是为了解决 NameNode 单点问题;
两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务;
-
直播链路跟踪
note:阅读:开源流媒体服务器SRS学习笔记(4) - Cluster集群方案
https://www.cnblogs.com/yjmyzz/p/srs_study_4_cluster.html
- 这个文章主要利用 http://www.haproxy.org/ 特点。
Cluster Guides
-
Origin Cluster: 如何支持源站集群,扩展源站能力。
-
Edge Cluster: RTMP: 如何部署RTMP分发集群,譬如CDN支持RTMP分发。
-
Edge Cluster: FLV: 如何部署HTTP-FLV分发集群,譬如CDN支持HTTP-FLV分发。
-
VHOST: 如何一个集群支持多个用户,即Vhost。
-
Reload: 如何不中断服务的前提下应用新的配置,即Reload。
-
Tracable Log: 如何在集群中追溯错误和日志,基于连接的日志,排错日志。
-
Log Rotate: 如何切割服务器的日志,然后压缩或者清理。
-
K8s: 如何使用ACK(阿里云容器服务Kubernetes版)部署SRS集群。
6-9
https://github.com/ossrs/srs/issues/1575
https://github.com/ossrs/srs/issues/1607#issuecomment-586543387
第三天
SRS之启用webrtc播放
todo 跟踪issue去学习
- https://github.com/ossrs/srs/issues/2449 SRS webrtc 播放出现灰屏现象 #2449
webrtc不支持B帧,看看是不是这个原因。#2439 (comment)
您好,通过 ffmpeg 推 RTMP 时已经去除了 B 帧
https://github.com/ossrs/srs/issues/2439
- “设置”-> “输出” -> 高级 -> profile 选"baseline", webrtc不支持B帧
H.264有四种画质级别,分别是baseline, extended, main, high:
1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
从压缩比例来说,baseline< main < high ,对于带宽比较局限的在线视频,可能会选择high,
-
1
ffmpeg -i input.mp4 -c:v libx264 -preset fast -profile:v baseline out.mov
|
|
推送
1、首先分析RTMP连接
|
|
第二部分:参与开发
资料搜集
-
AvStackDocs-master
动手
task1
https://blog.csdn.net/m0_56595685/article/details/122594797
FFmpeg播放WebRTC的流,全开源的方案来了,没有二进制库和私有协议,全都是开源代码和公开的协议,欢迎一起来搞metaRTC。
todo02:AvStackDocs-master
|
|
https://github.com/ossrs/srs/issues/2856
https://github.com/ossrs/srs/issues/2891
SRS云服务器是nodejs实现的开源方案,代码在srs-cloud,欢迎一起来搞。
SRS云服务器面向鼠标编程,让每个人都能做音视频业务,不懂音视频的可以,懂音视频的也可以,种地的可以,撸网线的可以,剪电影的可以,背摄像机的也可以,跳舞的可以,唱歌的可以,会用电脑有微信就可以,守法公民都可以。
LightHouse是腾讯云的轻量服务器(云服务器),一键就可以购买内置了SRS服务器的云服务器,而且带外网IP可以直接访问。 使用说明,请参考视频内置SRS的云服务器。
https://github.com/ossrs/srs-cloud
https://github.com/ossrs/srs-cloud
https://github.com/ossrs/srs-cloud
A lightweight open-source video cloud based on Nodejs, SRS, FFmpeg, WebRTC, etc.
Depends
|
|
Develop
|
|