1.简介
前面讲了SRT有三种模式,那么这节来说说Listener模式服务端的搭建。关于Listener模式之前在sample中的srt-file-transmit和srt-live-transmit就有简单用到,本章的Listener模式服务端,考虑到实际生产使用,就采用开源项目srs进行搭建。
SRS_4">2.下载SRS源码
https://github.com/ossrs/srs.git
3.编译源码
cd srs/trunk
./configure --srt=on
make
make install
SRS_17">4.编写SRS配置文件
将以下内容保存为文件,譬如conf/srt.conf
,服务器启动时指定该配置文件(srs的conf文件夹有该文件)。
# conf/srt.conf
listen 1935;
max_connections 1000;
daemon off;
srs_log_tank console;
srt_server {
enabled on;
listen 10080;
}
vhost __defaultVhost__ {
}
SRS_35">5.启动SRS
./objs/srs -c conf/srt.conf
6.推流测试
1.借助FFMPEG产生一个UDP流,当然有其他方式也行:
ffmpeg -stream_loop -1 -re -i /home/msatartup.mp3 -f mpegts udp://127.0.0.1:12001?pkt_size=1316
2.采用srt-live-transmit工具作为caller方进行推流
srt-live-transmit udp://127.0.0.1:12001 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish'
3.采用srt-ffplay工具作为caller方进行推流
srt-ffplay 'srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request'
SRSSRTURL_61">7.SRS对SRT的URL的格式要求
因为srt是四层传输协议,所以无法确定对某个srt url操作是推流还是拉流。
在srt官网中有对推/拉流实现方法的推荐:AccessControl.md 关键方法是通过streamid参数来明确url的作用,streamid的格式符合YAML格式。
7.1.SRT URL no Vhost
srt url举例:
- 推流地址:
srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish
- 拉流地址:
srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=request
- 对应的rtmp拉流地址为:
rtmp://127.0.0.1/live/livestream
其中:
- #!::
- 开始标记,符合yaml格式标准
- r
- 映射到rtmp地址中的/app/stream;
- m
- publish表示推流。
- request表示拉流。
7.2.SRT URL for Vhost
srt url举例:
- 推流地址:
srt://127.0.0.1:10080?streamid=#!::h=srs.srt.com.cn,r=live/livestream,m=publish
- 拉流地址:
srt://127.0.0.1:10080?streamid=#!::h=srs.srt.com.cn,r=live/livestream,m=request
- 对应的rtmp拉流地址为:
rtmp://127.0.0.1/live/livestream?vhost=srs.srt.com.cn
其中:
-
h
- 映射到rtmp地址中的vhost;
8.问题
前面我们知道SRT在网络传输层运行,它可以传输任何类型的视频格式、编解码器、分辨率或帧速率。
但目前的SRS/4.0.265发布版本,在接收到SRT推流时,会将流自动转换为RTMP协议输出,导致对音视频编码格式有了要求,使用起来十分不方便。好在使用最新的SRT开发版本,已经在着手解决该问题。另外,也可以通过修改SRS的源码,暂时关闭SRS到RTMP的输出功能;