SRS是什么
SRS(Simple Realtime Server), 是一种专门处理音视频的服务器. 是一个由社区驱动的开源项目. 官网在这里
本文提到的所有的问题都是根据官网的操作所产生的的问题和一些记录. 新手教程
怎么使用
SRS
直观的感受, 是学习的第一动力. 先利用docker 在本地跑起来一个srs, 尝试推流, 尝试拉流, 观看效果.
在本地测试失败, 遇到报错
按照教程, 启动的时候没有问题;
但是在推流的时候失败, 详情如下:
[tcp @ 0x38b7580] Failed to resolve hostname host.docker.internal: Name or service not known
[rtmp @ 0x37f3740] Cannot open connection tcp://host.docker.internal:1935
rtmp://host.docker.internal/live/livestream: Input/output error
推流的时候将rtmp://host.docker.internal/live/livestream
改为rtmp://192.168.8.33/live/livestream
, 即改成本机IP. 推流就成功了.
必须指出的是, 如果用 localhost 而不是 192.168.8.33 会出错, 可能是docker 不能使用localhost(猜测).
使用浏览器无法播放, 浏览器会自动下载无法打开的文件, *.flv
我们需要打开
http://192.168.8.33:8080/players/srs_player.html
页面, 在这个页面选择srs就可以播放了.
一个问题
使用RTC播放器的时候会黑屏.
肯定有问题, 因为我启动的时候, 启动的不是WebRTC. 也没有用WebRTC推流. 使用WebRTC需要用到https, 这个需要一个证书, 暂时先跳过.
跳过本地的WebRTC
直接开始云srs
云SRS
部署一个云SRS, 跟随教程来.
- 在云厂商购买一个轻量应用服务器(选择srs镜像)
- 在轻量应用服务器上设置应用的后台密码(推流要用秘钥的)
Note: 进入腾讯云控制台, 选择对应实例, 选择应用管理页面, 可以看到如何查看后台管理密码, 以及开放对应的端口.
- 开放对应的端口(在实例页面选择进入防火墙页面)
记录一下情况.
- 使用ffmpeg 正常推流, 没有问题.
- 使用OBS因为视频(显示器)问题, 未能推流.
- WebRTC, 项目中可能主要是使用这个, 它是谷歌的, 可靠, 应用领域广. 使用WebRTC必须使用https, 需要自签证书或者申请一个证书
购买域名
在腾讯云官网上, 进入控制台, 在找到云产品, 搜索域名注册即可.
域名注册完成之后, 在域名页面, 可以免费申请ssl证书.
但是, 留下几个疑问:
- 如何拥有子域名? [没有所谓的子域名? 域名之间没有实际的父子关系, 就像Java的包结构一样. 所以, 子域名需要重新注册一个]
- 域名如何更改绑定实例? [进入域名页面, 选择域名实例, 然后在概览里面选择解析, 然后选择不同的解析对应不同的实例即可.]
- ssl证书的应用.[在证书页面选择证书实例, 有个一键部署证书, 也有一个手动部署证书.]
- 为什么一键部署证书的时候, 不能部署到我的博客实例? [是因为这个实例没有安装nginx 等Web服务器, 被自动过滤了?]
到此为止, 云srs部署就成功, WebRTC 推流和播放都正常.
核心协议
一些编码, 切片, 推流, 解码的协议.
RTMP
回顾一下, RTMP服务 的端口是1935.
srs 官网上并没有解释什么是RTMP, 以及ssr是如何支持RTMP的.(里面有的是下载源码, 编译, 然后如何用支持RTMP协议的工具推流.)
RTMP需要专门搜索, 了解.
RTMP(Real Time Message Protocol), 是一个实时传输信息的协议. Just Only a protocol.
Adobe公司推出, 一个应用于Vedio & Audio 的编码协议.
WebRTC
WebRTC(Web Real Time Communications), Web 实时会话. 我学习srs的初衷是想在项目中引入音视频能力, 而webrtc 从技术上看就是两个或者多个客户端互动, 所以, 这将是主要学习的地方.