一、概述
流媒体服务器,主要用于推拉流,适用于直播场景。
常用协议
- RTMP(Real Time Messaging Protocol),实时消息传送协议。为Adobe公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议,长连接TCP,延迟在3s以内。
- RTSP(Real Time Streaming Protocol),实时流协议,一般用于安防领域,延迟更低在500ms以内。
- HLS(HTTP Live Streaming),由苹果公司提出的基于HTTP的流媒体网络传输协议。整个流包含一个m3u8文件的playlist,分成一个个小的基于HTTP的文件来下载。延迟一般在3个切片长度,适用于h5播放。
- DASH(Dynamic Adaptive Streaming over HTTP,全称MPEG-DASH),基于HTTP的动态自适应流,使高质量流媒体可以通过传统的HTTP网络服务器以互联网传递。目前B站在使用。
- WebRTC(Web Real-Time Communication),网页即时通信,是一个开源的支持网页进行实时语音对话或视频对话的API,可以提供超低延迟直播技术。
市面上流媒体服务器不少,主流的有以下这些:
- FMS(Adobe Flash Media Server),Adobe出品,大名鼎鼎,商用收费。
- wowza,『官网』,同样收费。
- Red5,『官网』,开源基本版本,提供了Red5Pro收费版。
- SRS,国人开源,『官网』,良心支持一波。
- Nginx-rtmp,『github传送门』轻量级nginx插件,配合nginx使用。
- LiveGo,『github传送门』,纯 Go 写的直播服务器。
- 市面各种云平台的直播产品,例如阿里云、腾讯云、七牛云、金山云等。
二、Nginx-rtmp
Nginx本身不提供rtmp的流媒体服务器支持,由插件『nginx-rtmp』来实现。nginx-rtmp提供rtmp流的直播,包括对HLS、DASH的支持。
本身安装可以参考nginx添加模块的方式进行编译,也可使用docker商店中的『nginx-rtmp的docker镜像』。
1 | $ docker run -it -p 1935:1935 -p 8090:80 --rm alfg/nginx-rtmp |
可以使用ffmpeg往流媒体服务器上推流,命令如下:
1 | # stream为发布点,在nginx的conf中做配置。stream为该docker镜像默认发布点。test为流名称,可任意。 |
查看流,可通过rtmp或http协议,使用ffplay来播放。
1 | $ ffplay -fflags nobuffer rtmp://localhost:1935/stream/test |
nginx支持rtmp和hls的相关配置如下:
1 | #使用rtmp模块 |
三、SRS
国人开源软件『github地址』。
SRS定位是运营级的互联网直播服务器集群,支持feature:
- 支持origin和edge集群推流,默认使用RTMP协议
- RTMP转封装,remuxing成HTTP-FLV、HLS、DASH
- 集成FFMPEG采集流
- 集成nginx发布HLS
- 支持DVR录制和截图
- http回调API
- VHOST虚拟服务器
- 并发10K
- 控制台
Docker安装
可使用docker商店中的『srs的docker镜像』。
1 | $ docker run -p 1935:1935 -p 1985:1985 -p 8080:8080 \ |
Linux安装(不支持Windows)
1 | $ git clone https://gitee.com/winlinvip/srs.oschina.git srs && cd srs/trunk && git remote set-url origin https://github.com/ossrs/srs.git && git pull |
常见配置文件
1 | # 通用配置 |
测试
1 | #本地推流 |
四、开源直播搭建
app端开源
- iOS端推流『LMLiveStreaming』
- Aandroid端推流『yasea』
- 拉流播放器『ijkplayer』,同时支持iOS和Android
直播常见问题
1、1M带宽到底能承受多少直播拉、推流?
服务器:带宽=码率*观看人数
50M服务器带宽,对于1M码率的直播,支持50个客户端观看。
2、带宽不够怎么办?
方法1:更高压缩率 h265 / vp9。
方法2:srs集群,推流推到origin,拉流从edge走,origin和edge之间走内网。
方法3:CDN
五、常用软件
在FFmpeg流媒体开发过程中,有以下常用的开源软件。
VLC播放器
『VLC官网』 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及DVD音频 CD、VCD及各类流媒体协议。Windows、OS X、Linux、Android、iOS等全平台支持。
看了这个介绍,还有什么理由不用呢?
OBS
『OBS官网』,开源,同样是神器,市面上大部分的直播推流客户端,都是基于obs二次开发而来,甚至是直接用obs。同时支持Windows、OS X、Linux平台。
obs页面
直播时建议勾选自动录像
直播推流,如有密钥需单独设置
输出设置,根据网络带宽、卡顿情况来设定
输出的高级模式,以减少直播延迟的设置