帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
SRS视频媒体服务器-docker启动:更换默认端口时的错误
发布时间:2024-03-03 03:23:45   分类:帮助文档
SRS视频媒体服务器-docker启动:更换默认端口时的错误

一、概述
在使用srs视频服务器时,一直都是使用默认的端口配置。但是,这些默认端口在某些时候可能已经被占用了,就需要更改端口了。
注意注意注意:使用docker启动srs,在更换端口一定要下面的内容。

二、使用docker启动srs,换端口时错误的方式
网络拓扑图:

 

启动命令:外部端口1936映射内部1935  和 外部端口8001映射内部8000端口
docker run -it --name srs4.0-test --restart=always -v C:\5G\5GApi\static\DVR-video:/usr/local/srs/static/DVR-video -p 1936:1935 -p 1985:1985 -p 8080:8080 -p 10080:10080/udp -p 8001:8000/udp registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/rtmp2rtc.conf

修改rtmp2rtc.conf配置文件:
1、给容器安装vim

#查看运行的docker docker ps
#新开一个终端进入docker容器 docker exec -it srs4.0-test /bin/bash
#先更新apt-get apt-get update
#安装vim apt-get install vim -y

2、配置容器可以访问宿主机的域名

进入下面的目录: C:\Windows\System32\drivers\etc
修改hosts文件:添加 127.0.0.1  host.docker.internal
#就可以在容器中通过  http://host.docker.internal:8888 访问到宿主机上部署的服务了

3、修改srs的配置文件
docker exec -it srs4.0 /bin/bash
#修改配置文件(修改步骤1中默认的配置文件)
vi conf/rtmp2rtc.conf

#配置文件内容

listen 1935; #必须有,rtmp协议,公网必须开放这个端口
max_connections 1000;
daemon off;
srs_log_tank console;

http_api {
enabled on;
#必须有,webrtc播放需要,可以在nginx配置转发,location /rtc {},无需开放该端口
listen 1985;
}

http_server {
enabled on;
listen 8080;
#开发阶段需要,这个是srs自带的web页面,可以使用nginx代理
dir ./objs/nginx/html;


}


rtc_server { #webrtc服务,必须开放公网8000端口
enabled on;
listen 8000;
candidate 公网IP地址;
}

# @doc https://github.com/ossrs/srs/issues/1147#issuecomment-577607026
vhost __defaultVhost__ {

#这个是rtc配置,开启rtmp转rtc
rtc {
enabled on;
rtmp_to_rtc on;
rtc_to_rtmp on;
}

#开启http-flv
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}

#rtmp的低时延配置
tcp_nodelay on;
min_latency on;

play {
gop_cache off;
queue_length 10;
mw_latency 100;
}

publish {
mr off;
}


#视频录制功能
dvr {
enabled on;
dvr_path /usr/local/srs/static/DVR-video/[app]/[01]-[2006]/[02]-day/[stream]-[2006]-[01]-[02]_[15]_[04]_[05].mp4;
dvr_plan session; #存一次推流中的所有的视频
dvr_duration 30;
dvr_wait_keyframe on;
}

http_hooks {
#回调函数,on是启动,off是中止
enabled off;
on_dvr http://host.docker.internal:8888/srs/dvr;
#视频录制的回调函数,一个视频录制完成后,会向给url发起post请求
on_publish http://host.docker.internal:8888/srs/publish;
on_unpublish http://host.docker.internal:8888/srs/un_publish;
on_play http://host.docker.internal:8888/srs/play;
on_stop http://host.docker.internal:8888/srs/stop;

}

}


此时推流rtmp到srs服务器时,在使用srs自带的播放器拉取webrtc流,就会发现拉取不到,你可以停止推流rtmp。
到:C:\5G\5GApi\static\DVR-video  目录下查看是否有录制的视频,发现有该视频。
总结:
1、这种配置,可以录制,但是不能播放。
2、具体原因在于公网IP只将8001和1936端口映射个宿主机,而宿主机又是将8001和1936映射给srs容器的8000和1935,最致命的是srs服务器是根据配置文件中的8000和1935端口来生成对应可以播放webrtc流的验证数据,导致无法播放

三、正确的方法
1、启动srs容器:宿主机端口和容器端口映射时,保持端口一致
docker run -it --name srs4.0-test --restart=always -v C:\5G\5GApi\static\DVR-video:/usr/local/srs/static/DVR-video -p 1936:1936 -p 1985:1985 -p 8080:8080 -p 10080:10080/udp -p 8001:8001/udp registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/rtmp2rtc.conf
2、配置srs配置文件:使用宿主机端口启动
listen 1936; #必须有,rtmp协议,公网必须开放这个端口
max_connections 1000;
daemon off;
srs_log_tank console;

http_api {
enabled on;
#必须有,webrtc播放需要,可以在nginx配置转发,location /rtc {},无需开放该端口
listen 1985;
}

http_server {
enabled on;
listen 8080;
#开发阶段需要,这个是srs自带的web页面,可以播放webrtc等视频,公网无需开发这个端口
dir ./objs/nginx/html;


}

srt_server { #没有使用到srt服务,无需开发10080端口
enabled on;
listen 10080;
maxbw 1000000000;
connect_timeout 4000;
latency 20;
peerlatency 20;
recvlatency 20;
}

rtc_server { #webrtc服务,必须开放公网8000端口
enabled on;
listen 8001;
candidate 112.94.31.117;
}

# @doc https://github.com/ossrs/srs/issues/1147#issuecomment-577607026
vhost __defaultVhost__ {

#这个是rtc配置,开启rtmp转rtc
rtc {
enabled on;
rtmp_to_rtc on;
rtc_to_rtmp on;
}

#开启http-flv
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}

#rtmp的低时延配置
tcp_nodelay on;
min_latency on;

play {
gop_cache off;
queue_length 10;
mw_latency 100;
}

publish {
mr off;
}


#视频录制功能
dvr {
enabled on;
dvr_path /usr/local/srs/static/DVR-video/[app]/[01]-[2006]/[02]-day/[stream]-[2006]-[01]-[02]_[15]_[04]_[05].mp4;
dvr_plan session; #存一次推流中的所有的视频
dvr_duration 30;
dvr_wait_keyframe on;
}

http_hooks {
#回调函数,on是启动,off是中止
enabled off;
on_dvr http://host.docker.internal:8888/srs/dvr;
#视频录制的回调函数,一个视频录制完成后,会向给url发起post请求
on_publish http://host.docker.internal:8888/srs/publish;
on_unpublish http://host.docker.internal:8888/srs/un_publish;
on_play http://host.docker.internal:8888/srs/play;
on_stop http://host.docker.internal:8888/srs/stop;

}

}

这样配置时,就可以正常拉取webrtc的视频流了。



香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价