SRS视频媒体服务器-docker启动:更换默认端口时的错误

news2025/1/4 16:24:15

一、概述

在使用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的视频流了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

环保行业如何开发废品回收微信小程序

废品回收是近年来受到越来越多人关注的环保行动。为了推动废品回收的普及和方便,我们可以利用微信小程序进行制作,方便人们随时随地参与废品回收。 首先,我们需要注册并登录乔拓云账号,并进入后台。乔拓云是一个提供微信小程序制作…

【网络通信】socket编程——TCP套接字

TCP依旧使用代码来熟悉对应的套接字,很多接口都是在udp中使用过的 所以就不会单独把他们拿出来作为标题了,只会把第一次出现的接口作为标题 文章目录 服务端 tcp_servertcpserver.hpp(封装)初始化 initServer1. 创建socket2. 绑定 bindhtons —— 主机序…

Cortex-M3的双堆栈MSP和PSP(学习)

M3的栈,先进后出。 是局部变量内存的开销,函数的调用都离不开栈。 Cortex-M3内核使用了双堆栈,即MSP和PSP。 MSP:Main_Stack_Pointer,即主栈。 PSP:Process_Stack_Pointer,即任务栈。 SP&#…

如何在win7的右键菜单栏上添加“在此处打开Powershell”

打开regedit.exe 找到计算机\HKEY_CLASSES_ROOT\Directory\Background\shell。 在项下建立新项Powershell,并且在Powershell项下建立新项command,如图所示: 在Powershell的默认的项中填写名称在此处打开Powershell窗口。 新建字符串值Ex…

如何快捷发布学生志愿录取情况?

随着新学期的临近,作为一名招生老师,你是否已经做好了新学年的招生准备工作呢?在招生名单确认后,录取查询就成为了当前急需完成的工作。那么,如何让新生能够自主查询自己的录取情况呢? 作为招生老师&#…

flutter开发实战-实现左右来回移动的按钮引导动画效果

flutter开发实战-实现左右来回移动的按钮引导动画效果 最近开发过程中需要实现左右来回移动的按钮引导动画效果 一、动画 AnimationController用来控制一个或者多个动画的正向、反向、停止等相关动画操作。在默认情况下AnimationController是按照线性进行动画播放的。Animati…

CelebA-HQ数据集下载【详细明了版】分辨率包括【64,128,256,512,1024】

CelebA-HQ数据集下载,分辨率包括【64,128,256,512,1024】 前言下载&处理1.下载合并解压img_celeba.7z2.下载list_landmarks_celeba.txt3.获取h5tool.py4.mkdir5. 下载.dat数据 配置环境生成数据集 前言 CelebA-HQ …

谷歌推出Flax:JAX的神经网络库

在优化理论中,损失或成本函数测量拟合或预测值与实际值之间的距离。对于大多数机器学习模型,提高性能意味着最小化损失函数。 但对于深度神经网络,执行梯度下降以最小化每个参数的损失函数可能会消耗大量资源。传统方法包括手动推导和编码&a…

MySQL — InnoDB事务

文章目录 事务定义事务特性事务隔离级别READ UNCOMMITTEDREPEATABLE READREAD COMMITTEDSERIALIZABLE 事务存在的问题脏读(Dirty Read)不可重复读(Non-repeatable Read)幻读(Phantom Read) 事务定义 数据库…

【vue3】elementPlus主题色定制

以scss语言为例 1、element-plus自动按需导入配置,可参考官网按需导入模块 安装element-plus及辅助插件 npm i element-plus --save安装辅助插件 npm install -D unplugin-vue-components unplugin-auto-import安装sass npm i sass -D2、vite.config.js 中配置…

FPGA应用学习笔记--时钟域的控制 亚稳态的解决

时钟域就是同一个时钟的区域,体现在laways语句边缘触发语句中,设计规模增大就会导致时钟不同步,有时差,就要设计多时钟域。 会经过与门的延时产生的新时钟域,这种其实不推荐使用,但在ascl里面很常见 在处理…

《2023年中国企业数字化转型发展白皮书》发布

导读 本报告主要采用市场调查、行业深度访谈、桌面研究等方法,并使用艾媒咨询旗下各大数据计算系统和相关计算模型。 对部分相关的公开信息进行筛选,通过对行业专家、相关企业与网民进行深度访谈,了解相关行业主要情况,获得相应…

k8s dns 解析service异常

查看kube-dns日志 for p in $(kubectl get pods --namespacekube-system -l k8s-appkube-dns -o name); \ do kubectl logs --namespacekube-system $p; done k8s教程(service篇)-总结_阿甘兄的技术博客_51CTO博客

常用的mysql子查询

你好!下面是一些常用的 MySQL 子查询: 标量子查询(Scalar Subquery):返回单个值作为查询结果。SELECT column_name FROM table_name WHERE column_name (SELECT column_name FROM table_name WHERE condition); 列表…

ML类CFAR检测器在不同环境中检测性能的分析

摘要:该文是楼主翻阅书籍以及一些论文总结出来的关于ML(均值)类CFAR检测器在不同环境中的性能对比,以及优缺点的总结,可以帮助大家面对不同情形如何选择CFAR问题。由于楼主见识短浅,文中难免出现不足之处,望各位指出。…

Docker之jenkins部署harbor在harbor中完成部署

Docker之jenkins部署harbor在harbor中完成部署 1、harbor作用 Harbor允许用户用命令行工具对容器镜像及其他Artifact进行推送和拉取,并提供了图形管理界面帮助用户查阅和删除这些Artifact。在Harbor 2.0版本中,除容器镜像外,Harbor对符合OCI…

自定义线程池 01 - 阻塞队列

完整代码已上传gitee ,地址 :朱元杰的开源仓库 – ThreadPool核心源码仿写 完整文章栏目地址在:Fearless____的博客 - ThreadPool仿写 接下来将手动仿写一个线程池,第一步先仿写 阻塞队列 ​​​​​​​​​​​​​​​​​ 为…

docker删除容器时报错:Error response from daemon: reference does not exist

前言 之前使用的docker版本太低了,升级高版本docker之后的错误。 低版本docker(1.30.1)中的镜像有:golang、mysql,将docker升级为24.0.5并新拉取mysql最新版本之后,执行docker images命令,发现…

【Kaggle】Identify Contrails to Reduce Global Warming 比赛数据集的可视化(含源代码)

一、数据简单解读 卫星图像最初来自&#xff1a; https://www.goes-r.gov/spacesegment/abi.html高级基线成像仪是GOES-R系列中用于对地球天气、海洋和环境进行成像的主要仪器。ABI用16个不同的光谱波段观察地球&#xff08;上一代GOES只有<>个&#xff09;&#xff0c…

MySQL数据库基础语法 - 上

一&#xff0c;数据库操作 数据库中不区分大小写&#xff01;&#xff01;&#xff01; 1.1 显示数据库 show databases ; 如图&#xff1a; 1.2 创建数据库 create database [ if not exists ]数据库名 ; 如图&#xff1a; 1.3 使用数据库 use 数据库名 &#xff1b; 如图&a…