泛娱乐化直播:大规模直播(没有互动),多为观看,可以使用该架构。支持rtmp、hls、http/flv
实时互动直播:使用了RTP协议,与目前的学习协议不同;常用webrtc
1.主播端发送信令到信令服务器,创建房间,返回房间地址 。
2.主播向获取的房间地址推流
3.也是主播端,同1,只是协议不同
4.同2
5.观众端要观看节目,也需要发送信令给信令服务器。获取到主播节目的媒体流的地址。
6.观众端获取了主播节目流地址,就可以去流媒体云中去拉流。赞赏、聊天,发送给信令服务器处理。
左互动(内部用户互动)
右收听(提供大规模用户直播架构)
1.使用Nginx搭建本地流媒体服务器
2.通过SRS搭建RTMP server;实现流媒体服务器网络集群
3.CDN网络(现成的,商业化的),自己会扩容
tar -xvf nginx-1.19.10.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module
make -j 4
sudo make install
#rtmp服务 rtmp { server { #指定服务端口 listen 1935; chunk_size 4000; #RTMP协议中需要 #指定流应用:名称自定义 application mytv { live on; #直播 allow play all; #允许直接进行播放 } } }
sudo ./sbin/nginx -c conf/nginx.conf
ffplay rtmp://localhost/mytv/room01 #mytv是起的流应用名称;room01是自定义频道
ffmpeg -i rtmp://localhost/mytv/room01 -c copy out2.flv
ffmpeg -re -i ./out.flv -c copy -f flv rtmp://localhost/mytv/room01
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 checkout 3.0release && git pull
./configure --prefix=/usr/local/srs
make -j 4
sudo make install
conf:存放配置信息,比如srs.conf、origin.cluster.edge.conf边缘结点配置
etc:存放脚本(可以设置自动启动)
objs:编译好的程序,也有日志
# main config for srs. # @see full.conf for detail config. listen 1935; #侦听端口 max_connections 1000; #支持最大连接数 srs_log_tank file; #日志输出形式 srs_log_file ./objs/srs.log; #日志存放位置 daemon on; http_api { enabled on; listen 1985; } http_server { enabled on; listen 8080; dir ./objs/nginx/html; } stats { network 0; disk sda sdb xvda xvdb; } vhost __defaultVhost__ { hls { enabled on; } http_remux { enabled on; mount [vhost]/[app]/[stream].flv; } }
# the config for srs origin-edge cluster # @see https://github.com/ossrs/srs/wiki/v1_CN_Edge # @see full.conf for detail config. listen 1935; max_connections 1000; pid objs/edge.pid; vhost __defaultVhost__ { cluster { mode remote; origin 127.0.0.1:19350; #配置源站信息 } }
./objs/srs -c conf/srs.conf
标准RTMP URL指的是最大兼容的RTMP URL,基本上所有的服务器和播放器都能识别的URL,和HTTP URL其实很相似,例如:
HTTP | Schema | Host | Port | App | Stream |
---|---|---|---|---|---|
http://192.168.1.10:80/players/srs_player.html | http | 192.168.1.10 | 80 | players | srs_player.html |
rtmp://192.168.1.10:1935/live/livestream | rtmp | 192.168.1.10 | 1935 | live | livestream |
其中:
RTMP的Vhost和HTTP的Vhost概念是一样的:虚拟主机。详见下表(假设域名demo.srs.com被解析到IP为192.168.1.10的服务器):
HTTP | Host | Port | Vhost |
---|---|---|---|
http://demo.srs.com:80/players/srs_player.html | 192.168.1.10 | 80 | demo.srs.com |
rtmp://demo.srs.com:1935/live/livestream | 192.168.1.10 | 1935 | demo.srs.com |
Vhost主要的作用是:
listen 1935; vhost show.cctv.cn { chunk_size 128; } vhost show.wasu.cn { chunk_size 4906; }
sudo ./objs/srs -c conf/origin.conf sudo ./objs/srs -c conf/edge.conf sudo ./objs/srs -c conf/edge2.conf
ffmpeg -re -i ./out.flv -c copy -f flv rtmp://127.0.0.1:1935/mytv/room01
ffplay rtmp://127.0.0.1:1936/mytv/room01
原文:https://www.cnblogs.com/ssyfj/p/14684510.html