当我在使用srs服务进行rtmp格式推流的过程中曾遇到流老是推着推着出现服务自动中断的情况,经过排除发现srs服务的空闲间隔时间只有5000ms,新版好像是7000ms。然而我有时候处理帧数据会等待过长导致下一帧推出去的时候服务已经自动断开连接了,这时候查看srs服务会发现如下错误:
service cycle : rtmp: stream service : rtmp: publish timeout 5000ms, nb_msgs=705
因此我将srs服务的空闲间隔时间给配置到相对较长问题得到解决。我使用的是docker,文件结果如下:
-srs
--conf
---srs.conf
--Dockerfile
srs.conf配置内容:
# main config for srs.
# @see full.conf for detail config.
listen 1935;
max_connections 1000;
srs_log_tank console;
daemon off;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
https {
enabled on;
listen 8088;
key ./conf/server.key;
cert ./conf/server.crt;
}
}
http_api {
enabled on;
listen 1985;
https {
enabled on;
listen 1990;
key ./conf/server.key;
cert ./conf/server.crt;
}
}
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
stats {
network 0;
disk sda sdb xvda xvdb;
}
vhost __defaultVhost__ {
publish {
firstpkt_timeout 600000;
normal_timeout 600000;
}
rtc {
enabled on;
# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtmp-to-rtc
rtmp_to_rtc on;
# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtc-to-rtmp
rtc_to_rtmp on;
}
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
}
Dockerfile中需要将配置文件拷贝进去,也可以目录映射到容器内,我是将配置拷贝到容器:
COPY conf/srs.conf /usr/local/srs/conf/docker.conf
接下来是将配置应用到服务,可以在docker-compose.yml中如下操作:
srs:
build:
context: srs
networks:
- netforyou
restart: always
ports:
- ${SRS_PUSUER_PORT}:1935
- ${SRS_OUT_PORT}:8080
command: /usr/local/srs/objs/srs -c /usr/local/srs/conf/docker.conf
至此就完成整个配置修改的过程。