如何搭建在线视频流媒体服务云直播
搭建在线视频流媒体服务
📖 目前,视频无疑是内容传播的主流推荐,音视频的直播更是各大项目客户的需求重点,但是大部分的摄像监控厂家提供的云直播免费版本都有 3 路并发的要求,要想提升并发路数需要充值会员,客户很难接受啊。在这种背景之下,能够兼容各种 RTSP、RTMP、GB28181 的视频流媒体服务器软件是个刚需,本文选用了 SRS(Simple RTMP Server)与 Oryx 来应对。
SRS / Oryx
简介
SRS(Simple RTMP Server)是一款开源的视频流媒体服务器软件,主要支持RTMP协议,也支持HLS、HDS等其他流媒体传输协议。
Oryx 是一个基于Go、Reactjs、SRS、FFmpeg、WebRTC等的轻量级、开源的视频云解决方案。
主要特点
- 高性能:SRS设计上追求高并发性能,可以处理大量的并发连接。
- 多功能性:除了基本的RTMP推拉流功能外,还支持转码、录制、转发、边缘节点等功能。
- 易于使用:安装配置过程简单,文档齐全,适合快速上手。
- 可扩展性强:支持插件化架构,可以根据需求定制功能。
- 开源免费:基于MIT许可发布,用户可以自由地修改和分发代码(博主选择的主要原因 😄)。
支持的协议
- RTMP (Real Time Messaging Protocol):这是最常用的流媒体传输协议之一,特别适用于直播场景。RTMP协议可以实现实时音视频数据的传输,广泛应用于Flash播放器中。
- RTMPS:RTMP over SSL/TLS,用于加密RTMP数据流,提供更安全的数据传输。
- HTTP-FLV:通过HTTP协议传输FLV格式的视频流,适用于不支持RTMP协议的浏览器或移动设备。
- HLS (HTTP Live Streaming):Apple公司提出的一种基于HTTP的流媒体传输协议,支持按需和直播两种模式,适合iOS和大多数现代浏览器。
- DASH (Dynamic Adaptive Streaming over HTTP):一种自适应比特率流媒体技术,通过HTTP协议传输,能够根据网络状况动态调整视频质量。
- WebRTC (Web Real-Time Communication):虽然SRS本身不直接支持WebRTC,但可以通过插件或外部转码工具实现WebRTC的支持,提供低延迟的音视频通信。
- RTSP (Real Time Streaming Protocol):一种控制多媒体流的网络协议,常用于IP摄像头等设备的视频流传输。
- HDS (HTTP Dynamic Streaming):Adobe Systems推出的一种基于HTTP的流媒体技术,类似于HLS,主要用于Adobe Flash Player和Adobe AIR应用程序。
- SRT (Secure Reliable Transport):一种开放源代码的传输层协议,专为低延迟的实时视频传输设计,特别是在不可靠网络条件下表现良好。
安装
建议阅读 SRS 。在阅读完成后,我明白我想要的并不是一个简单的流媒体服务器,而是应该对外提供一个在线视频流媒体服务。Oryx(SRS Stack)是一个基于Go、Reactjs、SRS、FFmpeg、WebRTC等的轻量级、开源的视频云解决方案。下面介绍 Oryx 的安装过程。
比较Oryx和SRS时,两者都提供相似级别的媒体流功能。然而,Oryx为终端用户提供了更强大且功能丰富的体验, 无需编写任何代码。用户可以直接使用Oryx满足您的媒体服务需求。
比较 | Oryx | SRS | 说明 |
---|---|---|---|
许可证 | MIT | MIT | SRS是MIT,而Oryx是MIT。 |
直播流 | Yes | Yes | 两者都支持RTMP,HLS和HTTP-FLV协议。 |
WebRTC | Yes | Yes | 两者都支持WebRTC。 |
Auto HTTPS | Yes | No | Oryx自动申请和更新HTTPS证书. |
控制台 | 增强 | HTTP API | Oryx提供了更强大的控制台。 |
身份验证 | Yes | HTTP回调 | Oryx具有内置身份验证,而SRS使用回调。 |
DVR | 增强 | 基于文件 | Oryx支持将DVR存储到文件和云存储。 |
转发 | 增强 | 基本 | Oryx可以通过各种协议转发到多个平台。 |
虚拟直播 | Yes | No | Oryx提供了先进的虚拟直播功能。 |
WordPress | Yes | No | Oryx提供了WordPress插件和操作指南。 |
转码 | Yes | No | Oryx提供了直播转码的能力。 |
AI字幕 | Yes | No | 自动识别直播语音并转为字幕,叠加到视频 |
直播间 | Yes | No | 直播间的鉴权和业务功能 |
视频翻译 | Yes | No | 支持点播视频多语言翻译 |
官网推荐 Ubuntu 20 系统,我以 MacOS 作为测试。
推荐使用 Docker运行 Oryx
# 下载 Oryx Docker Image
docker pull registry.cn-hangzhou.aliyuncs.com/ossrs/oryx:5
# 运行 Oryx![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c71c36e96ee3495cb0a21370e3e39bdd.png#pic_center)
docker run \
--restart always \
-d -it --name oryx \
-v $HOME/data:/data \
-p 80:2022 \
-p 443:2443 \
-p 1935:1935 \
-p 8000:8000/udp \
-p 10080:10080/udp \
registry.cn-hangzhou.aliyuncs.com/ossrs/oryx:5
查看 http://localhost
首次登录调整文中文,需要设置密码
我已经安装了 FFmpeg,在推拉流中可以看到操作步骤,用它推流到 Oryx,然后我们再从网页查看
结果出现 no matches found: rtmp://localhost/live/livestream?secret=0e8e7261d118480195ea05ec48206add 首次尝试失败
后尝试
ffmpeg -re -i source.flv -c copy -f flv rtmp://localhost/live/ecgedf\?secret\=0e8e7261d118480195ea05ec48206add
成功了,用 VLC 播放 flv 或者 m3u8
问题原来在 ? = 这些特殊字符,在 MacOS 中需要转义,茅塞顿开。
初步目标达成,接收 rtmp 推流转成 flv 或 m3u8 后续在具体项目中使用。
阅读原文